我正在使用CreateProcess创建一个cmd.exe进程,该进程被传递了一个参数,它执行并退出,这使得命令提示符在屏幕上 Flink 。我试图通过将STARTUPINFO struct wShowWindow设置为SW_HIDE来避免这种情况,但此参数似乎影响调用窗口,而不是执行进程的窗口。是否有任何方法可以使用createprocess来启动一个隐藏在视图中的程序?另外,winapi获取环境变量的标准方法是什么?
8ftvxx2r1#
如果它只是一个控制台应用程序,您也可以使用CREATE_NO_WINDOW标志作为CreateProcess调用本身的一部分,例如。
CREATE_NO_WINDOW
CreateProcess
CreateProcess(NULL, lpszCommandLine, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
另外,有关环境变量的信息,请参见this page。
unhi4e5o2#
以下链接here介绍如何以静默方式创建窗口:
DWORD RunSilent(char* strFunct, char* strstrParams) { STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInfo; char Args[4096]; char *pEnvCMD = NULL; char *pDefaultCMD = "CMD.EXE"; ULONG rc; memset(&StartupInfo, 0, sizeof(StartupInfo)); StartupInfo.cb = sizeof(STARTUPINFO); StartupInfo.dwFlags = STARTF_USESHOWWINDOW; StartupInfo.wShowWindow = SW_HIDE; Args[0] = 0; pEnvCMD = getenv("COMSPEC"); if(pEnvCMD){ strcpy(Args, pEnvCMD); } else{ strcpy(Args, pDefaultCMD); } // "/c" option - Do the command then terminate the command window strcat(Args, " /c "); //the application you would like to run from the command window strcat(Args, strFunct); strcat(Args, " "); //the parameters passed to the application being run from the command window. strcat(Args, strstrParams); if (!CreateProcess( NULL, Args, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &StartupInfo, &ProcessInfo)) { return GetLastError(); } WaitForSingleObject(ProcessInfo.hProcess, INFINITE); if(!GetExitCodeProcess(ProcessInfo.hProcess, &rc)) rc = 0; CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); return rc; }
我想getenv和setenv都可以吧?我不知道你在这方面问什么。
cwtwac6a3#
在dwFlags中设置STARTF_USESHOWWINDOW用锋利的牙齿
cunj1qz14#
这对于您的需要来说可能有些过分,但是您可以挂接API,并且永远不显示该进程的任何窗口
4条答案
按热度按时间8ftvxx2r1#
如果它只是一个控制台应用程序,您也可以使用
CREATE_NO_WINDOW
标志作为CreateProcess
调用本身的一部分,例如。另外,有关环境变量的信息,请参见this page。
unhi4e5o2#
以下链接here介绍如何以静默方式创建窗口:
我想getenv和setenv都可以吧?我不知道你在这方面问什么。
cwtwac6a3#
在dwFlags中设置STARTF_USESHOWWINDOW
用锋利的牙齿
cunj1qz14#
这对于您的需要来说可能有些过分,但是您可以挂接API,并且永远不显示该进程的任何窗口