我想使用 C# 或 java(如babylon)使用鼠标指针和键盘快捷键从打开的窗口中捕获文本,那么我需要知道什么以及如何实现它?
我需要使用哪些库?或者我可以使用winapi吗?
我想使用 C# 或 java(如babylon)使用鼠标指针和键盘快捷键从打开的窗口中捕获文本,那么我需要知道什么以及如何实现它?
我需要使用哪些库?或者我可以使用winapi吗?
您可以使用AutoHotKey或AutoIt等程序。请注意,您包括自动录音机,它为您提供基本草稿。您可以将这些脚本编译为可执行文件,并使用 Shell Execute ( c# ; java (exec) )从 C# 或 Java 调用它们或作为新进程 ( c# ; java (process builder) ) 运行。后者是优选的。
这是一个示例,说明如何将键“暂停”映射到从屏幕中选择文本、复制并使用 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 包含Robot
类,可以做到这一点。
此类用于生成本地系统输入事件,用于测试自动化、自运行演示和其他需要控制鼠标和键盘的应用程序。Robot 的主要目的是促进 Java 平台实现的自动化测试。
使用类生成输入事件不同于将事件发布到 AWT 事件队列或 AWT 组件,因为事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove 实际上会移动鼠标光标,而不仅仅是生成鼠标移动事件。
请注意,某些平台需要特殊权限或扩展才能访问低级输入控制。如果当前平台配置不允许输入控制,则在尝试构造 Robot 对象时会抛出 AWTException。例如,如果 X 服务器不支持(或未启用)XTEST 2.2 标准扩展,X-Window 系统将抛出异常。
将 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 上的更多机器人示例:(链接)
有无数的解决方案。只需谷歌“ Test Automation c# ”或“ spy 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.
}
}
}