Csharp/C#教程:在运行时切换Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden分享


在运行时切换Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

我想在运行时切换进程的可见性 ,我有一个Windows窗体应用程序,它通过一个进程启动默认隐藏的另一个控制台应用程序,但我想允许管理员用户通过复选框切换此状态并显示控制台应用程序他们选择。

我有这个,但它不起作用:

private void checkBox1_CheckedChanged(object sender, EventArgs e) { ProcessWindowStyle state = cvarDataServiceProcess.StartInfo.WindowStyle; if (state == ProcessWindowStyle.Hidden) cvarDataServiceProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; else if (state == ProcessWindowStyle.Normal) cvarDataServiceProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; } 

您必须使用Win32 API。

  [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); ProcessWindowStyle state = ProcessWindowStyle.Normal; void toggle() { if (cvarDataServiceProcess.HasExited) { MessageBox.Show("terminated"); } else { if (cvarDataServiceProcess.MainWindowHandle != IntPtr.Zero) { if (state == ProcessWindowStyle.Hidden) { //normal state = ProcessWindowStyle.Normal; ShowWindow(cvarDataServiceProcess.MainWindowHandle, 1); } else if (state == ProcessWindowStyle.Normal) { //hidden state = ProcessWindowStyle.Hidden; ShowWindow(cvarDataServiceProcess.MainWindowHandle, 0); } } } } 

但是,当hidden启动进程时,这将不起作用,因为将不会创建窗口并且主窗口的句柄将为零(无效)。
所以,也许你可以正常启动这个过程然后隐藏它。 ?

在启动进程后,不使用Process.StartInfo.WindowStyle,而是使用Process.ShowWindow()来更改窗口样式。 但是,如上所述,如果您启动隐藏的过程,则永远不会显示过程窗口。 恕我直言,这是一个非常烦人的错误,微软应该修复,但唉,我只是通过显示窗口然后隐藏它来解决它。 不那么干净,并留下一点用户界面(或任务栏)闪烁,但至少它是有效的。

上述就是C#学习教程:在运行时切换Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1008133.html

(1)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐