如何隐藏任务栏的小图标?(100分)

  • 主题发起人 主题发起人 叶不归
  • 开始时间 开始时间

叶不归

Unregistered / Unconfirmed
GUEST, unregistred user!
比如将任务栏的声音控制图标,或输入法图标隐藏。
要求程序实现。
关键:如何取得小图标的IconData.Wnd or IconData.uCallBackMessage?
 
好象没有隐藏,但可以删除。
 
IconData.Wnd就是图标的句柄啊!IconData.uCallBackMessage是自定义回调函数的地址,这是关键
Icon得到的消息会通过此地址传导到你自定义的回调函数中去,这样你就可以做你想做的了
 
我不知道,但我想知道!
 
to rockjie: 图标不是我建立的,我无法知道该图标的指针IconData
to tinytao: 如何删除?请示之
 
我说的是 Shell_NotifyIcon 函数只有删除图标,但没有隐藏。
我今天想了很多方法去取 IconData.Wnd 但都没取到。
不过我取到了 TrayNotifyWnd 的 Handle ,我就发了消息关闭它,哈,它真的关闭了。
不知你能不能满足要求。
//--------------------------
var
Handle: Integer;
begin
Handle:=FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0,'TrayNotifyWnd',nil);
if Handle > 0 then
Sendmessage(Handle,WM_CLOSE,0,0);
end;
//--------------------------
 
tinytao你的代码N年前就出现过了
其实要真的区ICONData是我认为基本上不可能的,否则屏幕上的每个ICON都能给你改了啊
 
to tinytao:
有些接近了,但是你的代码是关闭整个任务栏啊!
我试了用隐藏,结果系统进程每隔1秒就会刷新一次,于是马上就又显示了,就算能隐藏
也不是我想要的效果。
to all:
头疼!当mouse点击小图标时,系统只发送该小图标的主程序消息,外部程序无从取
得,再次,明明小图标是有Hwnd的,但我列举'Shell_TrayWnd'下的子窗口
ToolbarWindow32的所有子窗口,得到的却是空。我相信是可以得到的,只是我不知道
ToolbarWindow32记录的信息是什么,它的响应原理是什么?
 
Icon.hwnd是Icon的句柄!不是窗体的句柄!你找死了你都找不到!
 
每个小图标都是ToolbarWindow32上的一个按钮
HT: ToolbarWindow32的句柄
ii: 图表的索引(从0 开始)
SendMessage(HT, TB_DELETEBUTTON, ii, 0);
 
to 独帅:
高手!原来是ToolBar的消息,还有一个小问题就可以结束问题了,就是我不希望删除
,但是用SendMessage(HT, TB_HideBUTTON, ii, 0);和
SendMessage(HT, TB_HideBUTTON, ii, 1);为什么不能正常的隐藏和显示呢,这个和我以
前用SendMessage(H, WM_SHOWWINDOW, 1, 0);一样从未成功过。
 
请问:
TB_DELETEBUTTON、TB_HideBUTTON 是在那个单元声明的。
 
TB_DELETEBUTTON、TB_HideBUTTON 都是在单元CommCtrl中声明的。
至于TB_HideBUTTON为什么不成功,我想先试一下
 
to 独帅:静候佳音。也试试WM_SHOWWINDOW?
 
TB_HIDEBUTTON为什么不成功不清楚,
我用下面的可以:
SendMessage(HT, TB_HIDEBUTTON, ii, 1);//隐藏
SendMessage(HT, TB_HIDEBUTTON, ii, 0);//显示

WM_SHOWWINDOW我就更不清楚了,不过你可以这样实现:
ShowWindow(H, SW_HIDE);//隐藏
ShowWindow(H, SW_SHOW);//显示
 
真邪门了!我昨天跟你写的一样,怎么都不行,今天又可以了,可能昨天前面的试验把
任务栏弄傻了吧。
问题解决了,谢谢大家!
 
WM_SHOWWINDOW是某个窗口在自己的消息循环中会收到的消息之一,
可能会在它的父窗口最小化、最大化以及自己被(及不再被)其他的的窗口覆盖时
就会收到这个消息,然后它的DefWindowProc 应该就会调用ShowWindow来隐藏或者
显示自己。如果你给某个窗口发送WM_SHOWWINDOW而不起作用,可能就是他在自己的
WndProc里面处理了这个消息(可能只是简单的返回一个0),这样就由它决定是否调用
DefWindowProc 来进行默认的处理。如果他返回了0,它应该就不会被最小化。

大概可能差不多就是这样了,如果不对请指出,可别笑话我[:D]
 
后退
顶部