Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CMD.exe ver>123.txt (https://www.delphipraxis.net/180593-cmd-exe-ver-123-txt.html)

Willie1 1. Jun 2014 15:58

CMD.exe ver>123.txt
 
Hallo Delphifreunde/innen,
nachdem Windows 8.1 mit GetWindowsVersion() nicht mehr erkannt wird, hatte ich mir folgende Lösung ausgedacht:
Mit ShellExecute CMD.exe ver>123.txt
Das funktioniert in der Eingabeaufforderung aber bei ShellExecute wird die Umleitungsdatei nicht angelegt, obwohl es hier anders zu lesen ist:
http://www.microsoft.com/resources/d....mspx?mfr=true

Ich will es eigentlicht nicht erwähnen, aber durch meine Augenerkrankung bin ich schlecht in Rechersche, über Hilfe freue ich mich.

MfG
Willie

Dalai 1. Jun 2014 16:02

AW: CMD.exe ver>123.txt
 
Wie sieht dein Aufruf von ShellExecute aus? Benutzt du
Code:
cmd /c
vor dem Befehl? Umleitungen werden ausschließlich von der ausführenden Shell interpretiert - und die Shell explorer.exe (die den ganzen GUI-Krempel macht) hat damit nichts am Hut.

MfG Dalai

Willie1 1. Jun 2014 16:08

AW: CMD.exe ver>123.txt
 
Ok, ich werde es so machen und dann nochmal melden!
Willie

Willie1 1. Jun 2014 16:31

AW: CMD.exe ver>123.txt
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  s,st: string;
  TF: TextFile;
begin
  s:=CreateTempFile(TmpPath,'~',false);
  ShellExecute(Application.Handle,PChar('cmd.exe/c',PChar('ver>'+s),nil,nil,SW_SHOW);
  AssignFile(TF,s);
  Reset(TF);
  ReadLn(TF,st);
  CloseFile(TF);
  Edit1.Text:=st;
end;
Die Datei wird nicht angelegt.
CreateTempFile(TmpPath,'~',false) habe ich selbst gebaut und findet einen zufälligen Dateinamen im Tremp-Ordner. Angelgt soll die Datei erst bei ShellExecute().
Der Rückgabewert von ShellExecute ist 2.

Willie.

Dalai 1. Jun 2014 16:45

AW: CMD.exe ver>123.txt
 
Bitte Leerzeichen beachten!
Code:
cmd.exe /c
/c ist ein Parameter für cmd.exe. Es kann also sein, dass das /c mit in den Parameter-Parameter muss (was ein doofes Wort ;)). Also so:
Delphi-Quellcode:
ShellExecute(Application.Handle, PChar('cmd.exe'), PChar('/c ver>'+s), nil,nil, SW_SHOW);

Abgesehen davon solltest du auf das Ende des Befehls warten und dann erst weitermachen in deinem Delphi-Code; es gibt dafür eine Reihe von Funktionen im Netz (z.B. ShellExecuteAndWait/ShellExecAndWait).

MfG Dalai

Willie1 1. Jun 2014 17:17

AW: CMD.exe ver>123.txt
 
Hallo Dalai,
ich habe es mit allen möglichen Kombinationen versucht, es klappt nicht. Verstehe ich dich richtig, dass es mit ShellExecute eher nicht geht? (Ich weiß von früheren Versuchen, dass ShellExecute ein elender Befehl ohne sinnvolle Rückmeldung ist)
Dann gehe ich vielleicht besser über die Registry?

Willie.

Dalai 1. Jun 2014 17:27

AW: CMD.exe ver>123.txt
 
Zitat:

Zitat von Willie1 (Beitrag 1260955)
ich habe es mit allen möglichen Kombinationen versucht, es klappt nicht.

Sagte dir das dein Debugger?

Zitat:

Verstehe ich dich richtig, dass es mit ShellExecute eher nicht geht?
Nö, da hast du mich falsch verstanden. Es ging nur darum, dass du auf das Ende der Ausführung von ShellExecute wartest, bevor du dich an die Auswertung der damit erzeugten Datei machst. Wobei man das ja eigentlich anders machen könnte und direkt die Ausgabe von "cmd.exe /c ver" mit Delphi abgreifen könnte, statt die Ausgabe in eine Datei umzuleiten, die man nachfolgend mit viel Brimborium mit Delphi einliest. Aber das kann man später ja noch ändern.

Zitat:

(Ich weiß von früheren Versuchen, dass ShellExecute ein elender Befehl ohne sinnvolle Rückmeldung ist)
Das ist ja nun Unsinn, schau dir mal die Rückgabewerte bei im MSDN an: MSDN-Library durchsuchenShellExecute.

MfG Dalai

Willie1 1. Jun 2014 18:04

AW: CMD.exe ver>123.txt
 
Hallo Dalai,
ich habe hier im Forum ShellExecute_AndWait(<Programm>,>Parameter>) gefunden und ungeprüft benutzt, es funktioniert.
Zitat:

Das ist ja nun Unsinn, schau dir mal die Rückgabewerte bei im MSDN an:
ERROR_FILE_NOT_FOUND hat mir nicht wirklich geholfen.
Aber jetzt komme ich klar, ich danke dir!

Gruß Willie.

Dalai 1. Jun 2014 18:43

AW: CMD.exe ver>123.txt
 
Zitat:

Zitat von Willie1 (Beitrag 1260958)
ERROR_FILE_NOT_FOUND hat mir nicht wirklich geholfen.

Wieso nicht? Es gibt nunmal keine Datei namens "cmd.exe/c" (auf keinem Windows-System), also bekommt man doch eine wahre und sinnvolle Aussage.

MfG Dalai

Union 1. Jun 2014 19:16

AW: CMD.exe ver>123.txt
 
Warum updatest Du nicht Dein Manifest wie hier beschrieben oder verwendest WMI?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr.
Seite 1 von 2  1 2      

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