Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FensterText per ProcessID bekommen? (https://www.delphipraxis.net/106538-fenstertext-per-processid-bekommen.html)

bitsetter 12. Jan 2008 19:34

Re: FensterText per ProcessID bekommen?
 
Hi,

mit EnumThreadWindows müsste es IMHO auch gehen, die Fenster in der Liste müsstest du eventuell nochmal filtern.
Mal schnell zusammengetippt:
Delphi-Quellcode:
uses TLHelp32, Contnrs;

type
  TWndItem = class(TObject)
    Wnd: HWND;
end;

function EnumThreadWndProc(Wnd: HWND; WndList: TObjectList): BOOL; stdcall;
var
  WndItem: TWndItem;
begin
  WndItem:= TWndItem.Create;
  WndItem.Wnd:= Wnd;
  WndList.Add(WndItem);
  Result:= true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  WndList: TObjectList;
  Thread32: TThreadEntry32;
  hThreadSnap: THandle;
  ProcId: DWord;
  i: integer;
  myBuf: array[0..250] of Char;
begin
  WndList:= TObjectList.Create;
  try
    ProcId := ...;//GetCurrentProcessId();
    hThreadSnap := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, ProcId);
    if (hThreadSnap > 0) and (hThreadSnap <> INVALID_HANDLE_VALUE) then
      try
        ZeroMemory(@Thread32, SizeOf(TThreadEntry32));
        Thread32.dwSize := SizeOf(TThreadEntry32);
        if Thread32First(hThreadSnap, Thread32) then
          repeat
            if ProcId = Thread32.th32OwnerProcessID then
              EnumThreadWindows(Thread32.th32ThreadID, @EnumThreadWndProc, DWord(WndList));
          until not Thread32Next(hThreadSnap, Thread32);
      finally
        CloseHandle(hThreadSnap);
      end;

    for i:= 0 to Pred(WndList.Count) do
    begin
      if Windows.IsWindowVisible(TWndItem(WndList.Items[i]).Wnd) then
      begin
        GetWindowText(TWndItem(WndList.Items[i]).Wnd, myBuf, sizeof(myBuf));
        ListBox1.Items.Add(myBuf);
      end;
    end;

  finally
    WndList.Free;
  end;
end;

Luckie 12. Jan 2008 22:19

Re: FensterText per ProcessID bekommen?
 
EnumThreadWindows muss dann aber auch für alle Threads des Prozesses ausgeführt werden!

bitsetter 13. Jan 2008 00:41

Re: FensterText per ProcessID bekommen?
 
Dass wird doch in der Schleife gemacht oder nicht?
In den meisten Fällen wird es jedenfalls ausreichen.

mschaefer 9. Mai 2009 22:33

Re: FensterText per ProcessID bekommen?
 
oder nicht 'EnumThreadWndProc' müßte mehrfach aufgerufen werden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz