Entwickler-Ecke

Windows API - Handles von Taskbareinträgen


Xion - Di 24.07.07 14:01
Titel: Handles von Taskbareinträgen
Hi,

gibt es eine Möglichkeit, die Handles der Taskbareinträge auszulesen.

z.B. Handle des Startbuttons

Start-Button
1:
  h := FindWindowEx(FindWindow('Shell_TrayWnd'nil), 0'Button'nil);                    


dies muss doch auch für normale Taskbareinträge möglich sein.

Thx

Xion


Lossy eX - Di 24.07.07 14:27

Nicht direkt. Denn bei den TaskButtons handelt es sich nicht um richtige Buttons sondern um Tabs eines TabControls.

Aber schau dir mal die Fenster mit dem Winspector [http://www.windows-spy.com/] an. Dann solltest du alles nötige wissen um das Fenster finden zu können.


Xion - Mi 25.07.07 14:26

Hi,

danke, hat mir sehr geholfen. :zustimm: Stehe hier momentan aber noch vor einem Problem.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure HideTBEntry;
var h: THandle; Nr: integer; A:integer; Item:TCItem;
begin
      h := FindWindowEx(FindWindow('Shell_TrayWnd'nil), 0'ReBarWindow32'nil);
      h:=FindWindowEx(h,0,'MSTaskSwWClass',nil);
      h:=FindWindowEx(h,0,'SysTabControl32',nil);

      Nr:=SendMessage(h,TCM_GETITEMCOUNT,0,0);
      Item:=SendMessage(h,TCM_GETITEM,1, Integer(@Item));
end;


Delphi kennt TCItem nicht, und ich habe auch nicht mehr als das von msdn: http://msdn2.microsoft.com/en-us/library/ms650940.aspx Und ich weiß auch nicht, wie ich dann pszText auslesen kann.

Xion


Delete - Mi 25.07.07 17:26

CommCtrl einbinden und dann bitte dies lesen: http://www.delphipraxis.net/topic114947_zugriff+auf+steuerelemente+der+commoncontrols32.html


Xion - Do 26.07.07 09:36

danke :D

nur:
:arrow: dein Programm zeigt bei mir nur eine "2" an
:arrow: dieser Code liefert 'TEST' zurück, wobei alles mit True durchlaufen wird:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
      h := FindWindowEx(FindWindow('Shell_TrayWnd'nil), 0'ReBarWindow32'nil);
      h:=FindWindowEx(h,0,'MSTaskSwWClass',nil);
      h:=FindWindowEx(h,0,'SysTabControl32',nil);

      Nr:=SendMessage(h,TCM_GETITEMCOUNT,0,0);

      ProcessId := 0;
      GetWindowThreadProcessId(h, @ProcessId);
      // Prozess öffnen
      {True}Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
        PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);

      Size := SizeOf(TtcItem);
      {True}MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
      {True}MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE);

      for A:= 0 to Nr do



        begin

            ZeroMemory(MemLocal, SizeOf(TtcItem));

            MemLocal^.mask := TCIF_TEXT;
            MemLocal^.pszText := 'TEST';
            MemLocal^.cchTextMax:=256;

            NumBytes:=0;
            {True}WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes); // Struktur in den Remoteprozess kopieren
            {True}SendMessage(h, TCM_GETITEM, 0, integer(MemRemote)); // Struktur im Remoteprozess füllen
            {True}ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes); // Struktur in die lokale Struktur kopieren
            ShowMessage(String(MemLocal^.pszText)); //=>'TEST'
        end;
      if Assigned(MemRemote) then
        VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE);
      if Assigned(MemLocal) then
        VirtualFree(MemLocal, 0, MEM_RELEASE);
      CloseHandle(Process);


:arrow: diese Funktion "TabCtrl_GetItem_Text"(http://websnap123.com/Look.asp?it=3264098) bricht nach SendMessage ab

Xion


// Die "Get_SysTabCtrl_WinText" funktioniert aber, ich versuch mal zu kapieren warum. Thx :)


Xion - Fr 27.07.07 11:08

Hi,

unter Win2k läuft alles sauber, doch unter WinXP geht nichts. Mit dem Winspector stellt sich heraus, dass es unter WinXP keinen TabControl mehr gibt, sonderen ein "ToolbarWindow32". Somit ist der ganze Code unbrauchbar, da es eigentlich unter WinXP laufen soll. Somit müsste ich erstmal rausfinden, wie ich die Toolbar auslese.

Xion

//ah, da hab ich was schönes dazu :) http://www.codeproject.com/csharp/taskbarsorter.asp?df=100&forumid=184810&exp=0&select=1127363