Einzelnen Beitrag anzeigen

Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#1

GetWindowHandleByExeName funktioniert erst beim 2. / 3. mal

  Alt 8. Jan 2008, 14:47
Hallo!

Ich versuche eine fremde Anwendung sauber zu beenden.
Sagen wir einfach "notepad.exe".
Ich nutze GetWindowHandleByExeName um an das Handle zu kommen und sende dann ein WM_CLOSE an das Fenster
PostMessage(GetWindowHandleByExeName('notepad.exe'), WM_CLOSE, 0, 0); Das jedoch funktioniert erst beim zweiten oder dritten mal.
Die ersten male kommt ein anderes Handle raus.
Wie kann das sein?

Hier der Code zu "GetWindowHandleByExeName":
Delphi-Quellcode:
var
  WindowHandle: THandle;
  h: HWND;

[...]

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;
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat