![]() |
Handle eines Fensters über die Processid?
Hi,
ich ich glaube mein Titel beschreibt mein Problem gut ;-) also ich habe eine Processid und hätte gerne das Handel des Fensters. mfg gandime |
Re: Handle eines Fensters über die Processid?
Zitat:
|
Re: Handle eines Fensters über die Processid?
Welches Fensters? Ein Prozess kann mehrere Fenster haben.
|
Re: Handle eines Fensters über die Processid?
hmm ok wie komme ich alle Fenster-handels von einer Processid?
|
Re: Handle eines Fensters über die Processid?
Geh alle Fenster durch und mach getWindowThreadProcessId
|
Re: Handle eines Fensters über die Processid?
...und vergleiche die mit deiner ProzesID.
|
Re: Handle eines Fensters über die Processid?
mit folgendem Code habe ich jetzt versucht das Handle zu finden aber hatte keinen Erfolg
Delphi-Quellcode:
kann es vlt daran liegen das ProcInfo.dwProcessId ein Cardinal ist und GetWindowThreadProcessId ein DWORD ist?ProcInfo: TProcessInformation; function GetWindows(const hWnd: Longword; Param: PMyEnumParam): LongBool; stdcall; var Len: Longint; dwThreadID:dword; begin Result := True; if not (IsWindow(hWnd) and IsWindowVisible(hWnd)) then Exit; Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0); if Len > 0 then begin if (ProcInfo.dwProcessId=GetWindowThreadProcessId(hWnd,nil)) then begin MessageBox(0, 'hier', 'joa', 0); end; end; end; begin EnumWindows(@GetWindows, LPARAM(@Param)); end; |
Re: Handle eines Fensters über die Processid?
So geht es:
Delphi-Quellcode:
GetWindowThreadID gibt nicht die ProzesID als Funktionsrückgabewert zurück, sondern im zweiten Parameter. Und wieder hilft es die Hilfe zu lesen:
function EnumWindowsProc(hWnd: THandle; lp: LPARAM): LongBool; stdcall;
var ID : DWORD; len : Integer; Caption : PChar; begin if IsWindow(hWnd) and IsWindowVisible(hWnd) then begin GetWindowThreadProcessId(hWnd, ID); if GetCurrentProcessId = ID then begin len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0); Caption := GetMemory(len + 1); try SendMessage(hWnd, WM_GETTEXT, len, Integer(Caption)); MessageBox(0, Caption, 'Test', 0); finally Freememory(Caption); end; end; end; Result := True; end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWindowsProc, 0); end; Zitat:
Zitat:
|
Re: Handle eines Fensters über die Processid?
genau so funktioniert es :-)
danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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