Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Re: Handle eines Fensters über die Processid?
26. Jul 2007, 14:53
So geht es:
Delphi-Quellcode:
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;
GetWindowThreadID gibt nicht die ProzesID als Funktionsrückgabewert zurück, sondern im zweiten Parameter. Und wieder hilft es die Hilfe zu lesen:
Zitat:
Code:
hWnd
[in] Handle to the window.
lpdwProcessId
[out] Pointer to a variable that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the variable; otherwise, it does not.
Und
Zitat:
Code:
Return Value
The return value is the identifier of the thread that created the window.
Michael Ein Teil meines Codes würde euch verunsichern.
|
|
Zitat
|