微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java将焦点设置为Windows中的非Java应用程序

我想写一个为Windows中的非Java应用程序创buildinput的应用程序。 使用Robot类很容易生成input,但是我需要将焦点设置到另一个应用程序的文本框并在那里input文本。

不要担心,我不会试图写一些恶意的东西,我只是想用Java来“扩展”一个用Delphi编写的旧应用程序。

开源跨平台的应用程序开发IDE?

奇怪的用户代理开关

用可运行Jar创buildJava中的UTF-8文件

为什么这个服务不会启动

Windows 8是否支持System.Device.Location?

CMDOW是一个命令行实用程序,它允许您执行各种窗口操作,如激活/停用,列表,最小化/最大化等。

或者 ,您可以编写一个VBScript来激活另一个应用程序。 例如:

Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.AppActivate("Firefox")

然后使用Java应用程序中的Runtime.exec来执行脚本。

这将帮助您激活另一个应用程序。

但是 ,如果您想要专注于其他应用程序中的文本框并编写一些文本,将会变得更加困难。

检测一个特殊的应用程序,并把它放在前面可能需要一个本地帮助器,但是暂时你可以发送ALT + TAB来激活“下一个”应用程序

这工作:

public void switchFocus() { try { Robot r = new Robot(); r.keyPress(KeyEvent.VK_ALT); r.keyPress(KeyEvent.VK_TAB); r.keyrelease(KeyEvent.VK_ALT); r.keyrelease(KeyEvent.VK_TAB); } catch(AWTException e) { // handle } }

你只需要实现一个方便的方法来映射字符(从字符串)到关键事件值(或找到一些现有的解决方案)

配置一个延迟,否则将无法正常工作:

Robot r = new Robot(); r.keyPress(KeyEvent.VK_ALT); r.keyPress(KeyEvent.VK_TAB); r.delay(10); //set the delay r.keyrelease(KeyEvent.VK_ALT); r.keyrelease(KeyEvent.VK_TAB);

在Mac上,可以用AppleScript来完成。 AppleScript被集成到系统中,所以它将始终是功能性的。 https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html

你只需要检测你是在Mac上,并有应用程序的名称

Runtime runtime = Runtime.getRuntime(); String[] args = { "osascript","-e","tell app "Chrome" to activate" }; Process process = runtime.exec(args);

您需要为应用程序添加足够的延迟才能完全初始化并获得焦点。

这里有一个基本的工作示例… Andreas_D是正确的,你需要模拟系统键来切换程序…(在Windows上的Alt + Tab ,OS X上的Cmd + Tab )

import java.awt.*; import static java.awt.event.KeyEvent.*; import java.io.IOException; public class RobotSample { //https://stackoverflow.com/questions/4782231 private static Integer[] KEY_CODES = { VK_S,VK_T,VK_A,VK_C,VK_K,VK_O,VK_V,VK_E,VK_R,VK_F,VK_L,VK_W,VK_DECIMAL,VK_M,VK_SLASH,VK_Q,VK_U,VK_S,VK_I,VK_N,VK_4,VK_7,VK_8,VK_2,VK_3,VK_1,VK_ENTER }; public static void main( String[] args ) throws IOException { try { Robot robot = new Robot(); Runtime runtime = Runtime.getRuntime(); runtime.exec( "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ); robot.keyPress( VK_ALT ); robot.keyPress( VK_TAB ); robot.keyrelease( VK_ALT ); robot.keyrelease( VK_TAB ); //Chill a sec... robot.delay( 1000 ); for(int i = 0; i < KEY_CODES.length; ++i) { robot.keyPress( KEY_CODES[i] ); robot.keyrelease( KEY_CODES[i] ); robot.delay( 80 ); } } catch( AWTException e ) { e.getMessage(); } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐