System-Befehl mit Variablen
-
Hallo, ich hab zwar schon gesucht und etwas gefunden, allerdings hilft das nicht wirklich viel weiter. Also ich habe bei einem Client ein Edit-Feld, wo man eine Zeit eingeben kann für das "shutdown -t zeit"
Das soll dann beim Server in einer Variable gespeichert werden und dann bei system eingebunden werden:Client:
// SendMessage void __fastcall TForm1::btnSendClick(TObject *Sender) { Client->Socket->SendText("TXTM" + edNachricht->Text); // TXTM = TextMessage } //--------------------------------------------------------------------------- // COM Shutdown void __fastcall TForm1::btnShutdownClick(TObject *Sender) { Client->Socket->SendText("COM1shutdown -t " + Edit1->Text + " -s"); } //---------------------------------------------------------------------------Server:
/ On Client Read, Messages und Befehle ausführen/auswerten void __fastcall TForm1::ServerClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString RecText = Socket->ReceiveText(); int leng = RecText.Length(); // Länge des Strings speichern AnsiString header = RecText.SubString(1, 3); // Die ersten 3 Chars als // Header kopieren AnsiString rest = RecText.SubString(5, leng); // Ab dem 5. Char ist es Rest AnsiString index = RecText.SubString(4, 1); // Den index holen if (header == "COM") // Header vergleichen für COM { // 1 = shutdown if (index == "1") { char rest[25]; system(rest); } } if (header == "TXT") // Header vergleichen für TXT ShowMessage(rest);TextMessage wird erfolgreich angezeigt, allerdings wird ja wie sonst auch immer, der Shutdown-Befehl nicht ausgeführt. Weiß einer, woran es liegen könnte?
-
Hallo,
Was soll denn das hier
char rest[25]; system(rest);Du erzeugst hier ein neues Array und übergibst es dann an system. Da steht ja nichts drin und somit wird auch nichts ausgeführt.
evtl.if (header == "COM") // Header vergleichen für COM { // 1 = shutdown if (index == "1") { system(rest.c_str()); } }In rest muss aber ein gültiges Kommando stehen.
Ciao
-
Hehe geil danke! Endlich mal^^ Super.
-
hm und warum funktioniert das jetzt nicht?
AnsiString path = ExtractFilePath(Application->ExeName); system("copy " + path.c_str()) + " C:\\Windows\\system32");Fehler:
[C++ Fehler] Unit1.cpp(16): E2085 Unzulässige Zeigeraddition
-
Dein "copy " ist ein einfaches char-Array, und das kennt nun mal keinen Additions-Operator. Was du brauchst ist eine Stringklasse wie AnsiString, oder strcpy().
-
*args*
zum runterfahren verwende lieber direkt die WinAPI und keinen klotz wie system.
siehe:
InitiateSystemShutdown, AbortSystemShutdown, ExitWindows und ExitWindowsEx
-
Kannst du mir dann mal erklären, wie ich die Befehle benutze?
Weil wenn ich das in der Hilfe eingebe, bekomme ich keine Ergebnisse.
-
Das kann er bestimmt erklären, aber nicht in diesem Thread und nicht in diesem Forum.
milo51 schrieb:
Weil wenn ich das in der Hilfe eingebe, bekomme ich keine Ergebnisse.
-
Hallo,
Wozu gibt es denn die MSDN
InitiateSystemShutdown
AbortSystemShutdown
ExitWindows
ExitWindowsExCiao