Einzelnen Beitrag anzeigen

64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#12

Re: Programmfokus setzen per Process-ID

  Alt 25. Jan 2009, 11:29
Nicht ganz 8)
Ich habe mir einen Browser gemacht, der ein externe Downloadtool nutzt und dieses bedienen soll.
Das problem ist halt dass er mehrmals gestartet werden kann, das kriege ich unterbunden.

Nur wenn ich einen Knopf in meinem Browser drücke, da kann ich nie im Leben schnell genug reagieren und ins Download-Programm wechseln um meine automatisierten Vorgänge dort ablaufen zu lassen...
Also "muss" es mein Programm selbst machen.

Ich habe jetzt folgendes gefunden:

Delphi-Quellcode:
type
  PEnumInfo = ^TEnumInfo;
  TEnumInfo = record ProcessID: DWORD; HWND: THandle; end;
Delphi-Quellcode:
function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;
    var
      PID: DWORD;
    begin
      GetWindowThreadProcessID(Wnd, @PID);
      Result := (PID <> EI.ProcessID) or (not IsWindowVisible(WND)) or (not IsWindowEnabled(WND));
      if not Result then EI.HWND := WND;
    end;

function FindMainWindow(PID: DWORD): DWORD;
    var
      EI: TEnumInfo;
    begin
      EI.ProcessID := PID;
      EI.HWND := 0;
      EnumWindows(@EnumWindowsProc, Integer(@EI));
      Result := EI.HWND;
    end;
Nun möchte ich per

SetForegroundWindow(FindMainWindow(DWORD(ProcID))); das Programm in den Vordergrund holen, die ProcID vom Typ PCardinal habe
ich vorher der oben verklinkten Funktion von Luckie übergeben, aber es passiert nichts...
Könnte das an meinem 64-BIT OS liegen O.o
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat