如何使用鼠标指针和键盘快捷键捕获文本?

我想使用鼠标指针和键盘快捷键使用C#或java(如babylon )从打开的窗口捕获文本,那么我需要知道什么以及如何实现它?

我需要使用哪些库? 或者我可以使用winapi吗?

使用脚本语言创建您想要执行的草稿。

您可以使用AutoHotKeyAutoIt等程序。 请注意,包括自动记录器在内,可以为您提供基本的草稿。 您可以将这些脚本编译为可执行文件,并使用Shell Execute( c# ; java (exec))从C#或Java调用它们,或者作为新的Process( c# ; java (进程构建器))运行。 后者是首选。

下面是一个如何将键“暂停”映射到从屏幕中选择文本的function,复制它并使用AutoHotKey将其粘贴到其他位置的示例。 Shift + left click用于背景以选择所有文本。 请注意,这是最简单的示例,并且不会通过其指针调用窗口并使用固定位置(并且仅适用于一个分辨率)。

 HotKeySet("{PAUSE}", "getInput") While 1 Sleep(100) Wend Func getInput() MouseClick("left",272,241,1) Sleep(100) MouseClick("left",272,241,1) Send("{SHIFTDOWN}") MouseClick("left",272,241,1) MouseClick("left",529,242,2) Send("{SHIFTUP}{CTRLDOWN}c{CTRLUP}") MouseClick("left",656,42,1) Sleep(100) MouseClick("left",696,42,1) Send("{CTRLDOWN}a") Send("{DELETE}") Send("{CTRLDOWN}v{CTRLUP}") MouseClick("left",1178,44,1) EndFunc 

使用Java。

Java包含Robot类,为此。

此类用于生成本机系统输入事件,以用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。 Robot的主要目的是促进Java平台实现的自动化测试。

使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。 例如,Robot.mouseMove实际上将移动鼠标光标而不是仅生成鼠标移动事件。

请注意,某些平台需要特殊权限或扩展才能访问低级输入控件。 如果当前平台配置不允许输入控件,则在尝试构造Robot对象时将抛出AWTException。 例如,如果X服务器不支持(或未启用)XTEST 2.2标准扩展,则X-Window系统将抛出exception。

将Robot用于非自检的应用程序应该优雅地处理这些错误情况。

您可以自己定制如何使用机器人,但一般方式:

 import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class Tester { public static void doLeftMouseClick(Robot r, int x, int y) { r.mouseMove(x, y); r.mousePress(InputEvent.BUTTON1_MASK); r.mouseRelease(InputEvent.BUTTON1_MASK); } public static void doLeftMouseClickEvent(Robot r, int x, int y, int nr) { r.mouseMove(x, y); if (nr == 1) r.mousePress(InputEvent.BUTTON1_MASK); else r.mouseRelease(InputEvent.BUTTON1_MASK); } public static void main(String args[]) throws Exception { Robot r = new Robot(); doLeftMouseClick(r, 272, 241); r.delay(1000); doLeftMouseClick(r, 272, 241); r.keyPress(KeyEvent.SHIFT_MASK); doLeftMouseClickEvent(r, 272, 241, 1); doLeftMouseClickEvent(r, 529, 242, 2); r.keyRelease(KeyEvent.SHIFT_MASK); r.keyPress(KeyEvent.CTRL_MASK); r.keyPress(KeyEvent.VK_C); r.keyRelease(KeyEvent.CTRL_MASK); // etc. } } 

更多java2s上的机器人示例:( 链接 )

  1. Robot:createScreenCapture(Rectangle screenRect)
  2. Robot:getPixelColor(int x,int y)
  3. 机器人:keyPress(int keycode)
  4. Robot:keyRelease(int keycode)
  5. 机器人:mouseMove(int x,int y)
  6. 机器人:mousePress(int按钮)
  7. 机器人:mouseRelease(int按钮)
  8. 机器人:mouseWheel(int wheelAmt)

使用C#。

无数的解决方案。 只需谷歌 “ 测试自动化c# ”或“ 间谍c# ”。

MSDN: SendKeys
MSDN: 如何:在代码中模拟鼠标和键盘事件

您可以使用Windows API,但它需要一些繁琐的工作。 你不想这样做,你真的不这样做,但如果你这样做,那么一定要看看:

我建议你使用inputsimulator 。 例:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; // add reference to following using WindowsInput; using System.Windows.Forms; using System.Drawing; namespace ConsoleApplicationTester { class Program { public static void doLeftMouseClick(int x, int y) { Cursor.Position = new System.Drawing.Point(x, y); InputSimulator.SimulateKeyPress(VirtualKeyCode.LBUTTON); } public static void doLeftMouseClickEvent(int x, int y, int nr) { Cursor.Position = new Point(x, y); if(nr==1) InputSimulator.SimulateKeyDown(VirtualKeyCode.LBUTTON); else InputSimulator.SimulateKeyUp(VirtualKeyCode.LBUTTON); } static void Main(string[] args){ doLeftMouseClick( 272, 241); System.Threading.Thread.Sleep(100); doLeftMouseClick( 272, 241); InputSimulator.SimulateKeyDown(VirtualKeyCode.MENU); doLeftMouseClickEvent(272, 241, 1); doLeftMouseClickEvent(529, 242, 2); InputSimulator.SimulateKeyUp(VirtualKeyCode.MENU); InputSimulator.SimulateKeyDown(VirtualKeyCode.CONTROL); InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_C); InputSimulator.SimulateKeyUp(VirtualKeyCode.CONTROL); // etc. } } }