【发布时间】:2010-09-09 15:18:15
【问题描述】:
这个问题困扰了我好久,真的很烦。
每次我在重新启动/重启后登录时,资源管理器都需要一些时间才能显示出来。 我已经采取了等待所有服务启动然后登录的步骤,但这没有任何区别。 结果总是一样的:即使应用程序已经启动,某些图标也不会显示。
我已经对使一个应用程序在其中“粘贴”一个图标的代码进行了一些研究,但是是否有一个 API 调用可以执行,以便资源管理器重新读取所有这些图标信息?比如无效或重绘之类的?
显然,Jon 似乎是对的,但这是不可能的。
我按照 Bob Dizzle 和 Mark Ransom 的代码构建了这个(Delphi 代码):
procedure Refresh;
var
hSysTray: THandle;
begin
hSysTray := GetSystrayHandle;
SendMessage(hSysTray, WM_PAINT, 0, 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, 0, 'TrayNotifyWnd', '');
if hNotify = 0 then
begin
Result := hNotify;
exit;
end;
hSyspager := FindWindowEx(hNotify, 0, 'SysPager', '');
if hSyspager = 0 then
begin
Result := hSyspager;
exit;
end;
Result := FindWindowEx(hSysPager, 0, 'ToolbarWindow32', 'Notification Area');
end;
但无济于事。
我什至尝试过
InvalidateRect() 仍然没有出现。
还有其他建议吗?
【问题讨论】:
标签: icons windows-explorer system-tray systray