社区
C++ Builder
帖子详情
如何把windows任务栏上的程序隐藏到托盘图标中
bj_leo_2000
2002-03-25 04:57:56
如何把windows任务栏上的程序隐藏到托盘图标中,只能看到托盘图标看不到windows任务栏上的程序。我在工程文件里try之前用了ShowWindow(Application->Handle,SW_HIDE);可无效
...全文
994
9
打赏
收藏
如何把windows任务栏上的程序隐藏到托盘图标中
如何把windows任务栏上的程序隐藏到托盘图标中,只能看到托盘图标看不到windows任务栏上的程序。我在工程文件里try之前用了ShowWindow(Application->Handle,SW_HIDE);可无效
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
comefirst
2002-03-25
打赏
举报
回复
首先,请看看这些术语。系统托盘是一个在任务条右角的小方框,在托盘了应用程序可以显示小图标。任务条是可以在屏幕上伸展的工具栏。它就是程序图标所在的位置。想隐藏程序的任务条图标,你可以应用ShowWindow函数并传给它Application->Handle窗口句柄。
ShowWindow(Application->Handle, SW_HIDE);
若想让任务条图标再出现,只需将SW_HIDE改为SW_SHOW。
ShowWindow(Application->Handle, SW_SHOW);
注: 你可以设置主窗口的Visible属性为false来隐藏它。
注: 通过ShowWindow来隐藏窗口的任务条图标是不持久的。某些动作会使任务条图标重现。你可以将隐藏的应用程序窗口设为Tool Window来移走程序的任务条图标而避免它再次出现。Tool windows永远不会有任务条图标。 使应用程序窗口成为一个Tool Window有一个副作用:当用户按下Alt-TAB时它将不在程序列表中出现。你可以调用API函数GetWindowLong和SetWindowLong来使应用程序窗口成为一个Tool Window。
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
bj_leo_2000
2002-03-25
打赏
举报
回复
多谢大家!给分了!
NowCan
2002-03-25
打赏
举报
回复
DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
这个不知是否合你要求
bj_leo_2000
2002-03-25
打赏
举报
回复
托盘图标我会加,我是想知道怎样让工程在任务栏中消失。就是开始旁边的那一条
大大怪老张
2002-03-25
打赏
举报
回复
给分好了
大大怪老张
2002-03-25
打赏
举报
回复
给分吧
kingcaiyao
2002-03-25
打赏
举报
回复
Shell_NotifyIcon来实现就可以了。
marcal
2002-03-25
打赏
举报
回复
可以看例程D:\program files\Borland\CBuilder5\Examples\Controls\Traydemo
用C++ Builder编写Tray程序
周新栋
Tray(托盘)是Windows9x任务条上的一个特殊区域,它的技术名称为“任务栏布告区”,一些软件(如金山词霸Ⅲ)运行时会在托盘上放置一个图标,使用户一眼就能知道这个程序正在后台运行,要想激活它也很容易,通常只需单击一下这个图标即可,非常方便。
Tray的编程比较特殊,但并不难,主要包括图标、工具提示和消息等三个方面,它是Shell编程的一部分。ShellAPI提供了Shell—NotifyIcon函数,用它可以增加、删除或者修改托盘中的图标,在托盘上放置图标后,Windows Shell会负责把发生在图标上的鼠标事件通知应用程序。Shell—NotifyIcon函数定义如下:
WINSHELLAPI BOOL WINAPI Shell—NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid);
dwMessage表示要完成的操作:NIM—ADD(增加图标)、NIM—DELETE(删除图标)、NIM—MODIFY(修改图标或提示文本),pnid是一个指向NOTIFYICONDATA结构的指针,结构的定义如下:
typedef struct —NOTIFYICONDATA{
DWORD cbSize;//结构所占的字节数,必须用结构的大小来初始化。
HWND hWnd;//接受Tray图标消息的窗口句柄
UINT uID;//由应用程序定义的图标ID
UINT uFlags;//用来鉴别那些需要改变其值的域,NIF_ICON表示hIcon有效,可用来修改图标,NIF_MESSAGE表示uCallbackMessage有效,用来定义消息,NIF—TIP表示szTip参数有效,可修改工具提示。
UINT uCallbackMessage;//应用程序定义的消息
HICON hIcon;//Tray图标的句柄
char szTip[64];//工具提示的文本
}NOTIFYICONDATA;
下面我们就通过一个具体例子来说明实现方法,程序运行时不会显示主窗体,只在托盘上增加一个图标,双击图标可关闭程序。
程序运行时托盘区显示如下:
新建一个工程,放置一个Timer控件到窗体上。打开unit1.h文件,增加头文件说明#include <shellapi.h>,在TForm1定义的private段增加一些数据成员和方法的声明:
unsigned int iconmessage;//定义的消息
void AddTrayIcon();//在托盘上增加图标
void RemoveTrayIcon();//从托盘中删除图标
由于要增加对自定义消息的处理,所以必须重载窗口过程函数WndProc,在TForm1的定义中增加protected段:virtual void __fastcall WndProc(Messages::Tmessage& Message);
//为系统增加几个函数
在unit1.cpp中定义相应的成员函数:
void TForm1::AddTrayIcon() //增加图标
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata));
//将结构icondata的各域初始化为0
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
strncpy(icondata.szTip,″未知状态″,sizeof(icondata.szTip));
icondata.hIcon=Application->Icon->Handle;
icondata.uCallbackMessage=iconmessage;
icondata.uFlags=NIF—MESSAGE|NIF—ICON|NIF—TIP;
Shell—NotifyIcon(NIM—ADD,&icondata);
}
void TForm1::RemoveTrayIcon() //删除图标
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
Shell—NotifyIcon(NIM—DELETE,&icondata);
}
重载TForm1的WndProc函数,加入对自定义消息的处理代码,这其实相当于创建了TForm类的子类。
void __fastcall TForm1::WndProc(Messages::TMessage& Message) //
{
if(Message.Msg==iconmessage)
{
if(Message.LParam==WM—LBUTTONDBLCLK)
{
Application->Terminate();
//如果双击图标,则关闭应用程序
}
return;
}
TForm::WndProc(Message);//对于其他的消息,调用基础类的WndProc函数让Windows进行缺省处理。
}
创建窗体的OnCreate事件句柄:
void ——fastcall TForm1::FormCreate(TObject *Sender) //在窗体建立时候的动作
{
iconmessage=RegisterWindowMessage(″IconNotify″);
AddTrayIcon();//调用在系统栏建立图标的函数
}
这里通过调用RegisterWindowMessage函数来定义一个用户消息,也可以通过WM_USER+n来获得一个系统没有使用的消息编号。
void ——fastcall TForm1::FormDestroy(TObject *Sender) //在窗口结束的时候结束窗口,现在没有了这个事件,是不是应该用FormClose
{
RemoveTrayIcon(); //窗体在关闭时删除托盘中的图标
}
//编写Timer1的Timer事件代码,当用户将鼠标停留在图标上时,显示提示文本:
void ——fastcall TForm1::Timer1Timer(TObject *Sender)//时间事件
{
NOTIFYICONDATA icondata;
memset (&icondata, 0, sizeof (icondata));
icondata.cbSize = sizeof (icondata);
icondata.hWnd = Handle;
String s=″我的图标!″;//定义提示文本
strncpy (icondata.szTip, s.c_str(), sizeof (icondata.szTip));
icondata.uFlags = NIF—TIP ;
Shell—NotifyIcon (NIM—MODIFY,&icondata);
}
程序运行时不显示主窗体,只在托盘上放置相应的程序图标,从C++ Builder主选单中选择View|Project Source,在WinMain函数的Application→Initialize()语句后增加代码:
ShowWindow(Application→Handle,SW—HIDE);
Application→ShowMainForm=false;
按F9编译并运行程序,托盘上就会出现相应的图标。以上代码在C++ Builder3、Pwin98环境下编译、运行通过。
回复贴子:
回复人: HEROIN(HEROIN) (2001-9-29 13:25:33) 得0分
在Sample面板上,有个TrayIcon控件...
回复人: xzJohn(雪人) (2001-9-29 13:28:58) 得0分
见CB5目录下的Examples\Apps\trayicon\trayicon.bpr
回复人: cul(恐龙++) (2001-9-29 13:59:59) 得0分
在搜索页面找“最小化”有一堆。
回复人: dycdyc123(谢谢帮助!) (2001-9-29 14:44:27) 得0分
给篇文章;
Windows95的任务条(Taskbar)上有一个状态区,可以显示当前输入法(中文版)、当前时间等信息,当启动打印管理器时还可显示打印管理器的图标,表明打印机正在工作。我们可以使用这一技术为正在后台工作的程序设置一个图标,以显示它的工作状态,用户可以通过鼠标点击来查询详细情况或修改工作参数。下面对其实现方法作一介绍。
图标的添加和删除
实现这两个操作都是通过调用Shell_NotifyIcon函数,并传递两个参数:一个是操作指示,添加时为NIM_ADD,删除时为NIM_DELETE;另一个是结构NOTIFYCONDATA,并需适当的初始化。通过指定不同的图标标识号,可以添加多个图标。下面的两个函数分别实现添加图标和移去图标。
//AddTaskBarICON:将指定图标添加到TaskBar的状态区,成功返回TRUE,否则返回FALSE
//hwnd:指定接收消息的窗口
//uID:图标的标识号
//hicon:待添加的图标句柄
//IpszTip:当鼠标停留在图标上时显示的提示信息
BOOL AddTaskBarICON(HWND hwnd,UINT uID,HICON hicon,LPSTR lpszTip)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=hwnd;
tnid.uID=uID;
tnid.uFlags=NIF_MESSAGE¦NIF_ICON¦NIF_TIP;
//用户点击图标时传给指定窗口的回调函数的消息,由程序员自定义
tnid.uCallbackMessage=MYWM_NOTIFYICON;
tnid.hIcon=hicon;
if (lpszTip)
lstrcpyn(tnid.szTip,lpszTip,sizeof(tnid.szTip));
else
tnid.szTip[0]=‘\0''
//NIM_ADD:添加图标
res=Shell_NotifyIcon(NIM_ADD,&tnid);
if(hicon)
DestroyIcon(hicon);
return res;
}
//DeleteTaskBarIcon:移去AddTaskBar的状态区上的指定图标,成功则返回TRUE,否则返回FALSE
//hwnd:添加图标时指定的窗口
//uID:要删除的图标标识号
BOOL DeleteTaskBarIcon(HWDN hwnd,UITN uID)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=hwnd;
tnid.uID=uID;
//NIM_DELETE:移去图标
res=Shell_NotifyIcon(NIM_DELETE,&tnid);
return res;
}
接收图标返回的消息
_________________________________
状态区的图标可以接收用户的输入,将接收到的鼠标消息传送到指定窗口的回调函数,程序可以对用户的输入做出相应的反应。下面是对应的窗口回调函数和消息处理函数的例子:
//MainWndProc:窗口回调函数,处理传递给窗口的消息
//Windows根据在添加图标时指定的窗口句柄确定对应的回调函数
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lP
aram){
switch(message){
//MYWM_NOTIFYICON:添加图标时指定的消息
case MYWM_NOTIFYICON:
//调用自定义的消息处理函数
ON_MYWM_NOTIFYICON(wParam,lParam);
break;
……
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowsProc(hwnd,message,wParam,lParam));
}
return lParam;
}
//On_MYWM_NOTIFYICON:处理TaskBar的状态区图标产生的消息
marcal
2002-03-25
打赏
举报
回复
可以看例程D:\program files\Borland\CBuilder5\Examples\Controls\Traydemo
VC++
任务栏
托盘
图标
程序
VC++
任务栏
托盘
程序
,并且支持在
托盘
图标
处点击鼠标右键,会弹出相应窗口或菜单,这里省去了菜单,只弹出了一个演示窗口。当窗口
隐藏
时,用鼠标左键点击窗口
托盘
上的
图标
。即
程序
最小化后会显示一个
图标
在
托盘
处。 ...
枚举
任务栏
图标
,并且
隐藏
任意
图标
通过API函数穷举得到可视窗口的句柄,通过句柄获得对应窗口标题并显示在list
中
,在list
中
钩选相应项,则可
隐藏
窗口和窗口在任栏的
图标
.去掉对就项的钩则可使其恢复.
程序
主窗口也能
隐藏
,并且可通过热键ALT+F7将其唤出.并...
右下角
图标
隐藏
(PS Tray Factory) 3.2 汉化特别版
PS
托盘
工厂将帮助您管理的所有应用
程序
把他们的
图标
在
任务栏
上
托盘
。当你已经安装了PS
托盘
工厂,你会忘记这个问题缺乏空间在系统
托盘
中
,也将得到一个简单、快速和方便的工具来处理那些应用
程序
。简而言之,所有的...
魔法
隐藏
2006绿色版.rar
例如可以把聊天窗口伪装成Word,在
Windows
的任务工具栏上显示的是Word,而实际的窗口却是聊天窗口。 4.内部整合终极窗口属性修改器,比MS SPY++更强的窗口属性修改工具。您可以通过她查看、修改任意窗口或控制的...
托盘
小
程序
// 在
任务栏
隐藏
程序
// 在
托盘
区显示
图标
with NotifyIcon do begin cbSize := SizeOf(TNotifyIconData); Wnd := Handle; uID := 1; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallBackMessage := ...
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章