0

我创建了一个非常简单的 Win 程序。它打开记事本并在 5 秒后打开 calc。问题是第一个程序总是在后台打开而不是焦点(见图)。第二个程序以焦点打开。我一直在想这个问题,我不知道为什么会发生或者如何打开第一个焦点程序。

我正在使用具有默认 Windows 应用程序设置的 Visual Studio 2013。

编辑:这不是一个重复的问题,我在这里要问的是为什么同一个 CreateProcess() 函数会在后台创建一次进程并在焦点中创建一次!

记事本在后台打开

#include <Windows.h>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    STARTUPINFO si = { 0 };
    PROCESS_INFORMATION pi = { 0 };
    si.cb = sizeof(si);
    CreateProcess(L"c:\\windows\\system32\\notepad.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

    Sleep(5000);

    STARTUPINFO si2 = { 0 };
    PROCESS_INFORMATION pi2 = { 0 };
    si2.cb = sizeof(si2);
    CreateProcess(L"c:\\windows\\system32\\calc.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si2, &pi2);

    return 0;
}
4

1 回答 1

2

找到了解决这个问题的方法,很奇怪,我不知道它为什么有效,但它有效。

如果我添加:

MSG msg;
TranslateMessage(&msg);

在 WinMain 中,然后我创建的过程成为焦点,很奇怪。有人可以解释它为什么起作用吗?

于 2014-07-30T11:45:53.497 回答