// 参考
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函数参数意义请查阅MSDNQString 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
Ping -n 50(IP地址或者域名,如)这个命令中的“-n”开关告诉发送ping命令的次数,“50”是发送的次数。
然后,你将得到一个测试总结。这个总结将包括丢失的数量和百分比: 199.181.132.250地址Ping的统计结果: 包: 发送 = 6, 接收 = 6, 丢失 = 0 (0%) 大约往返时间以毫秒(ms)显示: 最小 = 26ms, 最大 = 29ms, 平均 = 27ms 如果你看到平均往返时间较高(超过100ms),这也会降低你的网络下载速度。