这个问题困扰了我很长一段时间,这真的很烦人.
每次我在重新启动/重启后登录时,资源管理器都会花费一些时间来显示.
我已经采取了等待所有服务启动然后我登录的步骤,但它没有任何区别.
结果始终相同:即使应用程序已启动,某些图标也不会显示.
我已经挖了一些代码,让一个应用程序“粘贴”在那里的一个图标,但是有一个API调用可以执行,所以资源管理器重新读取所有图标信息?像无效或重绘或类似的东西?
显然,看起来乔恩是对的,这是不可能做到的.
我遵循了Bob Dizzle和Mark Ransom代码并构建了这个(Delphi Code):
procedure Refresh; var hSysTray: THandle; begin hSysTray := GetSystrayHandle; SendMessage(hSysTray,WM_PAINT,0); end; function GetSystrayHandle: THandle; var hTray,hNotify,hSysPager: THandle; begin hTray := FindWindow('Shell_TrayWnd',''); if hTray = 0 then begin Result := hTray; exit; end; hNotify := findwindowex(hTray,'TrayNotifyWnd',''); if hNotify = 0 then begin Result := hNotify; exit; end; hSyspager := findwindowex(hNotify,'SysPager',''); if hSyspager = 0 then begin Result := hSyspager; exit; end; Result := findwindowex(hSysPager,'ToolbarWindow32','Notification Area'); end;
但无济于事.
我甚至尝试过
InvalidateRect()
仍然没有表现.
还有其他建议吗?
看一下这篇博客文章:
REFRESHING THE TASKBAR NOTIFICATION AREA.我正在使用此代码刷新系统托盘以摆脱孤立的图标,它完美无缺.
博客文章内容丰富,并对作者发现其解决方案所采取的步骤进行了很好的解释.
博客文章内容丰富,并对作者发现其解决方案所采取的步骤进行了很好的解释.
#define FW(x,y) findwindowex(x,NULL,y,L"") void RefreshTaskbarNotificationArea() { HWND hNotificationArea; RECT r; GetClientRect( hNotificationArea = findwindowex( FW(FW(FW(NULL,L"Shell_TrayWnd"),L"TrayNotifyWnd"),L"SysPager"),L"ToolbarWindow32",// L"Notification Area"),// Windows XP L"User Promoted Notification Area"),// Windows 7 and up &r); for (LONG x = 0; x < r.right; x += 5) for (LONG y = 0; y < r.bottom; y += 5) SendMessage( hNotificationArea,WM_MOUSEMOVE,(y << 16) + x); }
原文地址:https://www.jb51.cc/windows/365869.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。