![]() |
Window listing
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Delphianer
Ich versuche mich gerade mit dem Window Listing. Leider treten da bei mir folgende Effekte mit komischen Zeichen auf. Anhang 49067 Der code dazu schaut so aus...
Delphi-Quellcode:
Was hat das mit den komischen Zeichen auf sich?
function GetClass(Handle: integer): string;
var Buf: array[0..255] of char; begin GetClassName(Handle,Buf,255); Result := Buf; end; function HandleToPid(Handle: integer): integer; var PID: dword; begin GetWindowThreadProcessId(Handle,Pid); Result := Pid; end; function PidToPath(Pid: integer): string; var ProcessHandle: THandle; Buf: array[0..MAX_PATH] of char; begin ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false,Pid); GetModuleFileNameEx(ProcessHandle,0,Buf,MAX_PATH); Result := String(Buf); CloseHandle(ProcessHandle); end; function GetCaption(Handle: integer): string; var Buf: array[0..255] of char; begin GetWindowText(Handle,Buf,255); Result := Buf; end; function eWindows(Handle: integer; Num: Integer): bool; stdcall; var IncludeHidden: string; IncludeVisible: string; begin IncludeVisible := inttostr(Num); IncludeHidden := copy(IncludeVisible,1,1); Delete(IncludeVisible,1,1); if IncludeVisible = '1' then if iswindowvisible(Handle) then begin WindowListing := WindowListing + inttostr(Handle) + '|' + GetCaption(Handle) + '|' + GetClass(Handle) + '|' + PidToPath(HandleToPid(Handle)) + '|' + inttostr(HandleToPid(Handle)) + #13#10; end; if IncludeHidden = '1' then if not iswindowvisible(Handle) then begin WindowListing := WindowListing + inttostr(Handle) + '|' + GetCaption(Handle) + '|' + GetClass(Handle) + '|' + PidToPath(HandleToPid(Handle)) + '|' + inttostr(HandleToPid(Handle)) + #13#10; end; Result := True; end; function WindowList(Number: string): string; begin WindowListing := ''; EnumWindows(@eWindows,strtoint(number)); Result := WindowListing; end; Grüsse Zodi |
AW: Window listing
Die fragliche/markierte Spalte wird durch die Funktion PidToPath befüllt, richtig? Diese Funktion kann bzw. sollte (oder gar muss) in mehrfacher Hinsicht überarbeitet/verbessert werden: Lokale Variablen immer initialisieren, Arrays sauber nullen (z.B. ZeroMemory oder FillChar). Außerdem sollte man Rückgabewerte von Funktionen auswerten, wo immer möglich und nötig - in diesem Fall fehlt das bei GetModuleFileNameEx und auch OpenProcess. Ich vermute einfach mal, dass das Öffnen des Prozesses fehlschlägt oder der Modulname nicht ermittelt werden kann - aber das bekommst du ja durch saubere Auswertung der Funktionsrückgaben raus ;).
Grüße Dalai |
AW: Window listing
Warum verarbeitest Du den Rückgabewert von
Delphi-Quellcode:
nicht?
GetModuleFileNameEx
Sollte er 0 sein steht im Buffer nichts verwertbares. ![]() Gruß K-H Edith: Da hat der rote Kasten wohl schon Nachtruhe. |
AW: Window listing
Jupp, das Wichtigste wurde hier überall konsequent vergessen.
Die Prüfung der Rückgabewerte sämtlicher WinAPI-Aufrufe. Da fällt dann bestimmt auf, dass hier und da eine API nichts in den Buffer schreibt und somit der Inhalt auf Zufallswerten stehen täte, die schonmal wie chinesisches Kauderwelsch aussehn. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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