2015-08-23 37 views
1

原谅我,如果这个问题已经被问了很多次,但看着了许多的问题后,我仍然无法找到一个明确的答案。我有一个机器人类,它发送键盘输入,就像在Eclipse中运行它的宏一样。的机器人,最小化应用程序运行

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 


public class Macro 
{ 
    public static void main (String args[]) throws AWTException, InterruptedException 
    { 
     Robot r = new Robot(); 
     while(true) 
     { 
       r.keyPress(KeyEvent.VK_V); 
       r.keyRelease(KeyEvent.VK_V); 
       r.delay(500); 
       r.keyPress(KeyEvent.VK_T); 
       r.KeyRelease(KeyEvent.VK_T); 
       r.delay(500); 
     } 
    } 
} 

假设这种情况下,其中运行的机器人,打开记事本,把重点放到记事本,程序将正常工作,打字键到记事本中。但是,如果我想最大限度地减少记事本,打开谷歌,机器人将开始在谷歌输入而不是记事本。 我想要的是,机器人将只运行在我选定的程序中(例如记事本),并且在所选程序最小化时也运行。这样我的机器人就可以在最小化的程序中运行,并且我可以在没有机器人影响我的情况下在我的电脑中执行其他操作。

我听说场景中它在Java中不可能的,我有这个在本地代码,但其他人说,这是可能的扩展如JNativeHook或某些类型的ActionListeners的。我钻研了JNativeHook,但它似乎并没有解决我确切的问题。 JNativeHook能够在Ecipse被最小化时给键盘输入检测,而不是Eclipse检测我的键盘输入,我想要一个我选择的程序(例如记事本)来检测键盘输入。

第二个问题是,我不希望“全球性”的检测,而是检测过滤,仅我的机器人类。因此,它将能够将检测与我的打字和机器人打字区分开来。即使我能解决前两个问题。第三个问题是我希望机器人只在选定的应用程序中输入内容(例如记事本),而不会干扰我在做其他事情时正在输入的内容。

是我想用Eclipse/java实现可能是什么?有其他选择吗?任何输入是不胜感激。

+0

而不是给输入事件记事本文件,你可以只给输出到文件。 – afzalex

+0

感谢您的输入,我对Java比较陌生,如果通过输出,你的意思是使用类似于printwriter的东西并创建一个新的.txt文件来打印.txt中的内容?我确实相信记事本就是这种情况。然而,这个程序的目的是创建一个可以在其他程序的后台运行的宏(记事本只是一个例子),程序(如游戏中的按键必须以某种顺序运行一段时间)仍然允许用户在不受机器人干扰的情况下执行其他任务。 – Bao

回答

0

简短的回答是这是不可能的,即使有原生API。

您可以使用特定于平台的API和JNA来检测当前哪个窗口有焦点并且只在特定情况下提供事件,但是如果不支持焦点,将事件传递到最小化窗口的文本区域将会非常棘手平台。

相关问题