问题标签 [awtrobot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2683 浏览

java - 如何在不引发 AWTException 的情况下创建全局 Robot 变量?

我正在尝试Robot在 Java 类中创建一个全局变量而不抛出AWTException. 我能想出的唯一方法是抛出异常。我需要它是全局的原因是因为我需要Robot在类的其他方法中使用相同的变量。

如果我不抛出异常,我需要在每个方法中声明一个新的 Robot。

有人可以帮助我吗?

0 投票
8 回答
27844 浏览

python - 如何使用 Python 控制键盘和鼠标?

如何在 Python 中控制鼠标和键盘?

这个想法是与Java中的Robot() 类做同样的事情。可以说:将鼠标从这里移到这里,单击那里,写下屏幕上的任何内容。

对于 Windows,有 win32api,但我主要使用 Linux。

对于 Linux,有 Xlib,但它也适用于键盘吗?(发现只参考鼠标)

有没有跨平台的解决方案?(Linux、Windows 甚至 OS X 都会很棒。)

0 投票
2 回答
1867 浏览

java - 使用 java.awt.Robot 测试键盘输入

我有一个使用 java.awt.Robot 练习自定义 Swing 组件的测试。我想在我们的构建服务器中运行测试,但是构建服务器在锁定的 Windows 机器上运行,并且 Robot.keyPress(char) 在屏幕锁定的情况下不起作用。我发送的击键有时是向下箭头和退格键,因此将它们直接发送到文档没有帮助。

目前,如果键盘输入在第一次尝试时不起作用,我只是使用 junit 的 Assume 来跳过测试,但我想启用这些测试。我会假设有人正在对 Swing gui 运行这些类型的测试。有任何想法吗?

0 投票
7 回答
4487 浏览

java - Java 应用程序在用户空闲 10 分钟后使屏幕显示无响应

我编写了一个 Java 应用程序,允许用户编写鼠标/键盘输入脚本(JMacro,链接不重要,仅供好奇)。我个人使用该应用程序在我睡觉时在一夜之间自动执行在线游戏中的角色动作。不幸的是,我早上总是回到电脑前,发现它没有响应。经过进一步测试,我发现我的应用程序导致计算机在大约 10 分钟的用户空闲时间后变得无响应(即使应用程序本身模拟用户活动)。我似乎无法确定问题所在,所以我希望其他人可能会建议在哪里查看或可能导致问题的原因。

相关症状及特点:

  • 用户空闲 10 分钟后出现无响应
  • 用户仍然可以在屏幕上移动鼠标指针
  • 除鼠标外的所有内容都显示为冻结...鼠标单击无效,并且没有应用程序更新其显示,包括 Windows 7 桌面
  • 我将任务管理器与应用程序一起打开了一夜,所以我可以在屏幕冻结之前看到最后一个任务管理器图像......Java应用程序处于正常的CPU /内存使用率,总CPU使用率仅为~1%
  • 移动鼠标后(也就是说,用户从空闲状态回来),30分钟内屏幕图像再次开始更新(这很偶然……有时10分钟,有时2小时后没有结果)
  • 用户可以 CTRL-ALT-DEL 进入 Windows 7 的 CTRL-ALT-DEL 屏幕(暂停 30 秒后)。用户仍然可以移动鼠标指针,但单击任何按钮选项会导致屏幕再次冻结
  • 在一些非常罕见的情况下,系统永远不会死机,我会在早上以完全响应的方式返回它
  • Java 应用程序会在半夜自动停止输入脚本,因此 Windows 7 检测到“真正的”空闲状态并将显示器转为待机模式……当我早上醒来时手动移动鼠标,它们成功退出,即使桌面显示仍显示为冻结状态

鉴于问题的症状和特征,好像 Java 应用程序导致登录用户的桌面显示停止更新,包括任何正在运行的应用程序。

使用的编程概念和 Java 包:

  • 多线程
  • 标准输出错误被重新路由到 javax.swing.JTextArea
  • 该应用程序使用 Swing GUI
  • awt.Robot(非常频繁地使用)
  • awt.PointerInfo
  • awt.MouseInfo

系统规格:

  • 视窗 7 专业版
  • Java 1.6.0 u17

总之,我应该强调我不是在寻找任何具体的解决方案,因为我不是在问一个非常具体的问题。我只是想知道在使用我正在使用的 Java 库时是否有人遇到过类似的问题。我也很乐意为尝试进一步查明导致我的问题的原因提出任何建议。

谢谢!

罗斯

PS,如果我在继续调试时设法偶然发现其他任何东西,我会发布更新/答案。

更新:我的应用程序涉及多线程进程,每个进程都初始化自己的 Robot 对象并异步创建输入事件。我将应用程序重构为仅包含一个机器人单例对象,但不同的进程仍然异步调用输入命令。据我所知,这并没有改变我的应用程序的行为。我的下一步可能是围绕机器人单例创建一个同步包装器,看看是否有帮助,但鉴于症状,我不知道为什么会这样。

0 投票
2 回答
4202 浏览

java - 虚拟键盘的Java输入法

我在为虚拟键盘实现输入法时遇到问题。目前我正在使用机器人类从虚拟键盘向任何应用程序发送输入。但是为此我需要创建 key-code 和 unicode 的映射,这在不同的键盘布局上不一致,我可以直接将 UNICODE 传递给使用输入法的任何应用程序,而不用担心 keycode 和 unicode 之间的映射。

任何有用的链接或示例代码都会很有用。

它是一个简单的 Java 程序,它始终位于任何应用程序之上并作为屏幕键盘工作。使用鼠标同时按下键盘的任何按钮(键),相应的字符将被输入到下面运行的应用程序中。这非常适合英文字母。我在为 unicode 做事时遇到了问题。


找到下面的代码片段

0 投票
2 回答
1640 浏览

java - 某些软件正在运行时,Java Robot 密钥活动似乎停止工作

我正在编写一个 Java 应用程序,以便在一夜之间自动完成在线游戏中的角色动作(具体来说,它在最终幻想 XI 中捕鱼)。该应用程序大量使用 java 的 Robot 类来模拟用户键盘输入和检测屏幕某些部分的颜色变化。它还使用多线程和摆动 GUI。

当我在没有运行游戏的情况下对其进行测试时,该应用程序似乎可以完美运行,只需使用屏幕截图触发应用程序响应到记事本中。但由于某种原因,当我真正启动 FFXI 并启动程序时,我所有的键盘和鼠标操作都完全停止工作。程序仍在运行,Robot 类仍然能够读取像素颜色。但是 Robot.keyPress、Robot.keyRelease、Robot.mouseMove、Robot.mousePress 和 Robot.mouseRelease 什么都不做。这是最奇怪的事情——为了测试它,我写了一个简单的循环,它只是不停地输入字母,并专注于记事本。然后我会开始游戏,重新调整记事本的焦点,它什么也不做。然后我会退出游戏,它会立即重新开始工作。

有没有其他人遇到过这样的事情,特定的软件会阻止java的某些功能工作?

此外,为了让这更有趣——去年我编写了一个非常相似的程序,使用相同的类和编程技术来自动治疗游戏中的一方,因为他们正在战斗。去年,该计划运行良好。遇到这些问题后,我挖出了那个旧程序,没有做任何更改就运行它,发现它也有同样的问题。现在和它工作时的唯一区别:我运行的是 Windows Vista,现在我运行的是 Windows 7,并且已经发布了几个新的 Java 版本以及 FFXI 版本。

这到底是怎么回事?(如果有人需要查看我的源代码,请通过 mikejturley@gmail.com 给我发电子邮件。我正在努力保密。)

0 投票
4 回答
5352 浏览

java - 如何模拟对 JTextField 的单击?相当于 JButton doClick()?

我正在开发一个 Java 项目,需要一个按键来模拟对 JTextField 的单击。我正在寻找的是 JButton doClick() 方法的等效项。

我试图让按键“输入”执行与单击 JTextField 完全相同的功能。

不确定要提供哪些其他信息。提前致谢。

0 投票
2 回答
966 浏览

java - 主题:到底是什么让他们感到困惑?两个带有鼠标监听器的 Runnable

我有一个 JWindow 和一个 JFrame 都可以运行,并且都实现了鼠标侦听器。我要为我的一个项目做很多测试,为了简化它,我希望能够自动化其中的大部分,所以我开始了自己的鼠标记录器和回放器(使用 Java 机器人类)。

有点像简化的 AutoHotKey 或 AutoIt 的东西......但它会在我的 Ubuntu 机器以及我的 Windows 机器上运行!!!

我制作的 JWindow 是半透明的,覆盖了整个屏幕,当您单击它时它会消失并重播对后面对象的单击然后重新出现。这就是录音过程。当用户右键单击时,设置为不可见并重播记录的操作。

在重播期间,我希望该选项能够退出整个应用程序,因此我认为最好的方法是让 JFrame 和 JWindow 可运行。

JFrame 只是他们从应用程序中提供一个关闭选项。

所以,在我的主要课程中,我有

我的理解是 Recorder 和 GUI 是可运行的对象,它们通过新的 Thread 命令制成线程。当我使用 .start() 时,我开始执行线程,系统从这里决定在任何特定时间运行哪个线程。

到 Recorder 和 GUI 类。

我的应用程序打印出 Recorder,然后 GUI 允许我记录我的事件,然后右键单击 JWindow 以重播它们...

但是当我单击 JFrame 的关闭按钮甚至在框架中单击鼠标侦听器时,它不会退出,直到所有操作都完全重播?

我确实想知道的一件事是我在运行中投入了什么是什么使线程保持运行?所以当 System.out.println(""); 被执行的线程死了?所以我在它们周围尝试了一个while循环,我的应用程序成功打印了

GUI GUI GUI RECORDER RECORDER GUI RECORDER 等

所以我可以看到它们的线程正在同时运行......只是运行之外的所有其他操作似乎都没有被执行......如何在线程执行中包含我的鼠标侦听器等?

0 投票
2 回答
9855 浏览

java - 使用 java.awt.Robot 模拟退格键

用 模拟退格键似乎存在问题java.awt.Robot

该线程似乎证实了这一点,但它没有提出解决方案。

这有效:

这不会:

有任何想法吗?

0 投票
1 回答
812 浏览

java - 如何在显示 UAC 对话框时捕获屏幕截图?

我正在使用 Java Robot 类截屏,我的问题是在 W7 中显示 UAC 对话框时(我右键单击任何应用程序并选择以管理员身份运行)它不会出现在屏幕截图中或整个屏幕只是黑色的。以管理员权限或作为服务运行我的应用程序并不能解决问题。

有谁知道该怎么做才能让我即使在显示 UAC 时也能捕获屏幕?