论坛首页> 三共建设

Windows上调用第三方exe并返回信息

日常开发中,经常回碰到需要调用第三方应用,如果只是简单调用,那么久很简单,如果想和第三方应用进行简单的交互也是可以的。 实现方法: 1、创建一个可读写管道 2、设置读写管道替代输出、输入设备 3、创建 exe 后, 只需要操作读写管道即可 ```cpp int SystemEx(const char * cmd, std::string& msg) { SECURITY_ATTRIBUTES sa; HANDLE hRead, hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead, &hWrite, &sa, 0)) { msg = "CreatePipe failure"; return -1; } STARTUPINFOA si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfoA(&si); si.hStdError = hWrite; si.hStdOutput = hWrite; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //关键步骤,CreateProcess函数参数意义请查阅MSDN if (!CreateProcessA(NULL, (char*)cmd, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) { msg = "CreateProcess failure"; return -1; } CloseHandle(hWrite); char buffer[4096] = { 0 }; DWORD bytesRead; while (true) { memset(buffer, 0, sizeof(buffer)); if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) break; //buffer中就是执行的结果,可以保存到文本,也可以直接输出 //printf(buffer);//这行注释掉就可以了 msg += buffer; //Sleep(1); } DWORD retCode = -1; GetExitCodeProcess(pi.hProcess, &retCode); CloseHandle(pi.hProcess); return retCode; } ```

全部回复

暂无更多回复内容