AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Externes Programm starten

Ein Thema von Willie1 · begonnen am 5. Jan 2016 · letzter Beitrag vom 8. Jan 2016
Antwort Antwort
Seite 1 von 2  1 2      
Willie1

Registriert seit: 28. Mai 2008
655 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Externes Programm starten

  Alt 5. Jan 2016, 17:00
Hallo Delphifreunde/nnen,
ich benutze diese Routine, um ein externes Programm zu starten
Delphi-Quellcode:
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
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.
Danke für eure Hilfe
Willie.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Externes Programm starten

  Alt 5. Jan 2016, 17:59
Warum nicht einfach so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0,'Open','msPaint.exe', '','',SW_SHOWNORMAL);
end;
Mehr Infos:
http://delphidabbler.com/tips/134

Geändert von hathor ( 5. Jan 2016 um 18:07 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Externes Programm starten

  Alt 5. Jan 2016, 18:12
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?
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
655 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Externes Programm starten

  Alt 5. Jan 2016, 18:25
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#5

AW: Externes Programm starten

  Alt 5. Jan 2016, 18:43
Ich habe es gerade nochmal ausprobiert, das Programm friert ein Keine Rückmeldung
Und was sagt der Debugger, wo es hängt?

WaitForSingleObject?

Und was passiert, wenn du Paint wieder beendest?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Externes Programm starten

  Alt 5. Jan 2016, 18:47
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: ExecAndWait(Format('"%s"',[ProgName]),Format('"%s"',[Dateina]))
Eventuell könnte aber auch das funktionieren: ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),'')
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Externes Programm starten

  Alt 5. Jan 2016, 18:51
Zitat:
ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),ExtractFilePath(Dateina))
Müsste das nicht eher so aussehen:

ExecAndWait(ProgName,Dateina)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#8

AW: Externes Programm starten

  Alt 5. Jan 2016, 19:01
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.
MSDN-Library durchsuchenCreateProcess
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
655 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: Externes Programm starten

  Alt 5. Jan 2016, 19:15
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: Externes Programm starten

  Alt 5. Jan 2016, 19:34
Zitat:
ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),ExtractFilePath(Dateina))
Müsste das nicht eher so aussehen:

ExecAndWait(ProgName,Dateina)
Sofern Dateina Leerzeichen enthält, könnte Dateina vom aufgerufenen Programm wie mehrere Parameter interpretiert werden.

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:ExecAndWait(Format('"%s" "%s"',[ProgName,Dateina]),'')
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 16:38 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