öffnen Sie cmd ein und Lesen und schreiben hinein

Brauche ich, um einen Prozess zu starten, das startet die Kommandozeile (sollte es nicht pop-up, also so etwas wie ein hintergrund-Prozess).

Dann muss ich schreiben, Zeug, um es und in regelmäßigen Abständen zu Lesen, die Letzte Zeile den Befehl cmd ein.

Da meine C++ Fähigkeiten sind nicht so toll ich weiß nicht, wie Sie diese erreichen.

In einem pseudocode Weg, ich dachte an so etwas wie dieses:

startProcess();
writeToCmd();
readFromCmd() { //Call that every given interval (e.g. 1000 ms)
    if(returnValue >= 100) {
        stopProcess();
    }
}

Ich bin mir ziemlich sicher, es werde nicht einfach werden. Es wäre wirklich toll, wenn mir jemand helfen kann hier.
Das programm ist für windows.

Bearbeiten, wenn die Vorschläge:
Dies ist, was ich bisher gemacht habe (ich habe es ein bisschen anders.)

int errorCode;

//Variables for CreateProcess()
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;
PROCESS_INFORMATION pi;
PHANDLE hInRead, hInWrite;
LPDWORD bytesWritten, bytesRead;

//The CommandLine input
TCHAR tcsCommandLine[] = _T("cmd /c format H: /fs:FAT32 /V:device");
//TCHAR tcsCommandLine[] = _T("cmd /c start D:\\foo.txt");

sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW; //SW_HIDE FOR PRODUCTION
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdInput = hInRead;
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);

ZeroMemory(&pi, sizeof(pi));

errorCode = CreatePipe(hInRead, hInWrite, &sa, 0);

info = GetDriveInfo(m_wsNANDMountPoint);

if(info.m_uSizeInMB > 2048) {
    log("Wrong Mounting Point. Device has more than 2GB space.");

    return false;
}
else {
    //Start Formatting
    if(!CreateProcess(NULL, tcsCommandLine,
        NULL, NULL,
        TRUE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL,
        &si,
        &pi)) {

        log("CreateProcess failed. Could not format Drive");
        return false;
    }

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    WriteFile(hInWrite, "#13#10'J'#13#10", 5, bytesWritten, NULL);
    CloseHandle(hInWrite);

    //Wait until child process exits
    WaitForSingleObject(pi.hProcess, 1100);
}

return true;

Nach ein wenig Debuggen, erkannte ich, dass der code nicht zu brechen bei ZeroMemory(), aber auf

errorCode = CreatePipe(hInRead, hInWrite, &sa, 0);

mit einem Access violation writing location Fehler. Ich habe keine Ahnung, was ich falsch mache.
Es wäre wirklich toll, wenn Euch könnte mir helfen.

  • Dies macht nicht viel Sinn. Könnten Sie einige weitere details zu dem eigentlichen problem, anstatt, wie Sie sich die Lösung aussieht. Egal, was das problem ist, polling jede Sekunde ist sicherlich nicht die Lösung.
Schreibe einen Kommentar