![]() |
Mit ExeNamen auf Fensterhandle zugreifen
hallo,
ich würde gerne anhand eines ExeNamens auf ein Fenster zugreifen und dessen Höhe auslesen lassen. Nun ist mir auch die Problematik bekannt, dass ein ProcessHandle mehrere FensterHandles haben kann. Die gesuchte "exe" datei ist von meiner firma erstellt worden und hat immer nur ein fenster. Mit folgenden Funktionen habe ich jedoch ein kleines Problem:
Delphi-Quellcode:
(von hier erhalten:
uses
...TlHelp32...; ... function GetWindowHandleByExeName(const AExeName: string): THandle; ... var WindowHandle: THandle; ... function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): boolean; stdcall; var ProcessID: THandle; begin ProcessID := 0; GetWindowThreadProcessID(AHandle, ProcessID); Result := not (ProcessID = LParam); if not Result then WindowHandle := AHandle; end; function GetWindowHandleByExeName(const AExeName: string): THandle; var SnapShot: THandle; p: TProcessEntry32; ProcessHandle: THandle; begin Result := 0; WindowHandle := 0; ProcessHandle := 0; p.dwSize := SizeOf(p); SnapShot := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0); try if Process32First(SnapShot, p) then repeat if AnsiLowerCase(AExeName) = AnsiLowerCase(p.szExeFile) then ProcessHandle := p.th32ProcessID; until (ProcessHandle <> 0) or not Process32Next(SnapShot, p); EnumWindows(@MyEnumWindowProc, ProcessHandle); Result := WindowHandle; finally CloseHandle(SnapShot); end; end; ![]() >>> Compiler-Fehler bei: GetWindowThreadProcessID(AHandle, ProcessID); >>> Fehler-Beschreibung: [dcc32 Fehler] UnitUsefullTools.pas(35): E2250 Es gibt keine überladene Version von 'GetWindowThreadProcessId', die man mit diesen Argumenten aufrufen kann Der Compiler stört sich an der ProcessID, welches ein THandle ist. Lt. der Funktion wird jedoch ein DWORD benötigt. Nur ist mir diese Funktion "MyEnumWindowProc" vom Ablauf nicht nachvollziehbar und weiß mir daher nicht selbst zu helfen. (Die Funktion "GetWindowHandleByExeName" habe ich nachvollziehen können) Könnt ihr mir da etwas unter die Arme greifen? |
AW: Mit ExeNamen auf Fensterhandle zugreifen
Hallo,
schon mal:
Delphi-Quellcode:
oder
var
ProcessID: Dword;//THandle;
Delphi-Quellcode:
ausprobiert?
var
// ProcessID: THandle; ProcessID: Cardinal; |
AW: Mit ExeNamen auf Fensterhandle zugreifen
Der Austausch durch DWORD lässt den Compiler nicht mehr meckern. Jedoch bekomme ich ein Fenster-Handle "0" raus (PHandle existiert aber). Obwohl meine testanwendung nach der ich suche läuft (skype, thunderbird...).
Nach weiteren Recherchen war noch ein weiterer Fehler enthalten. Jetzt läuft es wie es soll... Das hier
Delphi-Quellcode:
muss durch das ersetzt werden:
function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): boolean;
stdcall;
Delphi-Quellcode:
function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): Bool;
stdcall; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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