Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Ich liebe ShellExecute (https://www.delphipraxis.net/210614-ich-liebe-shellexecute.html)

dataspider 18. Mai 2022 10:07

AW: Ich liebe ShellExecute
 
Ich habe es mal bei mir getestet.
Bei mir wird entpackt, alle fein.

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
Var
  ReturnCode: Integer;
  WorkFile: string;
  Params: string;
  Error: Integer;
  s: string;
begin
  WorkFile := '"c:\Program Files\7-Zip\7z.exe"';
  Params := 'x "d:\Buffer\Test 7z\Test.7z"';
  s := WorkFile + ' ' + Params;
  // s = "c:\Program Files\7-Zip\7z.exe" x "d:\Buffer\Test 7z\Test.7z"
  ReturnCode := ShellExecute(0, 'open', PChar(Workfile),Pchar(Params), nil, SW_shownormal);
  Error := GetLastError;
end;
Frank

just beginner 18. Mai 2022 10:09

AW: Ich liebe ShellExecute
 
Schon einmal

Delphi-Quellcode:
Workdir := ExtractFilepath(Workfile);
ShellExecute(0, 'open', PChar(Workfile),Pchar(Params), PChar(Workdir), SW_shownormal);
probiert?

sakura 18. Mai 2022 10:15

AW: Ich liebe ShellExecute
 
Du musst ShellExecute das Arbeitsverzeichnis mitteilen ;-)

...:cat:...

DeddyH 18. Mai 2022 10:16

AW: Ich liebe ShellExecute
 
Siehe den Post über Deinem ;-)

creehawk 18. Mai 2022 10:19

AW: Ich liebe ShellExecute
 
@Uwe Raabe
Zitat : 'Bei ShellExecute ist das aktuelle Verzeichnis aber vermutlich ein anderes........' Also:

Das funktioniert:
Delphi-Quellcode:
  ChDir('C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST');
  WorkFile := '"C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST\7z.exe"';
  Params := 'x "C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST\Villa.zip"';
  ReturnCode := ShellExecute(Application.Handle,'open', PChar(Workfile),Pchar(Params),Nil, SW_shownormal);
Das funktioniert:
Delphi-Quellcode:
  ChDir('C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST');
  WorkFile := '"7z.exe"';
  Params := 'x "Villa.zip"';
  ReturnCode := ShellExecute(Application.Handle,'open', PChar(Workfile),Pchar(Params),Nil, SW_shownormal);
Das funktioniert NICHT.
Delphi-Quellcode:
  WorkFile := '"C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST\7z.exe"';
  Params := 'x "C:\Users\citybuilders\Eigene Projekte\Eigene Projekte Scanner\TEST\Villa.zip"';
  ReturnCode := ShellExecute(Application.Handle,'open', PChar(Workfile),Pchar(Params),Nil, SW_shownormal);
Das Verzeichnis mit chDir zu verlegen ist offensichtlich notwendig. Aber warum? Habe ich bisher im Zusammenhang mit ShellExceute nicht gebraucht. Fordert das die 7z.exe an?

Jedenfalls danke ich allen für die Antworten und die Hilfe.:)

creehawk

Und da fällt mir noch was auf: das x für extract steht ausserhalb der Quotes der zip Datei. Das muss ventiliert werden.

DeddyH 18. Mai 2022 10:24

AW: Ich liebe ShellExecute
 
Schau Dir den vorletzten Parameter von ShellExecute noch einmal an.

dataspider 18. Mai 2022 10:28

AW: Ich liebe ShellExecute
 
Meine Version noch mal mit Output Directory:

Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
Var
  ReturnCode: Integer;
  WorkFile: string;
  Params: string;
  Error: Integer;
  s: string;
begin
  WorkFile := '"c:\Program Files\7-Zip\7z.exe"';
  Params := 'x -o"d:\Buffer\Test 7z" "d:\Buffer\Test 7z\Test.7z"';
  s := WorkFile + ' ' + Params;
  // s = "c:\Program Files\7-Zip\7z.exe" x -o"d:\Buffer\Test 7z" "d:\Buffer\Test 7z\Test.7z"
  ReturnCode := ShellExecute(0, 'open', PChar(Workfile),Pchar(Params), nil, SW_shownormal);
  Error := GetLastError;
end;
Wenn es das Problem ist. Das Workdirectory muss man IMO nicht ändern, kann man aber (siehe DaddyH und Andere).

Frank

himitsu 18. Mai 2022 11:08

AW: Ich liebe ShellExecute
 
Zitat:

Zitat von sakura (Beitrag 1505988)
Du musst ShellExecute das Arbeitsverzeichnis mitteilen ;-)

Jupp, oder 7-Zip das Ausgabeverzeichnis mitgeben (
Delphi-Quellcode:
-o"C:\irgendwo\"
),
aber zusätzlich das Arbeitsverzeichnis kann eh nie verkehrt sein, denn 7-Zip erstellt gern mal im Arbeitsverzeichnis Temp-Dateien.
Delphi-Quellcode:
WorkDir := 'd:\Buffer\Test 7z';
..., PChar(Params), PChar(WorkDir), SW_ShowNormal);

Und in WorkFile gehören eigentlich keine Anführungszeichen, wenn mit dem zweiten Params-Parameter gearbeitet wird.
Delphi-Quellcode:
{Operation,} CommandLine, nil {, WorkDir}
oder
Delphi-Quellcode:
{Operation,} ProgramPath, Parameters {, WorkDir}
.

dataspider 18. Mai 2022 11:19

AW: Ich liebe ShellExecute
 
himitsu

Denk dran, der Pfad hat ein Leerzeichen...
OK, habs gerade bei dir gelesen. Das in WorkDir keine Anführungszeichen benötigt werden, wusste ich nicht...

himitsu 18. Mai 2022 13:06

AW: Ich liebe ShellExecute
 
Der Pfad "enthält" aber keine Anführungszeichen.

CommandLine <> Path

CommandLine ist so, wie man es in der Console, bzw. Batch angiebt, inkl. der Parameter. Hier sind Leerzeichen = Trennzeichen.
Und als Pfad ist es so, wie bei jeder anderen Win32-API auch. Und du gibst doch bei einem CreateFile oder MoveFile auch keine " mit an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Seite 2 von 2     12   

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