Autor Téma: Příkazový řádek CMD  (Přečteno 934 krát)

Offline karkojk

  • Mladík
  • **
  • Příspěvků: 55
  • Karma: 0
    • Verze Delphi: RAD Studio X5
Re:Příkazový řádek CMD
« Odpověď #15 kdy: 20-01-2023, 09:36:45 »
Rádo se stalo. A vážně Ti to funguje bez těch uvozovek? Čekal bych, že bez nich to ztroskotá na mezerách v "Program Files (x86)".
Okopírované z kódu jak mně to chodí, už jsem tomu nevěřil ;). Tady uvozovky v "Program Files (x86)", jak je vidět tady nejsou třeba.
Ještě jednou díky.
Programování pro radost, prý to bystří mysl ;-)

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 438
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Příkazový řádek CMD
« Odpověď #16 kdy: 20-01-2023, 09:49:08 »
Rádo se stalo. A vážně Ti to funguje bez těch uvozovek? Čekal bych, že bez nich to ztroskotá na mezerách v "Program Files (x86)".

Jako parametry v ShellExecute to musi byt bez uvozovek. Uvozovky pises primo v prikazovem radku, abys oddelil jednotlive parametry, ktere obsahuje v sobe mezeru.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:Příkazový řádek CMD
« Odpověď #17 kdy: 28-01-2023, 19:43:59 »
Doplním Jana Fialu, že uvozovky lze používat (a dokonce mohou být potřeba) i v ShellExecute, ale pouze v části pro parametry (4. argument), aby se v nich vyřešily případné mezery. Tedy rozdíl mezi 'C:\maluje.mp4 --start-time 170' a hypotetickým '"C:\ma luje.mp4" --start-time "170 seconds"'. V části pro jméno spouštěného programu nebo dokumentu (3. argument) se uvozovky nepoužívají právě proto, že tam je očekávané jméno souboru a ve jménu souboru jsou ve všech Windowsy podporovaných souborových systémech uvozovky zakázané.

Offline karkojk

  • Mladík
  • **
  • Příspěvků: 55
  • Karma: 0
    • Verze Delphi: RAD Studio X5
Re:Příkazový řádek CMD
« Odpověď #18 kdy: 13-02-2023, 23:31:56 »
Při brouzdání webem jsem narazil na další řešení. Dávám sem odkaz, může se to hodit. https://stackoverflow.com/questions/28580552/executing-ffmpeg-exe-from-delphi-with-shellexecute
S předchozím zadání jsem zase „laboroval" s FFmpeg, s tímto běželo všechno.

Kód: Delphi [Vybrat]
  1. function ExecuteAndWait(AFilename : String; AParameter : string;
  2.                         ACmdShow : Integer; var AErrorOrExitCode : Cardinal): Boolean;
  3. var
  4.   StartupInfo: TStartupInfo;
  5.   ProcessInfo: TProcessInformation;
  6.   S : String;
  7. begin
  8.   FillChar(StartupInfo,Sizeof(StartupInfo),0);
  9.   StartupInfo.cb := Sizeof(StartupInfo);
  10.   StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  11.   StartupInfo.wShowWindow := ACmdShow;
  12.   S := AParameter;
  13.   UniqueString(S);
  14.   if not CreateProcess(PChar(AFilename),PChar(S),nil,nil,False,
  15.                        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,
  16.                        StartupInfo,ProcessInfo) then
  17.     begin
  18.       Result := False;
  19.       AErrorOrExitCode := GetLastError;
  20.     end
  21.   else
  22.     begin
  23.       Result := True;
  24.       WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
  25.       GetExitCodeProcess(ProcessInfo.hProcess,AErrorOrExitCode);
  26.       CloseHandle(ProcessInfo.hProcess);
  27.       CloseHandle(ProcessInfo.hThread);
  28.     end;
  29. end;
  30.  
   

a spouští se
Kód: Delphi [Vybrat]
  1. var
  2.   ErrorOrExitCode : Cardinal;
  3. begin
  4.   If not ExecuteAndWait('c:\windows\regedit.exe','"c:\windows\regedit.exe" "c:\test.reg"',SW_SHOWDEFAULT,ErrorOrExitCode) then
  5.     Showmessage(Inttostr(ErrorOrExitCode));
  6.  
Programování pro radost, prý to bystří mysl ;-)