gpt4 book ai didi

c - 启动流程并始终设置流程 HWND 维度

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:58 29 4
gpt4 key购买 nike

我正在启动另一个应用程序并设置其主要 HWND 位置和大小。我正在使用 STARTUPINFO指定窗口尺寸的标志,但看起来只有在新进程使用 CW_USEDEFAULT 时才会遵循这些尺寸在其 CreateWindow()功能。

STARTUPINFO 中是否有标志/设置?那将始终设置新流程的 HWND 维度?我知道另一种解决方案,它可以找到进程主 HWND 和 SetWindowPos()但这涉及到枚举所有窗口以找到正确的窗口,并且某些应用程序需要一段时间才能启动,因此在我调用 EnumWindows() 时窗口处于事件状态。

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

si.dwX = x;
si.dwY = y;
si.dwXSize = w;
si.dwYSize = h;

// any flags I can set to give the STARTUPINFO dimensions priority?
si.dwFlags = ??

CreateProcess(_T("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"), _T(""),
NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL,
NULL, &si, &pi);

最佳答案

Is there a flag/setting in STARTUPINFO that will always set the new processes HWND dimensions?

没有。生成的进程可以完全控制其 UI。它选择是否使用默认值。您在 STARTUPINFO 中指定的内容仅为默认值。

I know another solution it to find the processes main HWND and SetWindowPos()

如果您想强制尺寸,是的。

that involves enumerating all windows to find the right one and some applications take a while to startup so the window is alive by the time I call EnumWindows()

尝试调用 WaitForInputIdle()首先(caveat #1caveat #2)。

或者,使用 SetWinEventHook()监 window 口创建,直到看到您感兴趣的窗口。

相关:How to determine when spawned process is ready? (Using CreateProcess() and FindWindow())

关于c - 启动流程并始终设置流程 HWND 维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38387798/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com