微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 如何获取通知区域图标的工具提示?

我可以在通知区域中使用图标枚举应用程序(句柄,pid,路径),我可以控制图标的位置,但我无法获得工具提示.

如何枚举包含工具提示的系统托盘图标?

解决方法

这是我用windows xp和delphi 2010测试的方法,如果你使用的是delphi版本,不支持unicode make shure你将字符串读取转换为ansi
uses CommCtrl;

function TForm1.GetIconsCount: Integer;
begin
  Result := SendMessage(FindTrayToolbar,TB_BUTTONCOUNT,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    ListTips;
end;

function TForm1.FindTrayToolbar: HWND;
begin
  Result := FindWindow('Shell_TrayWND',nil);
  Result := findwindowex(Result,'TrayNotifyWnd','SysPager','ToolbarWindow32',nil);
end;

procedure TForm1.ListTips;
var
  dwTray: DWORD;
  wndTray: HWND;
  hTray: THandle;
  remoteTray: Pointer;
  tdata: TTBBUTTON;
  i: Integer;
  btsread:DWORD;
  str:Pchar;
begin
  wndTray := FindTrayToolbar;
  GetwindowThreadProcessId(wndTray,@dwTray);
  hTray := OpenProcess(PROCESS_ALL_ACCESS,false,dwTray);
  if hTray <> 0 then
  begin
   remoteTray := VirtualAllocEx(hTray,nil,Sizeof(tdata),MEM_COMMIT,PAGE_READWRITE);
    for i := 0 to GetIconsCount - 1 do
    begin
      SendMessage(FindTrayToolbar,TB_GETBUTTON,wparam(i),lparam(remotetray));
      ReadProcessMemory(hTray,remotetray,@tdata,sizeof(tdata),btsread);
      GetMem(str,255);
      ReadProcessMemory(hTray,Ptr(tdata.iString),str,255,btsread);
      ListBox1.Items.Add(str);
      end;
       end
        else ShowMessage('Could not locate tray icons');
    end;
    end.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐