Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Externes Programm ausführen (https://www.delphipraxis.net/194595-externes-programm-ausfuehren.html)

Benmik 19. Dez 2017 12:42

AW: Externes Programm ausführen
 
Zitat:

Zitat von Willie1 (Beitrag 1389254)
Hallo -charset IPTC=UTF8 in den Parameter aufnehmen, hilft bei mir nicht!!!

Naja, wenn es bei mir funktioniert, dann muss es bei dir wohl auch funktionieren. Aber du hast ja eine Lösung gefunden, die dich zufriedenstellt.
Würde mich freuen, wenn du uns weiter auf dem Laufenden hältst.

Willie1 19. Dez 2017 17:09

AW: Externes Programm ausführen
 
Ok Delphi.Narium, da magst du recht haben. Auf jeden Fall klappt die Übersetzung.
Benmik, ich hab's mit Copy and Paste übertragen, es geht nicht. Ich weiß Programme mit Parameter zu bedienen ist mühsam!

Benmik 19. Dez 2017 19:07

AW: Externes Programm ausführen
 
Delphi-Quellcode:
  procedure FühreTestCodeAus;
  var ETool,ETCmd1,ETCmd2,ETCmd3,Datname:string; AusgabeListe,FehlerListe:TStringList;
  begin
    AusgabeListe := TStringList.Create;
    FehlerListe := TStringList.Create;
    ETool  := 'C:\Program Files (x86)\EXIFTool\exiftool.exe ';
    ETCmd1  := ' -charset IPTC=UTF8 -city=Köln -lang de ';
    ETCmd2  := ' -k -a -u -g1 -lang de -charset IPTC=UTF8 ';
    ETCmd3  := ' -w! .txt ';
    Datname := '"C:\Temp\K-Dom.jpg"';
    Try
      ExecuteET(ETool + ETCmd1 + Datname,'',AusgabeListe,FehlerListe);
      ExecuteET(ETool + ETCmd2 + Datname,'',AusgabeListe,FehlerListe);
      ExecuteET(ETool + ETCmd3 + Datname,'',AusgabeListe,FehlerListe);
    Finally
      AusgabeListe.Free;
      FehlerListe.Free;
    End;
  end;

Willie1 20. Dez 2017 16:39

AW: Externes Programm ausführen
 
Hallo,
ich habe es getestet.
cmd1 ist nicht notwendig. Wenn die deutschen Sonderzeichen korrekt angezeigt werden, dann auch Köln.
cmd 2 läuft, aber die deutschen Sonderzeichen werden nicht umgesetzt. Ich habe sie mit Memo1.Lines.Assign(ETout) übernommen.
cmd3 funktioniert nur dann, wenn ich als Zielordner den Ordner auswähle, in dem sich die Bilddatei befindet.
Ein Unterordner wird angelegt. Aber z.B. %dc:\data\%f.txt führt zu einer Fehlermeldung 1 files could not be read 0 output files created, der Temp-Ordner des BS ebenso.
Die deutschen Sonderzeichen werden richtig angezeigt!

Die Windows Version spielt wohl eine Rolle. Ich habe Windows 10 1709 Built 16299.125.

Benmik 20. Dez 2017 17:18

AW: Externes Programm ausführen
 
Willie, ich bin mir mittlerweile nicht mehr sicher, ob wir uns richtig verstehen.

ETCmd1 schreibt überhaupt erstmal "Köln" in das Tag "City". Wenn du das für "nicht notwendig" hältst, dann hast du was übersehen.
ETCmd2 liest die Tags aus der Datei in Delphi aus; da passiert äußerlich natürlich erstmal nichts, aber du hast die Möglichkeit, die Tags in
Delphi-Quellcode:
AusgabeListe
auszulesen.
ETCmd3 ist durch ETCmd2 gar nicht mehr nötig und dient nur dazu zu zeigen, dass die Umlaute auch in einer Textdatei in Notepad richtig angezeigt werden.

Willie1 20. Dez 2017 17:51

AW: Externes Programm ausführen
 
Hallo Benmik, wenn man sich nur schriftlich austauscht, kommt es zu Missverständnissen.

Cmd1 schreibt Köln, habe ich schon verstanden. Meine Digi-Kam schreibt Locations automatisch z.B. Deutschland, Nordrhein-Westfalen, Köln, Am Kölner Dom
- deshalb brauche ich nichts zu schreiben. Trotzdem danke für den Tipp..
Cmd 2 ist genial, ich muss nur die deutschen Sonderzeichen mit UTF8ToAnsi umsetzen.
Cmd3 hat sich durch Cmd2 erledigt. Ist mir klar. Ich dachte nur, dass dich die Probleme mit der Schreiboption seit dem letzten Windows-Update interessieren. Du bist doch Exiftool-Experte.

Ich werde jetzt die neue Exiftool-Unit in mein Programm einbauen. Ich will die Orientation Tags neu setzen und weitere Felder, z.B. Descrption, Artist schreiben können. Wenn das klappt, melde ich mich hier im Forum.

Gruß Willie.

Benmik 20. Dez 2017 18:09

AW: Externes Programm ausführen
 
OK, ich verstehe.
Ich brauche UTF8ToAnsi nicht, arbeite allerdings mit Windows 7.
Kann das innerhalb von Delphi eine Änderung verursachen?

Willie1 13. Jan 2018 09:37

AW: Externes Programm ausführen
 
Hallo Freunde (ich glaube, Freundinnen sind keine dabei),

ich habe mein Problem mit Exiftool gelöst. Dank an alle und besonders an Bennik. Es ist so, dass Windows nach dem letzten Update das Schreiben von Daten aus einem anderem Programm heraus nicht mehr zulässt. Exiftoll -w und -w! funktionieren nicht mehr.

Dann noch ein Hinweis zu Windows: ich habe hier ja schon mal gepostet, dass ich schlecht sehe und die perfekte Windows Luppe eine große Hilfe ist. Seid dem letzten Update 1703.16299.125 kann man sich mit Edge eine Internetseite und auch ein PDF perfekt vorlesen lassen. So neu, dass es mit Googlen nicht zu finden ist. Für euch nicht so wichtig aber ich finde, Microsoft ist bei Hilfe für Sehbehinderte Spitze.
Gruß Willie.

Fukiszo 15. Jan 2018 12:19

AW: Externes Programm ausführen
 
Hallo, vielleicht hilft dir dieser code hier weiter um eine consolen anwendung auszuführen die keinerlei input bedarf.
Du erhälst den Output erst nachdem die Consolen andwendung fertig ist (terminiert)
Den pChar output kannst du dann nach belieben auswerten oder per Edit/Memo anzeigen lassen.

viel spass damit.

ps: der schalter ShowConsole ist mehr oder weniger ein fake,
es wird zwar die console geöffnet aber der komplette inhalt landet nach wie vor im "Output:pChar"
Ist sowas wie 'ne kontrolle, wenn console geschlossen = anwendung fertig


Delphi-Quellcode:
// this function will execute a console application
// give all console output back to "Output:PChar" parameter
// give back as Result the ExitCode of "Executable"
// ShowConsole should only be activated if you want to see a blank Console Window aslong Process is running
// WARNING: DO NOT EXECUTE CONSOLE APPLICATIONS THAT NEED KEYBOARD/MOUSE INPUT!!!
// if result is 4294967295/$FFFFFFFF than its a general error
Function ExecuteConsole(const Executable: String; Commands: String; const ShowConsole: Boolean; var Output: PChar): Cardinal;
const
 ReadBuffer = 4000;
var
  Security           : TSecurityAttributes;
  ReadPipe,WritePipe : THandle;
  StartupInfo        : TStartUpInfo;
  ProcessInfo        : TProcessInformation;
  Buffer             : Pchar;
  BytesRead          : DWord;
  AppRunning         : DWord;
begin
 Result := Cardinal($FFFFFFFF);
 if ((Length(Commands) > 1)and(Commands[1]<>' ')) then Commands := ' ' + Commands;
 with Security do begin
  nLength             := SizeOf(TSecurityAttributes);
  lpSecurityDescriptor := nil;
  bInheritHandle      := True;
 end;
 if CreatePipe (ReadPipe, WritePipe, @Security, 0) then
 begin
  Buffer := AllocMem(ReadBuffer + 1);
  FillChar(StartupInfo,SizeOf(StartupInfo), #0);
  StartupInfo.cb         := SizeOf(StartupInfo);
  StartupInfo.hStdOutput := WritePipe;
  StartupInfo.hStdInput  := ReadPipe;
  StartupInfo.dwFlags    := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  if ShowConsole then StartupInfo.wShowWindow := SW_SHOWNORMAL else StartupInfo.wShowWindow := SW_HIDE;
  if CreateProcess(PChar(Executable), PChar(Commands), @Security, @Security, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(Executable)), StartupInfo, ProcessInfo) then
  begin
   repeat
    ProcessMessages;
    Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
   until (Apprunning <> WAIT_TIMEOUT);
//    if DoWait then while WaitForSingleObject(ProcessInfo.hProcess, 500) <> WAIT_OBJECT_0 do ProcessMessages;
   repeat
    BytesRead := 0;
    ReadFile(ReadPipe,Buffer[0], ReadBuffer, BytesRead,nil);
    Buffer[BytesRead]:= #0;
   OemToChar(Buffer, Output);
   until (BytesRead < ReadBuffer);
   end;
  FreeMem(Buffer);
  if not GetExitCodeProcess(ProcessInfo.hProcess, Result) then Result := Cardinal($FFFFFFFF);
//  GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
  CloseHandle(ReadPipe);
  CloseHandle(WritePipe);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(ProcessInfo.hProcess);
 end;
end;

Willie1 17. Jan 2018 17:28

AW: Externes Programm ausführen
 
Ich werde es aus probieren. Gruß Willie.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.
Seite 5 von 5   « Erste     345   

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