win7怎么删除托盘图标

电脑教程09

win7怎么删除托盘图标,第1张

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 = 1x <rTrayToolBar.right - 1x++)

{

for (int y = 1y <rTrayToolBar.bottomy++ )

{

::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=0i<lngButtons - 1i++ )

{

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)

上述相关代码已通过实际测试,均能达到指定的效果。

你的电脑使用的是nforce芯片组的主板和串口硬盘。在系统中安装好所有的硬件驱动程序后,发现在任务栏右下角始终会显示一个“安全删除硬件”的图标。这是nforce芯片组在安装了IDE-SW主板驱动以后,系统会把SATA硬盘识别为可移动设备,每次开机后都会显示这个图标。

清除方法:开始--运行中输入regedit。

打开注册表定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nvata]用右键点击“nvata”,选择“新建/DWORD值”选项,此时会在右侧窗口中添加一个“新值il”项,将它重命名为“DisableRemovable”,再双击它打开“编辑DWORD值”对话框,将“数值数据”更改为“1”,点击“确定”按钮即可。

如果在注册表中找不到“nvata”键值,可定位到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nvatabus]在点击“nvatabus”创建和设置“DisableRemovable”键值即可。

重启电脑后,系统就不会将SATA硬盘识别为可移动设备了,那个“安全删除硬件”图标也就消失了,而且不会影响其它可移动设备的正常使用,在插入U盘或移动硬盘等设备后,系统仍然会出现“安全删除硬件”的图标。

分类: 电脑/网络

问题描述:

那天一不小心点开了,OUTLOOK EXPRERS 图标,就在系统的拖盘里出现了一个这样的图标,而且在一开机的时候也就跟着出现了,平时我也不常用这个东西,但现在它显示在我的电脑系统拖盘里,也没什么用,留着会影响开机的速度,就想删了,但就是不清楚删注册表里具体的那东西,还望各位多多的指教。

解析:

开始——运行——键入regedit——回车

找到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

删除outlook express相关启动项