mfc进程方面处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 获取某个进程ID DWORD GetTaskManagerProcessId() { DWORD taskManagerProcessId = 0; PROCESSENTRY32 pe32; pe32.dwSize = sizeof (PROCESSENTRY32); HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { // std::cerr << "CreateToolhelp32Snapshot failed: " << GetLastError() << std::endl; // ::MessageBox(L"123"); return 0; } BOOL bMore = Process32First(hProcessSnap, &pe32); while (bMore) { if (lstrcmpi(pe32.szExeFile, _T( "BCompare.exe" )) == 0) { taskManagerProcessId = pe32.th32ProcessID; break ; } bMore = Process32Next(hProcessSnap, &pe32); } CloseHandle(hProcessSnap); return taskManagerProcessId; } |
// 获取进程句柄 struct ProcessWindow { DWORD dwProcessId; HWND hwndWindow; }; HWND parentWindow; PROCESS_INFORMATION pi; // 查找进程主窗口的回调函数 BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam) { ProcessWindow* pProcessWindow = (ProcessWindow*)lParam; DWORD dwProcessId; GetWindowThreadProcessId(hWnd, &dwProcessId); // 判断是否是指定进程的主窗口 if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL) { pProcessWindow->hwndWindow = hWnd; HANDLE hProcess = pi.hProcess; HANDLE hThread = pi.hThread; // 调整外部程序的窗口风格,以隐藏标准窗口 SetWindowLongPtr(pProcessWindow->hwndWindow, GWL_STYLE, GetWindowLongPtr(pProcessWindow->hwndWindow, GWL_STYLE) & ~WS_CAPTION); // 设置外部程序的父窗口 SetParent(hWnd, parentWindow); // 继续执行外部程序 ResumeThread(hThread); // 清理资源 CloseHandle(hProcess); CloseHandle(hThread); return FALSE; } return TRUE; } HWND CreateMyProcess() { STARTUPINFO si; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); //设置进程创建时不显示窗口 si.dwFlags = /*STARTF_USEPOSITION*/STARTF_USESHOWWINDOW; /*startupInfo.dwX = 600; startupInfo.dwY = 900;*/ si.wShowWindow = SW_HIDE; if (::CreateProcess(L"D:\\VS2019\\nestexe3\\nestexe3\\NetAssist.exe", NULL, NULL, // process security NULL, // thread security FALSE, // no inheritance 0, // no startup flags NULL, // no special environment NULL, // default startup directory &si, &pi)) { ProcessWindow procwin; procwin.dwProcessId = pi.dwProcessId; procwin.hwndWindow = NULL; // 等待新进程初始化完毕 WaitForInputIdle(pi.hProcess, 5000); // 查找主窗口 EnumWindows(EnumWindowCallBack, (LPARAM)&procwin); return procwin.hwndWindow; } return NULL; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)