AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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   
hathor
(Gast)

n/a Beiträge
 
#1

AW: Externes Programm starten

  Alt 5. Jan 2016, 16: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 17:07 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Externes Programm starten

  Alt 5. Jan 2016, 17: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
742 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Externes Programm starten

  Alt 5. Jan 2016, 17: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
Online

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

AW: Externes Programm starten

  Alt 5. Jan 2016, 17: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?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ringli

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

AW: Externes Programm starten

  Alt 5. Jan 2016, 17: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
Online

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

AW: Externes Programm starten

  Alt 5. Jan 2016, 18: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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
742 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Externes Programm starten

  Alt 5. Jan 2016, 18: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
 
#8

AW: Externes Programm starten

  Alt 5. Jan 2016, 18: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
notAssertor
(Gast)

n/a Beiträge
 
#9

AW: Externes Programm starten

  Alt 6. Jan 2016, 00:16
Ich kaufe ein Komma für's Format() in ExecAndWait().
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
742 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

AW: Externes Programm starten

  Alt 7. Jan 2016, 10:36
Hallo Leute,
ich habe es überprüft, es ist richtig.

Programname = "MSPaint.exe" mit Pfad (C:\Windows\System32\mspaint.exe) und Bilddateiname ohne Pfad bilden die Komandozeile und der Pfad der Bilddatei den Parameter. Wie ich schonmal geschrieben habe, läuft es unter Vista prima, also kann es doch nicht am meinen "Programmierkünsten" liegen. MSPaint liegt im Ordner System32, ist also 32-Bit Programm?!.
Hat sich der Aufruf von MSPaint mit Parameter geändert?

Jaenicke und DeddyH, wollt ihr sagen, dass sich hier zwischen Vista und Windows 10 hier etwas geändert hat? Das werde ich mir vornehmen und dann wieder melden.


Ich habe es so geändert:

function TMainForm.ExecAndWait(const CommandLine, Parameter: string) : Boolean;
var
PParameter: PChar;
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
PParameter:=PChar(Parameter);
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,
PParameter,
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}

Es hilft nicht.

Willie.

Geändert von Willie1 ( 7. Jan 2016 um 11:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:24 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