Autor Beitrag
Trialtom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 23.12.02 01:43 
wenn ich die eingabeaufforderung starte, z.b.:
ausblenden Quelltext
1:
ShellExecute(handle, nil, 'C:\WINDOWS\system32\cmd.exe',nil,nil, SW_SHOWNORMAL);					

möchte ich, einen von mir vorher im delphi programm eingebenen befehl, schon dort nach der pfadangabe eingetragen haben.
irgendwie finde ich nix dazu und hab schon so ziehmlich alles ausprobiert.

besser wäre sicher noch, das ich dann nicht mal mehr "enter" drücken müsste, d.h. das man nur in delphi, den normalerweise in der eingabeaufforderung einzugebenden befehl, z.b. in ein editfenster eingeben müsste. und auf button click, dann der befehl ausgeführt würde.

kann mir jemand helfen?
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 23.12.02 10:23 
ausblenden Quelltext
1:
ShellExecute( 0, 'open', 'cmd', '/k cd /d d:\tmp & dir', Nil, SW_SHOW );					


Hinweise:
- cmd muß (und sollte) nicht mit Pfad angegeben werden. Dein Code funktioniert z.B. bei mir nicht (Windowsinstallation auf d )
- cmd gibt es erst ab NT aufwärts

Parameter für cmd ganz allgemein:
/k Befehl & Befehl & Befehl ...

Gruß Tom
Trialtom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 23.12.02 12:52 
riesendank,
wow mit /k, wo bekommt man solche befehle her?
ich habe das nirgenswo gefunden, auf keiner platform, weder auf einer msdn cd, noch im internet. wenn es einer von einem anderen hat, woher hat der andere es es dann?

oder ich übersehe sowas einfach?!?

trotzdem nochmals vielen dank.
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 23.12.02 13:39 
Gib im Dos-Fenster mal

cmd /?

ein.

Gruß Tom
Trialtom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 23.12.02 14:12 
ok, klar, daran hab ich nicht gedacht, egal, jedenfalls hab ich noch ein anderes problem:

ich will die eingabeauffrderung dann auch wieder schließen:
ausblenden Quelltext
1:
PostMessage(FindWindow(nil,pchar('cmd')),WM_CLOSE,0, 0);					

oder
ausblenden Quelltext
1:
PostMessage(FindWindow(nil,pchar('C:\WINDOWS\System32\cmd.exe')),WM_CLOSE,0, 0);					

geht bei mir nicht.

ich habe auch schon andere beiträge gelesen:
Befehle wie PostMessage(FindWindow(nil,pchar('rechner')),WM_CLOSE,0, 0); funktionieren,der rechner wird in diesem fall geschlossen, ganz klar. bei anderen prorammen geht es auch, aber nicht bei der eingabeaufforderung, warum nicht?
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 23.12.02 14:22 
Trialtom hat folgendes geschrieben:
ich habe auch schon andere beiträge gelesen:
Befehle wie PostMessage(FindWindow(nil,pchar('rechner')),WM_CLOSE,0, 0); funktionieren,der rechner wird in diesem fall geschlossen, ganz klar.

Das ist nicht "ganz klar". Denn bei einer englischen Windows Version heißt die Titelleiste des Taschenrechners "Calculator" und nicht "Rechner" und somit wird er auch nicht geschlossen.

FindWindow und WM_CLOSE sind, wenn man auf ShellExecute verzichtet auch unnötig. Mit CreateProcess bekommt man nämlich ein Prozess-Handle auf den neuen Prozess, den man dann mit TerminateProcess() abschießen kann.

Und zu ShellExecute: Diese Funktion ist für Viren sehr anfällig, da durch eine kleine Veränderung der Registry anstatt irgendeines Programms der Virus gestartet wird.

_________________
Ist Zeit wirklich Geld?


Zuletzt bearbeitet von AndyB am Mo 23.12.02 14:30, insgesamt 1-mal bearbeitet
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 23.12.02 14:28 
Trialtom hat folgendes geschrieben:
ich will die eingabeauffrderung dann auch wieder schließen:

Du denkst ziemlich kompliziert. Wie wäre es mit dem Parameter

/k ... & ... & Exit

Gruß Tom
Trialtom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 23.12.02 14:37 
oh mein gott :)
haha ich denke wirklich zu kompliziert.
danke nochmals
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 23.12.02 16:35 
Tom denkt aber auch kompliziert.
Zumindest unter Win9x, also mit der command.com geht's noch einfacher, nämlich statt /k einfach /c nehmen, dann wird der Interpreter nach dem Ausführen der Befehle beendet.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Tom
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 23.12.02 17:08 
tommie-lie hat folgendes geschrieben:
Tom denkt aber auch kompliziert.

Aber nur ein bißchen ...

Zitat:
nämlich statt /k einfach /c nehmen

Geht auch mit der cmd.exe

Gruß Tom
Leathl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Di 31.12.02 03:12 
---


Zuletzt bearbeitet von Leathl am So 16.08.09 14:00, insgesamt 1-mal bearbeitet
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Di 31.12.02 03:46 
Hallo!

ShellExecute (und alle anderen API-Funktionen von Windows) erwarten C-kompatible Strings (Windows wurde in C geschrieben).
Strings in C sind immer Zeiger auf nullterminierte Strings, d.h. Zeichenfolgen, die mit #0 abgeschlossen werden. In Delphi nennt man sowas PChar.
Delphi stellt aus diesem Grund bei allen Strings noch ein in der Länge nicht mitgezähltes Nullbyte an das Ende.
Dadurch ist es mit einer einfachen Typumwandlung (die einfach nur die Adresse des ersten Stringbytes liefert) möglich, aus einem String einen PChar zu erzeugen.
Außerdem übergibst Du nicht den Inhalt von Edit1.Text, sondern die Zeichenfolge "/k 'Edit1.Text'" - sollte sogar einen Syntaxfehler ergeben wg. doppelten ' vor dem Komma!

Es muß also heißen (wie in anderen Beispielen bereits sinngemäß geschrieben):
ausblenden Quelltext
1:
ShellExecute( 0, 'open', 'cmd', PChar ('/k ' + Edit1.Text), Nil, SW_SHOW );					


Du willst ja den Inhalt des Edit-Feldes und davor das '/k ' übergeben.

Gruß

Dietmar Brüggendiek
Leathl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: Di 31.12.02 04:00 
---