¿Cómo puedo activar mediante programación una ventana en Windows usando Python? Le estoy enviando pulsaciones de teclas y en este momento solo me estoy asegurando de que sea la última aplicación utilizada y luego envíe la combinación de teclas Alt + Tab para cambiar desde la consola de DOS. ¿Hay una mejor manera (ya que he aprendido por experiencia que de esta manera no es de ninguna manera infalible)?Activación de la ventana de Python
Respuesta
Puede usar el módulo win32gui para hacerlo. Primero necesita obtener un control válido en su ventana. Puede usar el win32gui.FindWindow
si conoce el nombre de la clase de ventana o el título exacto. De lo contrario, puede enumerar las ventanas con el win32gui.EnumWindows
e intentar encontrar la correcta.
Una vez que tenga el asa, puede llamar al win32gui.SetForegroundWindow
con el asa. Se activará la ventana y estará listo para obtener sus pulsaciones de teclas.
Vea un ejemplo a continuación. Espero que ayude
import win32gui
import re
class WindowMgr:
"""Encapsulates some calls to the winapi for window management"""
def __init__ (self):
"""Constructor"""
self._handle = None
def find_window(self, class_name, window_name=None):
"""find a window by its class_name"""
self._handle = win32gui.FindWindow(class_name, window_name)
def _window_enum_callback(self, hwnd, wildcard):
"""Pass to win32gui.EnumWindows() to check all the opened windows"""
if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) is not None:
self._handle = hwnd
def find_window_wildcard(self, wildcard):
"""find a window whose title matches the wildcard regex"""
self._handle = None
win32gui.EnumWindows(self._window_enum_callback, wildcard)
def set_foreground(self):
"""put the window in the foreground"""
win32gui.SetForegroundWindow(self._handle)
w = WindowMgr()
w.find_window_wildcard(".*Hello.*")
w.set_foreground()
Esto no funciona cuando tiene varias instancias de la misma aplicación abierta al mismo tiempo, ya que no podría distinguirlas (ya que todo se basa en el título de la ventana). Es una verdadera lástima, pero supongo que esto es por el Win32API en lugar de este módulo de Python en particular? – dm76
¿Existe una biblioteca similar para osx –
que significa hwnd? (abreviaciones boo!) – NullVoxPopuli
Pywinauto y SWAPY que es probable la menor esfuerzo to set the focus of a window.
Uso SWAPY para generar automáticamente el código python necesaria para recuperar el objeto ventana, por ejemplo .:
import pywinauto
# SWAPY will record the title and class of the window you want activated
app = pywinauto.application.Application()
t, c = u'WINDOW SWAPY RECORDS', u'CLASS SWAPY RECORDS'
handle = pywinauto.findwindows.find_windows(title=t, class_name=c)[0]
# SWAPY will also get the window
window = app.window_(handle=handle)
# this here is the only line of code you actually write (SWAPY recorded the rest)
window.SetFocus()
Si por casualidad otras ventanas están en frente de la ventana de interés, no es un problema. This additional code o this se asegurará de que se muestra antes de ejecutar el código anterior:
# minimize then maximize to bring this window in front of all others
window.Minimize()
window.Maximize()
# now you can set its focus
window.SetFocus()
- 1. Delphi: Mostrar ventana sin activación
- 2. evento de activación del teclado en una ventana de tinymce
- 3. Python - obtener texto de la ventana
- 4. Python: Ventana emergente de PyQt
- 5. Activación de la barra de desplazamiento en WPF
- 6. Orden de activación EventListenerList
- 7. Prevenir la activación de onUpdate of WidgetProvider
- 8. Activación de validación en la página Carga
- 9. Implementación de ClickOnce "Falló la activación" FileNotFoundException
- 10. redirección después de la activación del plugin
- 11. Eventos de red troncal en el modelo de activación en la recopilación (doble activación)
- 12. ¿Cómo me deshago de la ventana raíz de Python Tkinter?
- 13. Python Separar una cadena en la ventana
- 14. Activación de advertencias de migración
- 15. Activación de la cámara Flash durante la grabación de video
- 16. Problemas de activación en Z3
- 17. Quartz: activación de varios trabajos
- 18. java nio Selector de activación
- 19. Activación de PHP desde ActiveMQ
- 20. X11 - Cómo subir la ventana de otra aplicación usando Python
- 21. Cómo activar la pantalla durante el bloqueo parcial de activación
- 22. centro de la ventana de dicom, ancho de la ventana
- 23. Manejar ventana múltiple en Python
- 24. Advertencia de PHP: stream_socket_client(): ¿Falló la activación de crypto?
- 25. ¿Dónde debería guardar la clave de "activación" de mi aplicación?
- 26. ¿Cuál es la función de error de activación en PHP?
- 27. Activación de la barra de desplazamiento en EditText Android
- 28. Licencias de aplicaciones y pensamientos de activación
- 29. Algoritmo de clave de activación- Seguridad
- 30. Jquery datepicker - activación manual
que realmente debería Dinos conjunto de herramientas GUI que está utilizando, ya que es posible que esta capacidad se encuentra en la caja de herramientas. –
¿Tal vez está tratando de activar solo * cualquier * uno de la ventana abierta? –