win7怎么删除托盘图标
就是自定义里面,有的程序已经卸载了,可是图标还在那,请问怎么删除~汗,都没说到正题win7向上的三角形点自定义不是可以选择程序图标的现实情况吗,有些程序已经卸载了,但是图...
就是自定义里面,有的程序已经卸载了,可是图标还在那,请问怎么删除~
汗,都没说到正题
win7向上的三角形点自定义不是可以选择程序图标的现实情况吗,有些程序已经卸载了,但是图标的设置还在那,怎么才能清除 展开
汗,都没说到正题
win7向上的三角形点自定义不是可以选择程序图标的现实情况吗,有些程序已经卸载了,但是图标的设置还在那,怎么才能清除 展开
4个回答
展开全部
win7删除托盘图标的方法:
1、通过向托盘区域发送WM_MOUSEMOVE消息,模拟鼠标移动到图潘区域的效果,使图标自动消失,代码如下:
HWND hWnd, hWndPager;
hWnd = ::FindWindow( "Shell_TrayWnd", NULL );
hWnd = ::FindWindowEx( hWnd, 0, "TrayNotifyWnd", NULL );
hWndPager = ::FindWindowEx( hWnd, 0, "SysPager", NULL );
if( !hWndPager )
hWnd = ::FindWindowEx( hWnd, 0, "ToolbarWindow32", NULL); // 对于Win2000,没有SysPager窗口
else
hWnd = ::FindWindowEx( hWndPager, 0, "ToolbarWindow32", NULL ); // XP有SysPager窗口
RECT rTrayToolBar;
::GetClientRect(hwnd, &rTrayToolBar); // 获取托盘图标区域坐标
for(int x = 1; x < rTrayToolBar.right - 1; x++)
{
for (int y = 1; y < rTrayToolBar.bottom; y++ )
{
::SendMessage(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); // 发送WM_MOUSEMOVE消息
}
}
这种方法简单明了,但是有如下的问题:
(1) 通过两个for循环想每个区域都发送一个WM_MOUSEMOVE消息,貌似不太合理;
(2) 当有QQ在运行,并且有未读消息,如果给QQ托盘图标发送WM_MOUSEMOVE消息,会弹出消息盒子提示窗口,这也不太合理。
2、实际上托盘图标区域对应一个ToolbarWindow32工具条窗口,每个托盘图标对应一个按钮,通过遍历找到指定程序的按钮ID,向这个按钮ID发送TB_HIDEBUTTON,使托盘图标消失,代码如下:
HWND hWnd,hWndPaper;
unsigned long lngPID;
long ret,lngButtons;
HANDLE hProcess;
LPVOID lngAddress;
long lngTextAdr,lngHwndAdr,lngHwnd,lngButtonID;
char strBuff[1024]={0};
char* str = NULL;
char *pp = NULL;
hWnd = ::FindWindow( "Shell_TrayWnd", NULL );
hWnd = ::FindWindowEx( hWnd, 0, "TrayNotifyWnd", NULL );
hWndPaper = ::FindWindowEx( hWnd, 0, "SysPager", NULL );
if( !hWndPaper )
hWnd = ::FindWindowEx( hWnd, 0, "ToolbarWindow32", NULL );
else
hWnd = ::FindWindowEx( hWndPaper, 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 );
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 ) );
pp=strstr( str,"阿里旺旺" ); // 通过窗口名称来比对
if(pp != NULL)
{
::SendMessage( hWnd, TB_HIDEBUTTON, lngButtonID, 1 );
}
}
}
VirtualFreeEx( hProcess, lngAddress, 0X4096, MEM_RELEASE );
CloseHandle( hProcess );
上述方法比较负责,但相对合理很多,但是这种方法只对win2000,XP系统有效,对与Win7却无能为力,没有效果。
3、对于Win7系统,程序的托盘图标最终是放置在和XP一样的ToolbarWindow32工具条窗口,但是有两个地方,同样是ToolbarWindow32工具条窗口,父窗口是不一样的。在右下角可见区域,ToolbarWindow32工具条窗口的父窗口是SysPager窗口,遍历方法同XP一样。对于掩藏的ToolbarWindow32工具条窗口,必须通过点击桌面右下角的可见区域左边的一个按钮,才会显示出来,其父窗口则是一个叫做托盘溢出的窗口NotifyIconOverflowWindow。所以除了这两个地方都要查找,查找后面的ToolbarWindow32工具条窗口,则只要直接查找NotifyIconOverflowWindow即可,代码如下:
//获取托盘溢出区域窗口句柄
hWnd = ::FindWindow(_T("NotifyIconOverflowWindow"), NULL);
hWnd = ::FindWindowEx(hWnd, NULL, _T("ToolbarWindow32"), NULL);
上述相关代码已通过实际测试,均能达到指定的效果。
1、通过向托盘区域发送WM_MOUSEMOVE消息,模拟鼠标移动到图潘区域的效果,使图标自动消失,代码如下:
HWND hWnd, hWndPager;
hWnd = ::FindWindow( "Shell_TrayWnd", NULL );
hWnd = ::FindWindowEx( hWnd, 0, "TrayNotifyWnd", NULL );
hWndPager = ::FindWindowEx( hWnd, 0, "SysPager", NULL );
if( !hWndPager )
hWnd = ::FindWindowEx( hWnd, 0, "ToolbarWindow32", NULL); // 对于Win2000,没有SysPager窗口
else
hWnd = ::FindWindowEx( hWndPager, 0, "ToolbarWindow32", NULL ); // XP有SysPager窗口
RECT rTrayToolBar;
::GetClientRect(hwnd, &rTrayToolBar); // 获取托盘图标区域坐标
for(int x = 1; x < rTrayToolBar.right - 1; x++)
{
for (int y = 1; y < rTrayToolBar.bottom; y++ )
{
::SendMessage(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); // 发送WM_MOUSEMOVE消息
}
}
这种方法简单明了,但是有如下的问题:
(1) 通过两个for循环想每个区域都发送一个WM_MOUSEMOVE消息,貌似不太合理;
(2) 当有QQ在运行,并且有未读消息,如果给QQ托盘图标发送WM_MOUSEMOVE消息,会弹出消息盒子提示窗口,这也不太合理。
2、实际上托盘图标区域对应一个ToolbarWindow32工具条窗口,每个托盘图标对应一个按钮,通过遍历找到指定程序的按钮ID,向这个按钮ID发送TB_HIDEBUTTON,使托盘图标消失,代码如下:
HWND hWnd,hWndPaper;
unsigned long lngPID;
long ret,lngButtons;
HANDLE hProcess;
LPVOID lngAddress;
long lngTextAdr,lngHwndAdr,lngHwnd,lngButtonID;
char strBuff[1024]={0};
char* str = NULL;
char *pp = NULL;
hWnd = ::FindWindow( "Shell_TrayWnd", NULL );
hWnd = ::FindWindowEx( hWnd, 0, "TrayNotifyWnd", NULL );
hWndPaper = ::FindWindowEx( hWnd, 0, "SysPager", NULL );
if( !hWndPaper )
hWnd = ::FindWindowEx( hWnd, 0, "ToolbarWindow32", NULL );
else
hWnd = ::FindWindowEx( hWndPaper, 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 );
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 ) );
pp=strstr( str,"阿里旺旺" ); // 通过窗口名称来比对
if(pp != NULL)
{
::SendMessage( hWnd, TB_HIDEBUTTON, lngButtonID, 1 );
}
}
}
VirtualFreeEx( hProcess, lngAddress, 0X4096, MEM_RELEASE );
CloseHandle( hProcess );
上述方法比较负责,但相对合理很多,但是这种方法只对win2000,XP系统有效,对与Win7却无能为力,没有效果。
3、对于Win7系统,程序的托盘图标最终是放置在和XP一样的ToolbarWindow32工具条窗口,但是有两个地方,同样是ToolbarWindow32工具条窗口,父窗口是不一样的。在右下角可见区域,ToolbarWindow32工具条窗口的父窗口是SysPager窗口,遍历方法同XP一样。对于掩藏的ToolbarWindow32工具条窗口,必须通过点击桌面右下角的可见区域左边的一个按钮,才会显示出来,其父窗口则是一个叫做托盘溢出的窗口NotifyIconOverflowWindow。所以除了这两个地方都要查找,查找后面的ToolbarWindow32工具条窗口,则只要直接查找NotifyIconOverflowWindow即可,代码如下:
//获取托盘溢出区域窗口句柄
hWnd = ::FindWindow(_T("NotifyIconOverflowWindow"), NULL);
hWnd = ::FindWindowEx(hWnd, NULL, _T("ToolbarWindow32"), NULL);
上述相关代码已通过实际测试,均能达到指定的效果。
展开全部
LZ你好 ,将你电脑右下角的时间更改掉,比如说改到2000年。保存后注销下,然后再重新登录,那些卸载的程序图标就都没了,然后再把时间改回来就OK了。很管用 试试看。这是我知道的最简单的方法了
追问
果然有用啊!谢谢啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去下载个win7优化大师(win xp的话优化大师也可以):
进入win7优化大师→系统美化→“移除快捷键上的箭头”勾上即可
进入win7优化大师→系统美化→“移除快捷键上的箭头”勾上即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那就是没有卸载干净咯,找个XX管家什么的 清理下。如果还有的话,在自定义里把那个图标隐藏了把
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询