gpt4 book ai didi

icons - 您能否向 Windows 资源管理器发送信号以使其刷新系统托盘图标?

转载 作者:行者123 更新时间:2023-12-05 00:41:17 25 4
gpt4 key购买 nike

这个问题已经困扰了我很长一段时间,真的很烦人。

每次我在重新启动/电源循环后登录时,资源管理器都需要一些时间才能显示。
我已经采取了等待所有服务启动然后登录的步骤,但这没有任何区别。
结果始终相同:即使应用程序已启动,某些图标也不会显示。

我已经挖掘了一些使一个应用程序在其中“粘贴”一个图标的代码,但是是否有一个可以执行的 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()
仍然没有显示。

还有其他建议吗?

最佳答案

看看这个博客条目: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"),
NULL,
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,
0,
(y << 16) + x);
}

关于icons - 您能否向 Windows 资源管理器发送信号以使其刷新系统托盘图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com