Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Createprocess cmd.exe dann schreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
14.02.2006, 22:31 Uhr
Kabel



Danke
Aber ich hab immer noch Probleme, ich frage mich was ich falsch mache, ich strenge mich an deine Anweiungen genaustens zu befolgen aber es will immer noch nicht. Jetzt startet die CMD gar nicht mehr :/
Ich hab die Handles in in deinen Code eingefügt aber irgendwie gehts nicht. Ich poste mal wie es jetzt hier aussieht. Hab die Teile meines Codes der Reihenfolge deines Beitrages (weiter oben angepasst)


C++:
AllocConsole();        
HANDLE hIn;
hIn = GetStdHandle(STD_INPUT_HANDLE);        
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);

STARTUPINFO si;
si.size = sizeof(si); /*Fehlermeldung!error C2039: 'size' : is not a member of '_STARTUPINFOA'*/
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = hIn;
si.hStdOutput = hOut;
//si.hStdError = ...
AllocConsole();

STARTUPINFO          si1 = { sizeof(si1) };/*musste ich umbenennen da es sonst eine redefinition gab*/
PROCESS_INFORMATION  pi;
char                 szExe[] = "cmd.exe";


if(CreateProcess(0, szExe, 0, 0, TRUE, 0, 0, 0, &si, &pi))

        hIn = GetStdHandle(STD_INPUT_HANDLE);
        if (hIn != INVALID_HANDLE_VALUE)
        {
    DWORD k;
    char dir[3];
    WriteFile (hIn,dir,1024,&k,NULL);
        }



So, nun würde ich gerne wissen wie ich die Fehler beheben kann und das Programm zum funktionieren bringen.
Ich bin sehr dankbar für eure Geduld.

Schöne Grüsse,
Kabel

Dieser Post wurde am 14.02.2006 um 22:34 Uhr von Kabel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.02.2006, 08:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
AllocConsole();        
HANDLE hIn;
hIn = GetStdHandle(STD_INPUT_HANDLE);        
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);

STARTUPINFO si;
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = hIn;
si.hStdOutput = hOut;
si.hStdError = hOut; // kann man machen
AllocConsole();

PROCESS_INFORMATION  pi;
char                 szExe[] = "cmd.exe";


if(CreateProcess(0, szExe, 0, 0, TRUE, 0, 0, 0, &si, &pi))

        hIn = GetStdHandle(STD_INPUT_HANDLE);
        if (hIn != INVALID_HANDLE_VALUE)
        {
    DWORD k;
    char dir[3];
    WriteFile (hIn,dir,1024,&k,NULL);
        }



Ansonsten, was genau willst du eigentlich schreiben? momentan schreibst du von einem 3 byte großem, uninitialisierten array 1024 bytes! ;-)
--
class God : public ChuckNorris { };

Dieser Post wurde am 15.02.2006 um 08:16 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.02.2006, 15:02 Uhr
Kabel



Hallo,

also ich will eigentlich etwas schreiben was aus einem Buffer gelesen wird, daher die 1024 bytes. dir hab ich nur als Beispiel genommen, um es damit zu probieren.

War das keine gute Idee?
Ich danke dir für deinen Code, ich werde es nachher testen und mich dann wieder melden.

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
19.02.2006, 18:21 Uhr
Kabel



So wieder ich, ich hab nun alles so eingestellt wie du es mir gesagt has, aber ich hab immer noch Probleme was das schreiben hinter die Eingabeaufforderung angeht. ICh kann es manuell hinschreiben dann gehts auch, aber nicht vom Programm selber.


Zitat:

momentan schreibst du von einem 3 byte großem, uninitialisierten array 1024 bytes! ;-)



hat das möglicherweise was damit zu tun? Was kann ich dagegen machen?

mfg
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
19.02.2006, 19:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


um den Befehl "dir" zu senden:


C++:
   const char *dir= "dir\r\n";
   DWORD written = 0;
   WriteFile (hIn,dir,strlen(dir),&written,NULL);



sollte eigentlich gehen, solang deine handles stimmen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
19.02.2006, 21:04 Uhr
Kabel




C++:
DWORD written = 0;
loSoft,

ich danke dir wiedermal für deine Hilfestellung.

Jedoch sieht es so aus als ob ich immer noch was falsches mache. Ich dachte mal mein Code sei nun einigermassen richtig, aber vielleicht habe ich etwas übersehen,da ich in den letzten Tagen sher viel probiert habe um euch nicht für jede Kleinigkeit zu nerven.

Die Handels müssten eigentlich richtig sein, ich poste hier mal den betroffenen Teil des Codes. Bei einer Zeile bin ich mir nicht sicher, da ich die umändern musste weil sonst keine CMD mehr gestartet wurde. (Kommentar neben der Zeile)


C++:
HANDLE hIn;
hIn = GetStdHandle(STD_INPUT_HANDLE);        
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);



        if (hIn != INVALID_HANDLE_VALUE)
        {
            bool y=TRUE;
            AllocConsole();
            STARTUPINFO si = { sizeof(si) };//Bei dieser Zeile bin ich mir nicht sicher -!-
            si.dwFlags = STARTF_USESTDHANDLES;
            si.hStdInput = hIn;
            si.hStdOutput = hOut;
            

            PROCESS_INFORMATION  pi;
            char                 szExe[] = "cmd.exe";
            while (y){
                if(CreateProcess(0, szExe, 0, 0, TRUE, 0, 0, 0, &si, &pi))
                    {
                    for(;;)
                        {
                        //recv(W_IP, Buffer, sizeof(Buffer), 0); //zur Zeit ausgeklammert da ich ohne Sockets probieren will
                        
                        const char *dir= "dir\r\n";
                            DWORD written = 0;
                        WriteFile (hIn,dir,strlen(dir),&written,NULL);      
                        }
                    }
                }
            }




So das ist die Definition der Handle und den Input Handle.
Ich hoffe ich plage euch nicht zusehr mit meinen Fragen.

Ahja, könntest du mir bitte kurz erklären was der Befehl|CPP|| eigentlich macht? Ist das einzige was ich zur Zeit nicht so richtig kenne, und ich möchte eigentlich auch gerne was hinzulernen

Viele Dank, und Grüsse,
Kabel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: