Ale*_*man 3 c# pinvoke winapi process win32-process
我正在尝试自动化在启动时创建GUI窗口但没有用户交互的应用程序,但我无法弄清楚如何隐藏实际窗口.
我尝试过使用ProcessStartInfo:
Process.Start(new ProcessStartInfo {
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
// other properties here
});
Run Code Online (Sandbox Code Playgroud)
但窗口仍然显示出来.
我也试过旋转等待窗口存在,然后隐藏它:
while (process.MainWindowHandle == IntPtr.Zero) {}
ShowWindowAsync(process.MainWindowHandle, SW_HIDE);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这使得窗口闪烁大约1/16秒左右,如果可能的话,我想避免使用它.
我目前的想法是创建一个钩子,但我不确定抓什么钩子,也不确定它是否会起作用.
有小费吗?
所需的进程窗口样式(实际映射到其中一个SW_常量)被传递给另一个应用程序的WinMain函数,但这并不意味着粗鲁的应用程序不会忽略您发送的任何值.
您可以通过创建另一个虚拟桌面来使用它User32.CreateDesktop,然后使用Kernel32.CreateProcess,确保将正确的桌面名称作为STARTINFO结构的一部分传递.