AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi von gestarteten Programmen alle Fensterhandles in ini
Thema durchsuchen
Ansicht
Themen-Optionen

von gestarteten Programmen alle Fensterhandles in ini

Ein Thema von bluescreen25 · begonnen am 12. Sep 2007 · letzter Beitrag vom 13. Sep 2007
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 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