隐藏托盘图标的问题!!希望得到大家的帮助谢谢

C274091111 2008-11-23 01:50:38
如下:
我想隐藏另外一个程序的窗体,如"迅雷"

ShowWindow(FindWindow("Afx:400000:0:0:0:18ba0141", null), SW_HIDE);
//迅雷窗体类:"Afx:400000:0:0:0:18ba0141"
//ShowWindow(FindWindow(null,"迅雷5"), SW_HIDE);这样也可以.

上面这句可以隐藏掉迅雷的窗体.可是系统托盘里的迅雷图标还在.一点击窗体又出来了.
怎么样才能隐藏掉窗体的时候也隐藏掉托盘里对应的图标呢?
我是初学者非常的菜,希望得到大家的帮助.
小弟先谢谢了




系统提示我"您无权发这么多的可用分
晕了
...全文
1121 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
hailongchang 2008-12-05
  • 打赏
  • 举报
回复
隐藏Windows系统托盘图标:

http://blog.csdn.net/hailongchang/archive/2008/12/05/3454569.aspx
hailongchang 2008-12-04
  • 打赏
  • 举报
回复
这是曾经为朋友做过的一个隐藏大智慧软件任务栏图标的代码(C++),C#也是调用一些API函数,楼主分析下,用平台调用改为c#就是


//隐藏任务栏图标
void HideToolBar(bool bHide)
{
HWND hWnd,hWndTmp;
unsigned long lngPID;
long ret,lngButtons;
HANDLE hProcess;
LPVOID lngAddress;
long lngTextAdr,lngHwndAdr,lngHwnd,lngButtonID;
char strBuff[1024]={0};
char* str = NULL;

hWnd = ::FindWindow("Shell_TrayWnd", NULL);
hWnd = ::FindWindowEx(hWnd, 0, "TrayNotifyWnd", NULL);

hWndTmp = ::FindWindowEx(hWnd, 0, "SysPager", NULL);
if(!hWndTmp)
hWnd = ::FindWindowEx(hWnd, 0, "ToolbarWindow32", NULL);
else
hWnd = ::FindWindowEx(hWndTmp, 0, "ToolbarWindow32", NULL);

ret = ::GetWindowThreadProcessId(hWnd, &lngPID);
hProcess = ::OpenProcess(PROCESS_ALL_ACCESS
|PROCESS_VM_OPERATION
|PROCESS_VM_READ
|PROCESS_VM_WRITE,
0,
lngPID);
lngAddress = VirtualAllocEx(hProcess, 0, 0x4096, MEM_COMMIT, PAGE_READWRITE);//0x02e60000
lngButtons = ::SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);

for(int i = 0 ;i< lngButtons - 1;i++)
{
ret = ::SendMessage(hWnd,TB_GETBUTTON,i,long(lngAddress));
ret = ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress) + 16), &lngTextAdr, 4, 0);
if(lngTextAdr != -1)
{
ret = ::ReadProcessMemory(hProcess, LPVOID(lngTextAdr), strBuff, 1024, 0);
ret = ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress) + 12), &lngHwndAdr, 4, 0);
ret = ::ReadProcessMemory(hProcess, LPVOID(lngHwndAdr), &lngHwnd, 4, 0);
ret = ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress) + 4), &lngButtonID, 4, 0);

USES_CONVERSION;
str = OLE2T((LPOLESTR)(strBuff));
if(strlen(str) == NULL)
{
//索引到相应的buttonID,然后执行隐藏操作
if(!bHide)
::SendMessage(hWnd, TB_HIDEBUTTON, lngButtonID, MAKELONG (true, 0));
else
::SendMessage(hWnd, TB_HIDEBUTTON, lngButtonID, MAKELONG (false, 0));
}
}

}
::VirtualFreeEx( hProcess, lngAddress, 0X4096, MEM_RELEASE);
::CloseHandle(hProcess);
}


暗石绿 2008-12-04
  • 打赏
  • 举报
回复
http://download.csdn.net/source/836445

这是我刚上传的系统托盘图标的源代码,楼主可以下载下来看看是不是符合。
暗石绿 2008-12-04
  • 打赏
  • 举报
回复
我倒是有一个笨办法。
看DeleteAllTaskbarButtons()里。
for (int i = 0; i < count; i++)
{
SendMessage(window, TB_DELETEBUTTON, i, 0);
}
这个count,是获取了托盘里的所有的图标的数量。
一个for循环,把所有的托盘图标都删除了。
这表示,托盘的图标还有是索引的。可能迅雷的图标索引是1,也有可能是2。

如果你可以获取到更多的信息,比方说你获取到了图标的图像,就知道你想删除的托盘图标的具体索引了。

更笨的办法是我人工挨个自己试:

SendMessage(window, TB_DELETEBUTTON, 1, 0);
// 1 不对,我就试2,挨个试过去。
哈哈。
cwmwss 2008-12-03
  • 打赏
  • 举报
回复
帮顶
C274091111 2008-12-03
  • 打赏
  • 举报
回复
不是我想隐藏我自己程序的图标.这就简单了.
我是想隐藏别人程序的托盘图标
huangkui800 2008-12-03
  • 打赏
  • 举报
回复
顶个
风骑士之怒 2008-12-02
  • 打赏
  • 举报
回复
Winform很少研究,过来喝水
IMAGSE 2008-12-02
  • 打赏
  • 举报
回复
http://download.csdn.net/imagse


我以前上传过的一个例子,很详细的写了,还有注释

看看吧~
zcandyly20211 2008-12-02
  • 打赏
  • 举报
回复
用NotifyIcon控件
surewy 2008-12-02
  • 打赏
  • 举报
回复
mark
ximi82878 2008-12-02
  • 打赏
  • 举报
回复
好帖子,收藏了
jinsuo_1986 2008-12-02
  • 打赏
  • 举报
回复
帮顶咯,还学习!
空心兜兜 2008-11-30
  • 打赏
  • 举报
回复
学习下

lihuyin 2008-11-30
  • 打赏
  • 举报
回复
mark
lihuyin 2008-11-30
  • 打赏
  • 举报
回复
mark
DavidNoWay 2008-11-30
  • 打赏
  • 举报
回复
mark
zlb789 2008-11-30
  • 打赏
  • 举报
回复
学习
ZhengZhiRen 2008-11-28
  • 打赏
  • 举报
回复
学习!
simen_frankly 2008-11-28
  • 打赏
  • 举报
回复
帮顶哦
加载更多回复(50)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧