[请教]系统栏图标如何隐藏的问题(200分)

  • 主题发起人 主题发起人 cowind
  • 开始时间 开始时间
C

cowind

Unregistered / Unconfirmed
GUEST, unregistred user!
哪为大哥知道怎么样隐藏系统栏里的小图标,就想WINAMP一样可以选择显示系统栏里或不显示在系统栏。希望可以做一个小程序控制系统栏里的那些小图标。
 
安装托盘图标<br>uses<br>&nbsp; ……,Shellapi,……<br><br>var<br>&nbsp; IconData:TNotifyIconData;<br>&nbsp; Icon:TIcon;<br>begin<br>&nbsp; ……<br>&nbsp; IconData.cbSize:=SizeOf(IconData);<br>&nbsp; IconData.Wnd:=Handle;<br>&nbsp; IconData.uID:=ICON_ID;<br>&nbsp; IconData.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;<br>&nbsp; IconData.uCallBackMessage:=MI_ICONEVENT;<br>&nbsp; IconData.hIcon:= Icon.Handle;<br>&nbsp; IconData.szTip:='任意的字符串';<br>&nbsp; Shell_NotifyIcon(NIM_ADD,@IconData);<br>&nbsp; ……<br>end;<br><br>卸载托盘图标:<br>var<br>&nbsp; IconData:TNotifyIconData;<br>begin<br>&nbsp; ……<br>&nbsp; IconData.cbSize:=SizeOf(IconData);<br>&nbsp; IconData.Wnd:=Handle;<br>&nbsp; IconData.uID:=ICON_ID;<br>&nbsp; Shell_NotifyIcon(NIM_DELETE,@IconData);<br>&nbsp; ……<br>end;<br>如果可以得到你希望控制图标的应用程序窗口的Handle,应该可以从托盘中卸载掉图标。但是再次安装时会有问题,比如原来右击图标会弹出菜单,现在通过你的程序卸载了再安装时,图标是无法和对应程序的菜单弹出事件联系起来的。<br>不知大虾们有什么好办法?
 
qq:71892967
 
Shell_NotifyIcon函数,若是小问题,此函数可解决<br>Shell_NotifyIcon(NIM_DELETE,@IconData)
 
to miaofeng:<br>&nbsp; &nbsp; 我刚刚开始学编程,可不可以给我做点解释,分数嘛,你要我在帮你凑点<br><br>谢谢啦,刚刚开始学请多关照
 
to miaofeng:<br>&nbsp; &nbsp; 你写的东西我看了一下,可以还是不知道怎么控制别的程序的托盘上的图标啊?<br>如果假设句柄和ID都知道,该怎么做??(给个例子可以吗)分稍后在给,谢谢]<br>cowind@tom.com<br>
 
来个高手咯~~帮帮忙啊。。。。<br><br>我顶
 
这个不是分的问题:)是我也没有控制托盘图标这方面的实践,只是做过在托盘中的程序:)<br>得到程序的句柄可以使用FindWindow函数,可是在这里好像也不合适的。特别是,从托盘中移除一个程序的图标后,在怎样加入,并且和对应的菜单连起来都是问题。看看高手们有什么好办法。
 
http://bbs.zglong.com<br>
 
老问题了,请看<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=846573
 
大哥我是学DELPHI,不懂VB<br>谢谢合作
 
怎么没有好心人来帮帮我啊???<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UP
 
唉,又碰到一个不给源代码就不行的拉!其实,很简单的,你按照miaofeng的去试,就可以拉!!
 
对呀——上面miaofeng的代码已经都贴出来了,把它拷贝到你的程序里还不会吗?????<br>再贴一次:<br>uses shellapi;<br>////////////////////////////////////////////<br>const<br>&nbsp; &nbsp;WM_MYTRAYICONCALLBACK = WM_USER + 1000 ;<br>private<br>&nbsp; &nbsp; MyTrayIcon : TNotifyIconData ;<br><br>&nbsp; &nbsp; procedure WMMyTrayIconCallBack(Var Msg : TMessage);<br>&nbsp; &nbsp; message WM_MYTRAYICONCALLBACK ;///处理托盘消息过程<br>////////////////////////////////////////////<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; Icon.Handle := LoadIcon(Hinstance,'MAINICON');<br>&nbsp; MyTrayIcon.cbSize := SizeOf(TNotifyIconData);<br>&nbsp; MyTrayIcon.Wnd := Handle ;<br>&nbsp; MyTrayIcon.uID := 1 ;<br>&nbsp; MyTrayIcon.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE ;<br>&nbsp; MyTrayIcon.uCallBackMessage := WM_MYTRAYICONCALLBACK ;<br>&nbsp; MyTrayIcon.hIcon := Icon.Handle;<br>&nbsp; StrCopy (MyTrayIcon.szTip, PChar(Caption));<br>&nbsp; Shell_NotifyIcon(NIM_ADD,@MyTrayIcon);<br>&nbsp; //下面不让程序在任务栏上显示(缩放到托盘中 )<br>&nbsp; ShowWindow(Handle,sw_Hide);<br>&nbsp; Visible := False ;<br>&nbsp; Application.ShowMainForm := False ;<br>&nbsp; SetForegroundWindow(Application.Handle);<br>end;<br>//删除托盘图标<br>procedure TForm1.FormDestroy(Sender: TObject);<br>begin<br>&nbsp; MyTrayIcon.uFlags := 0;<br>&nbsp; Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon);<br>end;<br><br>///处理托盘消息(鼠标左键/右键/双击)<br>procedure TForm1.WMMyTrayIconCallBack(var Msg: TMessage);<br>var CursorPos : TPoint;<br>begin<br>&nbsp; case Msg.LParam of<br>&nbsp; &nbsp; WM_LBUTTONDBLCLK : begin<br>&nbsp; &nbsp; &nbsp; Visible := not Visible ;<br>&nbsp; &nbsp; &nbsp; Application.ShowMainForm := Visible ;<br>&nbsp; &nbsp; &nbsp; SetForegroundWindow(Application.Handle);<br>&nbsp; &nbsp; &nbsp; if Visible then<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; Application.Restore;<br>&nbsp; &nbsp; &nbsp; &nbsp; Application.BringToFront;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; end ;<br>&nbsp; &nbsp; WM_RBUTTONDOWN : begin<br>&nbsp; &nbsp; &nbsp; GetCursorPos(CursorPos);<br>&nbsp; &nbsp; &nbsp; Popupmenu1.Popup(CursorPos.X,CursorPos.Y);//右键弹出的菜单<br>&nbsp; &nbsp; end ;<br>&nbsp; end ;<br>end;<br>///<br><br>已经全面了
 
这次够详细,呵呵~!热心人!!
 
后退
顶部