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.

    http://www.junix.ch/bcb/help/hilfe.html



  • Hallo,

    Wozu gibt es denn die MSDN
    InitiateSystemShutdown
    AbortSystemShutdown
    ExitWindows
    ExitWindowsEx

    Ciao


Anmelden zum Antworten