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

前端之家收集整理的这篇文章主要介绍了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.
原文链接:https://www.f2er.com/delphi/103207.html

猜你在找的Delphi相关文章