windows下,有时候结束一个托盘程序的进程会遇到这样的情况,程序退出后,托盘的图标还在,但鼠标移过去之后就消失了,delphi里如何实现刷新托盘呢?
用TerminateProcess把一个进程结束后有个问题,就是如果该程序在托盘有图标的话,这个图标并不会在它被结束时也消失。当然你用鼠标从上面移过可以解决这个问题,但本人在用自己的刷新辅助软件“疯狂刷新”的时候,每5分钟结束一次,一天下来如果不动电脑,就会在托盘区生成NNN个死图标,即使你拚命去点,也要点半天才能全部消除。有没有办法一下子搞定它呢?答案是肯定的,在网上搜了很久……用Delphi编写几行代码搞定。
添加自定义类型,用作判断系统类型,
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 KillTrayIcons (Sender: TObject);
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;
//调用 KillTrayIcons(self) 过程就可以瞬间清除所有无用的托盘图标了。
分享到:
相关推荐
DELPHI 线程文件强制关闭,重新启动,并刷新托盘图标
Delphi refreshtray移除无效的Windows系统托盘图标,非鼠标移动模拟方法,相关的代码: begin hStatus := FindWindow('Shell_TrayWnd',nil); //得到任务栏句柄 if not iswindow(hStatus) then exit; ...
Delphi右下角消息提示窗口,类似QQ的迷你提示窗口,显示在屏幕的右下角,十分漂亮,程序分别以Tiptimer方法和Tip循环方法来实现,其效果基本一样。
用delphi开发的,窗体启动时自动生成托盘图标,窗体最小化时也最小化到托盘,单击图标打开窗体,关闭窗体时释放图标 每次写新的程序可以直接拿来用,很方便
delphi--TrayIcon 系统托盘图标控件
delphi开发在windows任务栏中创建程序托盘小图标
主要实现类似QQ图标,用DELPHI编译生成可执行文件之后,生成的小图标当运行的时候,窗体消失,图标在右下角显示,当点击小图标时页面显示。
delphi7做的图标托盘。可设置多图标,可以动态控制图标显示,可以实现动画效果
delphi7.0写的系统托盘源码,可以实现程序缩小到右下角,调用方法在PAS文件里面
Windows系统托盘图标的显示Delphi演示程序 在Windows系统的托盘中动态显示程序图标,一个常用的技巧,比较实用。
DevExpressTdxAlertWindowManager_右下角弹出式消息框组件的运用
Delphi实现TipTimer与Tips循环的右下角Tips提示,运行程序后即在右下角弹出一提示窗口,严格来说不是弹出,而是滑出来,由下到上滑出,带关闭功能。同时本窗口有两种生成方法:一是显示TipTimer法,二是显示Tips循环...
Delphi实现的右下角弹出窗口,类似网页上的右下角广告窗口、重要信息公告窗口,在WEB设计中更多用于广告了,在Delphi软件中,你同样可以把本弹出窗口用于广告设计中,支持关闭功能。
Delphi制作最小化到系统托盘的程序&TForm1.FormDestroy不执行的原因.zip
delphi 右下角弹出窗口,渐渐出现窗口
利用delphi实现对主窗体的托盘显示效果,实现最小化到右下角托盘
DELPHI右下角报警提示窗口源代码,DELPHI右下角报警提示窗口源代码
delphi的系统托盘****************
使用方便,只要插入控件,就能使程序运行时到最小化到桌面右下角,也可以隐藏程序
delphixe实现托盘,在屏幕右下角消息提醒。