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 2 von 2     12   
notAssertor
(Gast)

n/a Beiträge
 
#11

AW: Externes Programm starten

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

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Externes Programm starten

  Alt 6. Jan 2016, 08:44
Das Problem ist, dass der zweite Parameter an CreateProcess variabel sein muss. Das ist er hier durch den simplen Cast PChar(CommandLine) nicht.

Man muss vorher UniqueString oder eine lokale Variable benutzen oder auch PChar(CommandLine + '') sollte reichen. Das bewirkt, dass ein neuer String erzeugt wird, der auch beschreibbar ist.

Siehe Doku:
https://msdn.microsoft.com/en-us/lib...or=-2147217396
Der Parameter ist als in und out markiert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#13

AW: Externes Programm starten

  Alt 6. Jan 2016, 09:37
Nur mal so: http://www.delphipraxis.net/6296-war...teprocess.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Willie1

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

AW: Externes Programm starten

  Alt 7. Jan 2016, 11: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 12:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#15

AW: Externes Programm starten

  Alt 7. Jan 2016, 11:42
Wenn es richtig ist, klappt ja auch alles. Ach, klappt nicht? Dann kann es auch nicht richtig sein. Setz doch einfach mal ein paar der (guten) Vorschläge in diesem Thread um.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Externes Programm starten

  Alt 7. Jan 2016, 13:57
[B]Jaenicke und DeddyH, wollt ihr sagen, dass sich hier zwischen Vista und Windows 10 hier etwas geändert hat?
Nicht direkt, aber bei 32-Bit kommst du damit durch, dass du einen reinen in Parameter an einen in/out Parameter übergibst, bei einem 64-Bit Programm nicht.
Das Problem gab es auch schon bei Vista mit einem 64-Bit Programm. Und vermutlich auch bei XP, aber das haben nicht so viele als 64-Bit benutzt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Willie1

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

AW: Externes Programm starten

  Alt 7. Jan 2016, 18:11
Hallo DeddyH, hab' ich gemacht. Es funktioniert nicht.
Anbei ExecAndWait, herausextrahiert aus dem Projekt.

Willie.
Angehängte Dateien
Dateityp: zip ExecAndW.zip (4,4 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Externes Programm starten

  Alt 7. Jan 2016, 18:54
Wenn ich PChar(CommandLine + '') benutze, gibt es keinen Fehler mehr. Den hattest du bei dir gar nicht, das ist mir gerade aufgefallen, weil du Delphi 2005 hast. Der tritt nur bei Unicode auf.

Jedenfalls ist das Problem schlicht, dass mspaint gar nicht sichtbar gestartet wird. Deshalb wartet dein Programm nach dem CreateProcess logischerweise unendlich, denn genau das soll der Befehl ja auch machen. Du kannst den neuen Prozess ja auch nicht sehen und beendest ihn daher nicht. Wenn du das gleich am Anfang gesagt hättest, wäre es einfacher gewesen.

Jedenfalls ist die Ursache sehr einfach. Du gibst ja den expliziten Befehl, dass Paint versteckt gestartet werden soll:
Delphi-Quellcode:
  StartupInfo.wShowWindow:=SW_HIDE;
//SW_HIDE, also versteckt starten
Probiere es mal mit SW_SHOWNORMAL.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Willie1

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

AW: Externes Programm starten

  Alt 8. Jan 2016, 19:07
Hallo Jaenicke,
Das ist die Lösung SW_SHOWNORMAL !!! Jetzt öffnet sich MSPaint. Klasse.
Ist klar ExifTools ist ein Konsolenprogramm, deshalb hat es im Hintergrund seine Arbeit getan.

Es bleibt nur die Frage, warum bei Vista immer MSPaint aufging auch mit SW_HIDE?

Schönen Abend und euch Allen Dank für eure Geduld
Willie.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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:13 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