刷新系统托盘(清除死掉的图标)修正版[经测试]

  • A+
所属分类:[开发技巧]

type
TOSVersion = (osUnknown, os95, os98, osME, osNT3, osNT4, os2K, osXP, os2K3);
......
function GetOS: TOSVersion;
var
OS: TOSVersionInfo;
begin
ZeroMemory(@OS,SizeOf(OS));
OS.dwOSVersionInfoSize := SizeOf(OS);
GetVersionEx(OS);
Result := osUnknown;
if OS.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
case OS.dwMajorVersion of
3: Result := osNT3;
4: Result := osNT4;
5:
begin
case OS.dwMinorVersion of
0: Result:= os2K;
1: Result:= osXP;
2: Result:= os2K3;
end;
end;
end;
end
else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 0) then
Result := os95
else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 10) then
Result := os98
else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90) then
Result := osME
end;

function GetSysTrayWnd(): HWND;
//返回系统托盘的句柄,适合于Windows各版本
var OS: TOSVersion;
begin
OS := GetOS;
Result := FindWindow('Shell_TrayWnd', nil);
Result := FindWindowEx(Result, 0, 'TrayNotifyWnd', nil);
if(OS in [osXP, os2K3])then
Result := FindWindowEx(Result, 0, 'SysPager', nil);
if(OS in [os2K, osXP, os2K3])then
Result := FindWindowEx(Result, 0, 'ToolbarWindow32', nil);
end;

procedure RefreshTrayIcon();
//刷新系统托盘图标
var
hwndTrayToolBar : HWND;
rTrayToolBar : tRect;
x , y : Word;
begin
hwndTrayToolBar := GetSysTrayWnd;

Windows.GetClientRect(hwndTrayToolBar, rTrayToolBar);
for x:=1 to rTrayToolBar.right-1 do
begin
for y:=1 to rTrayToolBar.bottom-1 do
begin
SendMessage(hwndTrayToolBar , WM_MOUSEMOVE, 0, MAKELPARAM(x,y));
end;
end;
end;

===================================
调用RefreshTrayIcon()就OK

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
广告也精彩
avatar
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: