Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi cmd mit Befehl (https://www.delphipraxis.net/61106-cmd-mit-befehl.html)

fLaSh11 17. Jan 2006 06:29


cmd mit Befehl
 
kann mir jemand kurz helfen? wie kann ich den cmd (normal: ShellExecute) öffnen, das dort schon etwas eingegeben ist und sich dann auch gleich startet?

Matze 17. Jan 2006 06:37

Re: cmd mit Befehl
 
Moin, das geht so:

Delphi-Quellcode:
ShellExecute(0, 'open', 'cmd.exe', PAnsiChar('Hier Dateiname mit dazugehörigen Parametern etc.'), nil, SW_SHOW);
Nachtrag: Herzlich willkommen!

perle 17. Jan 2006 07:06

Re: cmd mit Befehl
 
Zitat:

Zitat von Matze
Moin, das geht so:

Delphi-Quellcode:
ShellExecute(0, 'open', 'cmd.exe', PAnsiChar('Hier Dateiname mit dazugehörigen Parametern etc.'), nil, SW_SHOW);

genau, und wenn du SW_HIDE statt SW_SHOW nimmst, dann siehst du auch nicht das kleine Fenster was kurz aufpoppt.

r2c2 17. Jan 2006 07:14

Re: cmd mit Befehl
 
Zu beachten is noch, dass cmd der Parameter /K bzw. /C übergeben werden muss, damit der Befehl auch ausgeführt wird...

mfg

Christian

fLaSh11 11. Feb 2006 15:05

Re: cmd mit Befehl
 
hmmmm es funktioniert einfach nicht:

Delphi-Quellcode:
var pcname,text:String;

pcname:=Edit1.Text;
text:=RichEdit1.Text;
ShellExecute(0, 'open', 'cmd.exe /C',PChar('net send '+pcname+' '+text), nil, SW_SHOW); //(bzw. SW_HIDE)
mit nil statt 'open' funktionierts auch nicht...

kann mir jemand helfen???

Waldteufel 11. Feb 2006 15:13

Re: cmd mit Befehl
 
Hi.

So gehts:
Delphi-Quellcode:
var
  pcname, text : String;
begin
  pcname := Edit1.Text;
  text := RichEdit1.Text;
  ShellExecute(Application.Handle, 'open', 'cmd.exe', PChar('/C net send ' + pcname + ' ' + text), nil, SW_SHOW);
end;

ManuMF 11. Feb 2006 15:24

Re: cmd mit Befehl
 
Hallo,

wenn du die Ausgabe der CMD noch auswerten willst, könnte dich RunCaptured interessieren.

Gruß,
ManuMF

Rotojoto 13. Feb 2006 18:42

Re: cmd mit Befehl
 
Hi
Ich hab auch mal eine Frage dazu:
Ich finde die Idee mit dem 'Shellexecute' ja gut, aber ich hab das Problem, dass ich bei diesem Code wie er von waldteufel da steht die Fehlermeldung erhalte 'zuviele Parameter'.
Ich weiß einfach nicht, wie man 'Shellexecute' am anfang deklariert. Kann mir da wer helfen?

Garfield 13. Feb 2006 22:11

Re: cmd mit Befehl
 
Zitat:

Zitat von Rotojoto
.. bei diesem Code wie er von waldteufel da steht die Fehlermeldung erhalte 'zuviele Parameter'.

Sechs Parameter sind richtig. http://msdn.microsoft.com/library/de...ellexecute.asp

PS: Schönen Gruß von Aken nach Dessau.

Rotojoto 16. Feb 2006 18:21

Re: cmd mit Befehl
 
Mhh, das war eigentlich gar nicht meine Frage, aber trotzdem Danke.

Mir geht es darum, dass ich das 'ShellExecute' ja bevor ich mit dem eigentlichen Code anfange deklarieren muss.

Delphi-Quellcode:
ShellExecute(Application.Handle, 'open', 'cmd.exe', PChar('mein Code'), nil, SW_SHOW);
So heißt ja die Zeile im Code. Wenn ich 'ShellExecute' nicht als Funktion deklariere, ist die Fehlermeldung
unbekannte Funktion. D.h. ich muss es am Anfang als Funktion deklarieren. Mein Code ist:
Delphi-Quellcode:
function Shellexecute(const Handle:HWND; item:string; system:PansiChar; windows:string; SW_SHOW:string):string;
Bitte nicht lachen, der ist einfach nur falsch. Aber ich weiß weder, was 'open' bzw. 'cmd.exe' noch 'nil', oder SW_SHOW vom Typ her sind. Ich würde also, falls das irgendwer weiß, gerne wissen, was für Typen (string, und so weiter) das sind.
Wenn ich als Funktion nur 'ShellExecute' schreibe, kommt die Fehlermeldung 'zuviele Parameter'.

Schönen Gruß von Dessau nach Aken zurück

r2c2 16. Feb 2006 20:46

Re: cmd mit Befehl
 
Zitat:

Mir geht es darum, dass ich das 'ShellExecute' ja bevor ich mit dem eigentlichen Code anfange deklarieren muss.
Seit wann das?

Zitat:

Wenn ich 'ShellExecute' nicht als Funktion deklariere, ist die Fehlermeldung
unbekannte Funktion. D.h. ich muss es am Anfang als Funktion deklarieren.
Wenn du das so machst, deklarierst du eine neue Funktion, die, wenn du das nicht selbst so programmierst, gar nix macht, und schon gar nix auszuführt...

Schon mal das probiert:
Delphi-Quellcode:
uses
  ShellAPI;
Könnte helfen.

Trotzdem nochmal ne Antwort auf deine Frage:
Welchen Typ welcher Parameter hat, kannst du im PSDK nachgucken. Das wären in dem Fall:
'open' = PChar
nil = Pointer(0) = PChar('')
SW_SHOW Integer(oder cardinal? :gruebel:; müsst ich jetzt auch nachgucken)

PChar ist n Pointer auf n Null-Terminierten string im Speicher, deshalb gilt: nil = Pointer(0) = PChar(''). Warum muss man nun PChar nehmen und kann keine strings verwenden? C++ kennt keine strings(jedenfalls nicht so, wie wir die kennen). D.h. man muss sich n string selbst "nachbauen", als n Pointer, der auf ne Stelle im Arbeitsspeicher zeitgt. Findet man irgendwo dann n #0(ASCII-Zeichen), gilt der string da als "terminated" --> Stringende...
Da ShellExecute ne WinAPI-Funktion ist und die WinAPI in C/C++ geschrieben ist, muss man eben konvertieren...

mfg

Christian

Garfield 16. Feb 2006 21:39

Re: cmd mit Befehl
 
Zitat:

Zitat von r2c2
SW_SHOW Integer(oder cardinal? :gruebel:; müsst ich jetzt auch nachgucken)

Schauen wir mal kurz auf die von mir verlinkte Seite.
Zitat:

ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
Ein Handle, vier nullterminierte Strings - PChar und ein Integer. Für den Integerwert kann man auch Konstanten einsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.

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