本站创建于2006年,博主为Delphi老码农,暗黑忠实粉丝,主要用于学习经验分享
    • 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) 过程就可以瞬间清除所有无用的托盘图标了。

      文章来源:http://hi.baidu.com/xingfupingguo/blog/item/d74af34557a11f398794731d.html

      标签: delphi, 托盘图标, 刷新托盘图标

    • 仅有一条评论 »

      小O

      小O August 28th, 2009 at 09:44 pm

      #1

      我的链接不见了呢?

      • 发表评论: ( 注意:为了防止广告评论,本站链接已经启用nofollow)
      •   您的名字
      •   E-mail
      •   您的网址(选填)

Powered by Typecho)))   ICP:蜀ICP备05009250号