我需要啓動一個啓動命令行的進程(它不應該彈出,所以像後臺進程)。打開cmd並讀取和寫入它
然後我需要寫東西給它並定期讀取cmd的最後一行。
由於我的C++技能不是很好,我不知道如何實現這一點。
在僞方式我想過這樣的事情:
startProcess();
writeToCmd();
readFromCmd() { // Call that every given interval (e.g. 1000 ms)
if(returnValue >= 100) {
stopProcess();
}
}
我敢肯定它會不會是那麼容易。如果有人能幫助我,這將是非常好的。 這個程序是用於windows的。建議操作後
編輯: 這是我到目前爲止已經做了(我做了一點點不同)
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;
調試的一點點後,我認識到,沒有按代碼」在ZeroMemory()
牛逼突破,但
errorCode = CreatePipe(hInRead, hInWrite, &sa, 0);
與Access violation writing location
錯誤。我不知道我在做什麼錯。 如果你們能夠幫助我,這將會非常棒。
這並沒有多大意義。你能否提供一些有關實際問題的更多細節,而不是你如何設想解決方案的外觀。無論問題出在哪,每秒輪詢肯定不是解決方案。 – 2011-12-20 13:16:55