Einzelnen Beitrag anzeigen

bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: von gestarteten Programmen alle Fensterhandles in ini

  Alt 12. Sep 2007, 10:46
Zitat von SirThornberry:
ich finde deine Lösung recht unschön. Starte deine Anwendung lieber mit CreateProzess und suche dann alle Fenster dieses Prozesses. Dann kannst du auch auf die Ini verzichten.
Und wenn das nicht geht, übergebe der Anwendung die du startest das Handle deines Programmes. Die Andere Anwendung kann dann nach dem Start eine Message mit ihrem Handle zurück schicken und du sparst dir eine unnötige Dateiarbeit.
Soweit so gut, ich starte schon mit:
Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): Longword;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  StartupInfo.wShowWindow := ShowCmd;
  if not CreateProcess(nil,@Filename[1],nil,nil,False,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then
  Result := WAIT_FAILED
  else
  begin
    if wait = FALSE then
    begin
      if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
      exit;
    end;
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
  end;
  if ProcessInfo.hProcess <> 0 then
    CloseHandle(ProcessInfo.hProcess);
  if ProcessInfo.hThread <> 0 then
    CloseHandle(ProcessInfo.hThread);
end;
und fange die Fenster mit:
Delphi-Quellcode:
repeat
   AppWindow := GetWndHandle(ProcID);
   application.ProcessMessages;
   Application.BringToFront;
   sleep(500);
until (AppWindow <> 0) or stopSearch;//stopSearch durch Timer


if (AppWindow <> 0) then
begin
 //do something
end;
Desweiteren habe ich noch ein Abfangen, falls schon gestartet und bringe mir dann nur das App nach vorne jedoch überlagert meine Form (als kleine Toolleiste) das extApp.

Als Bespiel möchte ich mal ein Navigationsprogramm geben, welches mir bei jedem Start ein Fenster öffnet, welches Warnhinweise gibt, jedoch einmal bestätigt, brauche ich nur noch das 2.te Fenster, damit ich es nach vorne holen kann...in meinem Fall habe ich lediglich das 1.te eingefangen, welches nacher nicht mehr existiert und mir nichts bringt...

Andere Programme verhalten sich noch anders...in meiner App kann der User die externen Programme selber bestimmen, die er starten will, also weiss ich erstmal nichts über die externen Programme....muss die aber händeln...

Vielleicht hast du ein Beispiel parat, um erstmal alle Fenster die auf ein gestartetes Programm aufkommen, aus der ProcID zu ermitteln....

Wie würde man denn trotzdem die aus dem Findwindow in eine Datei speichern können ? Sprich Classname und Fenstertitel ?(Interessehalber)

Gruß, bluescreen25
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat