Externes Programm starten
Hallo Delphifreunde/nnen,
ich benutze diese Routine, um ein externes Programm zu starten
Delphi-Quellcode:
Unter Vista 32-Bit klappt das Starten von Windows-Paint prima unter Windows 10-64-Bit stürzt das gesammte Programm total ab. Als Hobby-Programmierer fehlen mir Grundlagen. Kann ein 64-Bit Programm (Windows-Paint ist doch 64-Bit?) aus einem 32-Bit Programm überhaupt starten? Wenn ja, wie? Durch meine Augenerkrankung ist die Suche im Web für mich sehr schwierig, deshalb wende ich mich direkt an euch.
function TMainForm.ExecAndWait(const CommandLine, Parameter: string) : Boolean;
var StartupInfo: Windows.TStartupInfo; // start-up info passed to process ProcessInfo: Windows.TProcessInformation; // info about the process ProcessExitCode: Windows.DWord; // process's exit code begin // Set default error result Result := False; // Initialise startup info structure to 0, and record length FillChar(StartupInfo, SizeOf(StartupInfo), 0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=SW_HIDE; // Execute application commandline if Windows.CreateProcess(nil, PChar(CommandLine), nil, nil, False, 0, nil, PChar(Parameter), StartupInfo, ProcessInfo) then begin try // Now wait for application to complete if Windows.WaitForSingleObject(ProcessInfo.hProcess, INFINITE) = WAIT_OBJECT_0 then // It's completed - get its exit code if Windows.GetExitCodeProcess(ProcessInfo.hProcess, ProcessExitCode) then // Check exit code is zero => successful completion if ProcessExitCode = 0 then Result := True finally // Tidy up Windows.CloseHandle(ProcessInfo.hProcess); Windows.CloseHandle(ProcessInfo.hThread); end end else Showmessage(Format('Fehler:%d - %s!',[GetLastError,SysErrorMessage(GetLastError)])) end; {TMainForm.ExecAndWait} //stammt aus Delphipraxis Danke für eure Hilfe Willie. |
AW: Externes Programm starten
Warum nicht einfach so:
Delphi-Quellcode:
Mehr Infos:
procedure TForm1.Button1Click(Sender: TObject);
begin ShellExecute(0,'Open','msPaint.exe', '','',SW_SHOWNORMAL); end; http://delphidabbler.com/tips/134 |
AW: Externes Programm starten
Hallo- Wie äußert sich denn genau das "stürzt total ab"? Entweder stehe ich auf dem Schlauch, oder das sieht eigentlich richtig aus.
Kannst du mal typischer Werte für deine Parameter "CommandLine" und "Parameter" liefern? |
AW: Externes Programm starten
Hallo
ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),ExtractFilePath(Dateina)) ProgName ist Paint.exe Dateina ist der Name der Bilddatei Pfad wo sich das Bild befindet. Ich habe es gerade nochmal ausprobiert, das Programm friert ein Keine Rückmeldung Mit dem Programm ExifTools.exe, das ich ebenfalls mit ExecAndWait aufrufe klappt es. Willie |
AW: Externes Programm starten
Zitat:
WaitForSingleObject? :roll: Und was passiert, wenn du Paint wieder beendest? |
AW: Externes Programm starten
Hallo,
mal meine unkoordinierten Spekulationen: Heißt das Programm Paint.exe oder MSPaint.exe? Unter Windows XP heißt es MSPaint.exe. Wurde es zwischenzeitlich umbenannt? Wenn nein, dann bitte den Namen mal im Aufruf ändern. Wenn man MSPaint.exe mit Parameter startet, so muss der Parameter den Namen der Bilddatei mit Pfad enthalten, also ein Parameter, der "beides" enthält. Du übergibst aber zwei Werte. MSPaint gibt, wenn es die angegebene Datei nicht findet, eine Meldung aus (Messagebox) und beendet sich nach dem Wegklicken dieser Messagebox. Möchte jetzt mal nicht ausschließen, dass das noch "innerhalb" des Createprocesses passiert, Du also quasi eine nicht sichtbare Messagebox wegklicken müsstest. Ändere doch den Aufruf mal in diese Form:
Delphi-Quellcode:
ExecAndWait(Format('"%s"',[ProgName]),Format('"%s"',[Dateina]))
Eventuell könnte aber auch das funktionieren:
Delphi-Quellcode:
ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),'')
|
AW: Externes Programm starten
Zitat:
Delphi-Quellcode:
ExecAndWait(ProgName,Dateina)
|
AW: Externes Programm starten
Zu den letzten beiden Postern: Stimmt, hier ist so Einiges falsch.
Der Parameter Parameter ist in Wirklichkeit das Verzeichnis, aber das kann man ja selber nachlesen, also vorallem die ersten beiden Parameter und lpCurrentDirectory. CreateProcess |
AW: Externes Programm starten
Hallo Leute,
ihr habt recht, ich muss da noch einiges überprüfen! Das Prpgramm heißtMSPaint.exe, habe mich verschrieben. Ich darf nur darauf hinweisen, das Programm läuft unter Vista. Mit den Parametern stimmt was nicht, ich melde mich wieder! Willie. |
AW: Externes Programm starten
Zitat:
Wenn man MSPaint.exe aufruft, wird dies (vermutlich) über den Pfad (oder sonstwie) gefunden. Ruft man aber ein Programm über vollständigen Pfad und Dateinamen auf und die enthalten Leerzeichen, könnte das auch zu Fehlern führen. Hab' nochmal in die Windows.pas geschaut, danach würd' ich mich für diese Variante entscheiden:
Delphi-Quellcode:
ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),'')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz