我想在全屏模式下创建一个进程。我尝试在调用CreateProcess()时设置STARTUPINFO,如下所示:
WCHAR cmd = L"Calc";
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindows = SW_MAXIMIZE;
// or si.dwFlags = STARTF_RUNFULLSCREEN;
BOOL isCreated = CreateProcess(nullptr, cmd,
nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi);
但该过程并没有像预期的那样在全屏模式下启动。
所以我在创建了这样的流程后试图获得它的HWND:
HWND FindMainWindow(DWORD processId) {
struct ProcHwnd {
DWORD process_id;
HWND hwnd;
};
ProcHwnd hProcWnd;
auto EnumWindowCallback = [](HWND hwnd, LPARAM lParam) -> BOOL {
ProcHwnd* data = reinterpret_cast<ProcHwnd *>(lParam);
DWORD windowProcessID;
GetWindowThreadProcessId(hwnd, &windowProcessID);
if (windowProcessID == data->process_id) {
if (IsWindowVisible(hwnd)) {
data->hwnd = hwnd;
return false;
}
}
return true;
};
EnumWindows(EnumWindowCallback, reinterpret_cast<LPARAM>(&hProcWnd));
return hProcWnd.hwnd;
}
int main() {
WCHAR cmd = L"Calc";
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
si.cb = sizeof(STARTUPINFO);
BOOL isCreated = CreateProcess(nullptr, cmd,
nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi);
WaitForInputIdle(pi.hProcess, INFINITE);
HWND hWindow = FindMainWindow(pi.dwProcessId);
if(hWindow == nullptr)
return -1;
ShowWindow(hWindow, SW_MAXIMIZE);
return 0;
}
退出代码为0。但是
ShowWindow()
没有将窗口最大化。