我怎么能在winXP中创建一个隐藏进程窗口(从任务栏)的进程?使用CreateProcess函数?

时间:2011-01-21 11:02:36

标签: c++ winapi c++builder createprocess

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

3 个答案:

答案 0 :(得分:5)

您可以尝试将dwFlags结构的STARTF_USESHOWWINDOW成员设置为wShowWindow,将SW_HIDE成员设置为CreateProcess()

这会使nCmdShow作为STARTUPINFOShowWindow()参数传递0。但是,并非所有Windows应用程序都表现良好,并将此值用于对{{1}}的初始调用。

答案 1 :(得分:0)

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

换句话说,为了做到这一点,你必须在这个其他过程的顶层窗口戳。

答案 2 :(得分:0)

您可以找到与已启动流程相关联的窗口(请参阅FindWindowEnumWindows),然后使用ShowWindow调用SW_HIDE功能。或者,您可以删除WS_EX_APPWINDOW并添加WS_EX_TOOLWINDOW

来修改窗口的扩展样式

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