Voici ma méthode testé avec Windows XP et delphi 2010 si vous utilisez une version de wich delphi ne prend pas en charge unicode faire shure vous convertissez les chaînes lues ansi
uses CommCtrl;
function TForm1.GetIconsCount: Integer;
begin
Result := SendMessage(FindTrayToolbar, TB_BUTTONCOUNT, 0, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListTips;
end;
function TForm1.FindTrayToolbar: HWND;
begin
Result := FindWindow('Shell_TrayWND', nil);
Result := FindWindowEx(Result, 0, 'TrayNotifyWnd', nil);
Result := FindWindowEx(Result, 0, 'SysPager', nil);
Result := FindWindowEx(Result, 0, '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.
Je peux énumérer les icônes le systray Je peux énumérer l'application (handle, pid, path) Je peux contrôler la position des icônes. MAIS je ne peux pas obtenir l'info-bulle. C'est ce que j'aimerais savoir. –
Vous auriez pu le mentionner dans la question: "Je peux énumérer les icônes, mais je ne peux pas obtenir les info-bulles, voici le code que j'utilise, merci de nous aider à remplir les espaces." Avez-vous lu le deuxième lien que je vous ai donné? –
Oui, j'ai lu le deuxième lien. Je peux contrôler les icônes dans la zone de notification. Mais c'est une autre histoire. En utilisant plus ou moins le même code, je peux énumérer les icônes dans la barre d'état système. (Une traduction de http://www.codeproject.com/KB/applications/ShellTrayInfo.aspx) Mais je ne peux pas obtenir leur info-bulle. –