当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用鼠标指针和键盘快捷键捕获文本?》经验,为你挑选了1个好方法。

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

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



1> Margus..:

使用脚本语言创建您要执行的操作的草稿.

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

下面是一个示例,说明如何将键"暂停"映射到从屏幕中选择文本的功能,复制它并使用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系统将抛出异常.

将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上的更多机器人示例:( 链接)

    Robot:createScreenCapture(Rectangle screenRect)

    Robot:getPixelColor(int x,int y)

    机器人:keyPress(int keycode)

    Robot:keyRelease(int keycode)

    机器人:mouseMove(int x,int y)

    机器人:mousePress(int按钮)

    机器人:mouseRelease(int按钮)

    机器人:mouseWheel(int wheelAmt)

使用C#.

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

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

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

http://www.pinvoke.net/default.aspx/user32.mouse_event

http://www.pinvoke.net/default.aspx/user32.sendinput

我建议你使用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.          
        }
    }
}


(-.-)如果你需要详细说明一个问题,可以创建一个新问题...但是解决方案是"Shift +双击"(选择),"控制+ C"(复制)和"控制+ V" (粘贴)或使用剪贴板更改来调用事件.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有