![]() |
FensterText per ProcessID bekommen?
Hi,
kurze und schnelle Frage: WIe kann ich per WinAPI den Text des Fensters einer Anwendung bekommen deren ProcessID ich habe? Ich finde bei MSDN leider keine API. Danke im Vorraus für Hilfe MfG: sk0r |
Re: FensterText per ProcessID bekommen?
von der pid solltest du irgendwie zum hauptfenster kommen, und das handle des hauptfensters kann in GetWindowText(Len) packen.
|
Re: FensterText per ProcessID bekommen?
http://msdn2.microsoft.com/en-us/library/ms633520(VS.85).aspx
|
Re: FensterText per ProcessID bekommen?
GetWindowText() habe ich schon ausprobiert. MEin Ziel ist es,
dass eine injizierte DLL den Fenstertext des Zielprogrammes zu bekommen.
Code:
Die Eigene Anwendung hat doch immer die Nummer 0, oder?
procedure TForm1.FormCreate(Sender: TObject);
var myBuf: array[0..250] of Char; begin setlasterror(ERROR_SUCCESS); GetWindowText(0, myBuf, sizeof(myBuf)); showmessage(myBuf); showmessage(syserrormessage(getlasterror)); end; |
Re: FensterText per ProcessID bekommen?
nein, auch die eigene Anwendung hat nicht die 0
|
Re: FensterText per ProcessID bekommen?
Also GetWindowText kann nicht einfach so funktionieren, da es ja
selbst ein Handle als Parameter benötigt. Aber wie komme ich da drann? :/ |
Re: FensterText per ProcessID bekommen?
ähm, getcurrentprocess oder so ähnlich sollte dir die procid geben... und dann weiter wie in meinem ersten post ^^
|
Re: FensterText per ProcessID bekommen?
schon klar, aber wie komme ich denn an das fenster handle?^^
|
Re: FensterText per ProcessID bekommen?
aus der google-suche entnommen:
Zitat:
|
Re: FensterText per ProcessID bekommen?
Die meisten Prozeße werden mehrere Fenster haben. Schlimmer noch, dank der Tatsache, daß es sowas wie ein "Hauptfenster" nicht gibt (ein Prozeß kann da auch mehrere mit dem entsprechenden Fensterstil haben), mußt du wohl, wie schon erwähnt durch alle Fenster gehen und ermitteln ob das gewünschte dabei ist. Da wird wohl nur eine Kombination aus Text, Klasse und Stil (o.ä.) einen Erfolg bringen. Wenn du nur den Text ermittelst, kann das schiefgehen.
|
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; |
Re: FensterText per ProcessID bekommen?
EnumThreadWindows muss dann aber auch für alle Threads des Prozesses ausgeführt werden!
|
Re: FensterText per ProcessID bekommen?
Dass wird doch in der Schleife gemacht oder nicht?
In den meisten Fällen wird es jedenfalls ausreichen. |
Re: FensterText per ProcessID bekommen?
oder nicht 'EnumThreadWndProc' müßte mehrfach aufgerufen werden...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr. |
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