【问题标题】:Start Process and Always Set Process HWND Dimensions启动进程并始终设置进程 HWND 尺寸
【发布时间】:2016-07-15 04:18:24
【问题描述】:

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

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);

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    STARTUPINFO 中是否有一个标志/设置将始终设置新进程 HWND 尺寸?

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

    我知道另一种解决方案是找到进程 main HWND 和 SetWindowPos()

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

    这涉及枚举所有窗口以找到正确的窗口,并且某些应用程序需要一段时间才能启动,因此在我调用 EnumWindows() 时窗口仍处于活动状态

    尝试先致电WaitForInputIdle()(caveat #1、caveat #2)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多