0
 /* CreateProcess initialization */
 STARTUPINFO si;
 PROCESS_INFORMATION pi;

 memset(&si, 0, sizeof(si));
 memset(&pi, 0, sizeof(pi));
 si.cb = sizeof(si);

 long ret;
 // si.wShowWindow = SW_HIDE;
 // hide process window.... // run in background..

 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;

 if (!CreateProcess(0, exe,
        0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) {
    return;
 }
 //int prez = WaitForSingleObject(pi.hProcess, INFINITE);

 //CloseHandle(pi.hProcess);
4

3 回答 3

5

您可以尝试将结构的dwFlags成员设置为并将成员设置为。STARTUPINFOSTARTF_USESHOWWINDOWwShowWindowSW_HIDE

这将使CreateProcess()传递 0 作为 的nCmdShow参数WinMain。但是,并非所有 Windows 应用程序都表现良好并使用此值来初始调用ShowWindow().

于 2011-01-21T15:51:25.437 回答
0

将新进程注册到任务栏中的不是您,新进程的创建者。它是创建一个决定是否在任务栏中的顶级窗口的新进程。此决定基于该顶级窗口的扩展样式,该样式由新进程确定。

换句话说,您必须在其他进程中戳顶级窗口才能执行此操作。

于 2011-01-21T11:07:01.320 回答
0

您可以找到与已启动进程关联的窗口(请参阅FindWindowEnumWindows),并使用 调用ShowWindow函数SW_HIDE。或者,您可以通过删除WS_EX_APPWINDOW和添加来修改窗口的扩展样式WS_EX_TOOLWINDOW

如果启动的过程尊重设置,最简单的方法仍然是使用第一个答案中描述的 STARTUPINFO 。

于 2011-03-03T14:38:31.060 回答