qt 獲得cmd 命令運行的結果


http://blog.csdn.net/flxqe/article/details/7801084// 參考

BOOL ExecDosCmd()
{
#define EXECDOSCMD "ping http://www.baidu.com" //可以換成你的命令


SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;


sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
return FALSE;
}
char command[1024]; //長達1K的命令行,夠用了吧
strcpy(command,"Cmd.exe /C ");

strcat(command,EXECDOSCMD);
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite; //把創建進程的標准錯誤輸出重定向到管道輸入
si.hStdOutput = hWrite; //把創建進程的標准輸出重定向到管道輸入
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//關鍵步驟,CreateProcess函數參數意義請查閱MSDN
QString str(command);

if (!CreateProcess(NULL, (LPWSTR)str.utf16(),NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
CloseHandle(hWrite);
CloseHandle(hRead);
return FALSE;
}
CloseHandle(hWrite);


char buffer[4096] = {0}; //用4K的空間來存儲輸出的內容,只要不是顯示文件內容,一般情況下是夠用了。
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
//buffer中就是執行的結果,可以保存到文本,也可以直接輸出
QString strTemp(buffer);

QMessageBox testMassage1;
testMassage1.setText(strTemp);
testMassage1.exec();

//這里是彈出對話框顯示
}
CloseHandle(hRead);
return TRUE;
}

 

另一個方法:

QProcess p(0);
p.start("cmd", QStringList()<<"/c"<<"ping 192.168.101.3");
p.waitForStarted();
p.waitForFinished();
QString strTemp=QString::fromLocal8Bit(p.readAllStandardOutput());

QMessageBox testMassage1;
testMassage1.setText(strTemp);
testMassage1.exec();
return true;

 

有趣的ping

ping -n 50 www.BAIDU.COM

 Ping -n 50(IP地址或者域名,如www.website.com)這個命令中的“-n”開關告訴發送ping命令的次數,“50”是發送的次數。
  
  然后,你將得到一個測試總結。這個總結將包括丟失的數量和百分比:
  
  199.181.132.250地址Ping的統計結果:
  
  包: 發送 = 6, 接收 = 6, 丟失 = 0 (0%)
  
  大約往返時間以毫秒(ms)顯示:
  
  最小 = 26ms, 最大 = 29ms, 平均 = 27ms
  
  如果你看到平均往返時間較高(超過100ms),這也會降低你的網絡下載速度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM