c# - Alternar Process.StartInfo.WindowStyle=ProcessWindowStyle.Hidden en tiempo de ejecución
window-style (2)
Quiero alternar la visibilidad de un proceso en tiempo de ejecución , tengo una aplicación de Windows Form que inicia a través de un proceso otra aplicación de consola oculta por defecto, pero me gustaría permitir que el usuario administrador active este estado mediante una casilla de verificación y muestre la aplicación de consola si Ellos eligen.
Tengo esto pero no está funcionando:
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;
}
Tienes que usar Win32 API para esto.
[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);
}
}
}
}
Sin embargo, esto no funcionará cuando el proceso se inicie hidden
, porque la ventana no se creará y el identificador de la ventana principal será cero (no válido).
Entonces, quizás puedas comenzar el proceso normalmente y luego esconderlo después de eso. :)
En lugar de utilizar Process.StartInfo.WindowStyle después de iniciar el proceso, utiliza Process.ShowWindow () para cambiar el estilo de la ventana. Sin embargo, como se indicó anteriormente, si inicia el proceso oculto, nunca podrá mostrar la ventana del proceso. En mi humilde opinión, este es un error muy molesto que Microsoft debería solucionar, pero, por desgracia, simplemente lo soluciono mostrando la ventana y luego ocultándola. No tan limpio, y deja un poco de interfaz de usuario (o barra de tareas) parpadea, pero al menos funciona.