Quiero cerrar la ventana con algún nombre (cualquier aplicación, por ejemplo, calculadora, etc.). ¿Cómo hacerlo en C#? Importar funciones de WinAPI?¿Cómo cerrar la ventana por su nombre?
Respuesta
Sí, debe importar las funciones de la API de Windows: FindWindow()
, SendMessage()
; y WM_CLOSE
constante.
definiciones nativos de las funciones API de Windows:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
/// </summary>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
const UInt32 WM_CLOSE = 0x0010;
código de cliente:
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
if (windowPtr == IntPtr.Zero)
{
Console.WriteLine("Window not found");
return;
}
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
Sí, esto funciona bien para el Bloc de notas (asumiendo, por supuesto, que el título de la ventana es exactamente lo que ha dado aquí, que probablemente no sea la mayor parte del tiempo). Pero no funcionará para las aplicaciones que tienen varias ventanas de nivel superior, a menos que hayan sido específicamente diseñadas para cerrar toda la aplicación después del cierre de una única ventana de nivel superior. De lo contrario, debe enviar 'WM_CLOSE' a * cada * de las ventanas de nivel superior para asegurarse de que la aplicación se cierre. –
Además, las aplicaciones pueden elegir responder a 'WM_CLOSE' de la forma que deseen. Por ejemplo, algunos programas eligen minimizar al área de notificación de la barra de tareas al recibir este mensaje, en lugar de cerrarse. Como no puede controlar cómo responde la aplicación al mensaje, debe probar este método ampliamente y darse cuenta de cuán potencialmente frágil es al tratar con aplicaciones desconocidas y no probadas. –
¿Es correcto como este 'CloseWindow (windowPtr)'? –
usted está tratando de cerrar las ventanas que pertenecen a otros procesos. Eso no es algo que pueda asumir que funcionará de manera confiable. Por un lado, USTED no posee esas ventanas, por lo que realmente no tiene ningún derecho automático para ir y meterse con las ventanas de los otros procesos.
Como sugiere la otra respuesta, puede intentar enviar un WM_CLOSE a la ventana, pero viene con la advertencia de que el otro proceso no tiene derecho a cumplirlo. La respuesta a WM_CLOSE puede ser cualquier cosa para la aceptación y un cierre limpio para el rechazo total. En este último caso, realmente no tienes opción. No es tu proceso. En el medio, como has visto, podría haber cualquier tipo de ventanas intermedias, cuadros de diálogo, etc. con los que tendrías que lidiar.
¿Qué estás tratando de lograr aquí? ¿Por qué intentas cerrar ventanas pertenecientes a otros procesos? Podría ayudar a aclarar cuál es el objetivo.
- 1. Cómo cerrar la ventana emergente y redireccionar la ventana principal
- 2. ¿Cómo cerrar la ventana en awt?
- 3. ¿Cómo cerrar fancybox desde la ventana secundaria?
- 4. clase por su nombre
- 5. actualizar la ventana primaria al cerrar la ventana secundaria
- 6. Cerrar programáticamente ventana gtk
- 7. ¿Cómo cerrar la ventana emergente en funcionamiento de selenio?
- 8. Botón HTML Cerrar ventana
- 9. Capturar ventana cerrar evento
- 10. Función para cerrar la ventana en Tkinter
- 11. Cómo encontrar la variable de JavaScript por su nombre
- 12. Cómo cerrar una ventana abierta de eclipse
- 13. ¿Cómo cerrar una ventana emergente de Liferay.util.openWindow?
- 14. Cómo cerrar una ventana usando jQuery
- 15. marco Entidad - conseguir entidad por su nombre
- 16. ¿Cómo detener un programa Perl al cerrar su ventana cuando termina?
- 17. jQuery función de llamada por su nombre
- 18. Cómo cerrar la ventana dividida/editor adyacente - Xcode 4
- 19. cómo cerrar la página de WPF como ventana
- 20. cómo eliminar un búfer de gvim sin cerrar la ventana
- 21. ¿Cómo cerrar una aplicación JavaFX en la ventana cerrada?
- 22. ¿Cómo forzar la salida del usuario cuando su nombre de usuario es cambiado por otro usuario?
- 23. Cómo cerrar una aplicación pygtk después de cerrar la última ventana/destruirla
- 24. cómo cerrar una ventana desde un proceso diferente
- 25. Obtener un componente Swing por su nombre
- 26. JavaScript llegar elemento por su nombre
- 27. java swing cerrar la ventana sin salir de la aplicación
- 28. Conseguir la variable por su nombre en C#
- 29. ¿Por qué el cierre de la última ventana secundaria minimiza su ventana principal?
- 30. cerrar una ventana de otro en WPF
http://www.codeproject.com/Articles/22257/Find-and-Close-the-Window-using-Win-API ... google rox usted sabe – m0s
Posible duplicado. http://stackoverflow.com/questions/116090/how-do-i-kill-a-process-using-vb-net-or-c – Lloyd
@Lloyd: No es un duplicado, matar a un proceso no es lo mismo que cerrando una ventana. –