这个问题困扰了我很长一段时间,真的很烦人。
每次我在重新启动/电源循环后登录时,资源管理器都需要一些时间才能显示出来。我已经采取了等待所有服务启动然后登录的步骤,但这没有任何区别。结果始终相同:即使应用程序已启动,某些图标也不会显示。
我已经对使一个应用程序“粘贴”图标的代码进行了一些研究,但是是否有一个 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()
仍然没有出现。
还有其他建议吗?