Estoy interactuando con una aplicación de terceros utilizando su API, y me gustaría moverlo al frente del foco (para que esté encima de todas las otras ventanas abiertas) cuando un usuario realiza una determinada acción. Si bien puedo mover mi aplicación hacia arriba y hacia abajo en la jerarquía con bastante facilidad, no parece haber una forma de interactuar con otras ventanas. ¿Es posible mover la ventana de otro programa al frente con Java?¿Puedo mover la ventana de otro programa al frente del foco?
Respuesta
No puede hacerlo en código Java puro, pero podría usar JNI. Vea In Java Swing how do you get a Win32 window handle (hwnd) reference to a window? para saber cómo manejar la ventana. Entonces podría hacer algo como http://msdn.microsoft.com/en-us/library/ms633545 para moverlo al frente.
Advertencia: Esto es sólo para Windows
No es posible en Java puro y en ciertos sistemas operativos ni siquiera es posible obtener limpiamente la otra posición de Windows (por ejemplo, buena suerte hacerlo bajo OS X 10.4: OS X 10.4 no no tienen ningún medio documentado para registrarse para eventos de otras ventanas ... Hay "hacks", pero son realmente hackish, como requerir que el usuario active las preferencias "Permitir dispositivo auxiliar", lo que requiere la contraseña de administrador de OS X).
que estaba buscando una solución a un problema muy similar. Hasta ahora he encontrado uno - muy frágil! - solución. Funciona para mi caso, porque mi caso implica ejecutar sesiones completas utilizando java.awt.Robot
sin interacción del usuario, por lo que puede funcionar o no para su caso.
La solución está utilizando java.awt.Robot
para enviar las pulsaciones de teclas como Alt+Tab
para llevar la ventana deseada al frente. Esta es frágil, por supuesto, debido a múltiples razones:
- el robot no puede saber con qué frecuencia
Alt+Tab
necesidades que se envía para obtener la ventana deseada a frente. La ventana es una en muchos. Esta solución solo funciona si ya se sabe qué ventana en términos deAlt-Tab
-contesta que es. - Dependiendo del sistema operativo, las teclas requeridas en realidad podrían ser otra cosa.
En caso de que el sistema operativo y la secuencia de la ventana son conocidos, es decir, el programa puede saber por adelantado el número de pulsaciones de teclas Alt-Tab
sería necesario, a veces esto podría ser una solución.
El siguiente programa Java muestra cómo hacerlo. Si se llama sin argumentos, genera exactamente una pulsación de tecla Alt+Tab
. Si se llama con argumentos, el programa asume que el primer argumento es un número y generará tantas pulsaciones de teclado Alt+Tab
como lo especifique ese número.
Es posible que desee jugar un poco con los valores de tiempo dados en robot.delay()
y robot.setAutoDelay()
para ofrecer la mejor experiencia en su máquina. Consejo: al menos en Linux, robot.setAutoDelay()
debería ser menor que el retraso de repetición del teclado; de lo contrario, el sistema operativo generaría varias pulsaciones de teclas Alt-Tab
en la cola de eventos del sistema debido a la repetición de las teclas.
import java.awt.AWTException;
import java.awt.Robot;
import static java.awt.event.KeyEvent.VK_ALT;
import static java.awt.event.KeyEvent.VK_TAB;
import static java.lang.Integer.parseInt;
public class WindowSwitcher {
public static void main(final String... args) throws AWTException {
final int repeat = args.length != 0 ? parseInt(args[0]) : 1;
final Robot robot = createRobot();
robot.keyPress(VK_ALT);
for (int i = 0; i < repeat; i++) {
robot.keyPress(VK_TAB);
robot.keyRelease(VK_TAB);
robot.delay(500);
}
robot.keyRelease(VK_ALT);
}
public static Robot createRobot() throws AWTException {
final Robot robot = new Robot();
robot.setAutoWaitForIdle(true);
robot.setAutoDelay(10);
return robot;
}
}
- 1. Cómo mover la ventana de la ventana de texto al obtener el foco?
- 2. Windows 7: ¿cómo llevar una ventana al frente sin importar qué otra ventana tenga foco?
- 3. traer ventana emergente al frente
- 4. ¿Cómo puedo mover programáticamente una ventana Terminal.app a otro espacio?
- 5. WPF - Traer ventana al frente
- 6. Llevando la ventana al frente en C# usando Win32 API
- 7. Mover el foco al registro recién agregado en un NSTableView
- 8. Desactivar la tecla F10 de mover el foco a la barra de menú en C# Programa de formas
- 9. Mover el foco a un campo particular
- 10. ¿Cómo puedo mover la tabla a otro grupo de archivos?
- 11. git-gui: mover el foco del teclado a "archivos modificados"
- 12. Detectar foco de WPF al alcance del foco
- 13. Mover la ventana de registro de GWT
- 14. ventana del navegador abierta del programa Java
- 15. entrada en el foco o la tecla de tabulación presionada, mover al centro de la pantalla
- 16. Mover el foco de un cuadro de texto Editar a otro
- 17. Ventana del programa depurado no se cerrará
- 18. ¿Cómo establecer el foco en otra ventana?
- 19. Prevenir Cambio de foco de ventana
- 20. Mover el contador de programa en la depuración de Delphi
- 21. Mover el foco de JTextArea mediante la ficha clave
- 22. Maximice la ventana y llévela al frente con powershell
- 23. ¿Es posible llevar la ventana al frente sin enfocar?
- 24. ¿Cómo se limpia el programa al salir del programa javafx?
- 25. AnkhSVN: mover un proyecto a otro repositorio
- 26. jQuery: ¿Cómo puedo saber cuándo una pestaña/ventana gana foco?
- 27. Cómo mover el foco a otro "grupo de pestañas" en Intellij IDEs
- 28. Mover RavenDb a otro servidor
- 29. traer una ventana de consola al frente en C#
- 30. ¿Cómo puedo usar la API de accesibilidad de Cocoa para detectar que se traiga una ventana al frente?