8

開いているウィンドウからマウス ポインターと C# または Java ( babylonなど) を使用したキーボード ショートカットを使用してテキストをキャプチャしたいので、知っておくべきこととその実装方法を教えてください。

使用する必要があるライブラリは何ですか? またはwinapiを使用できますか?

4

1 に答える 1

13

スクリプト言語を使用して、やりたいことのドラフトを作成します。

AutoHotKeyAutoItなどのプログラムを使用できます。基本的なドラフトを提供する自動レコーダーが含まれていることに注意してください。これらのスクリプトを実行可能ファイルにコンパイルし、Shell Execute( c# ; java(exec))を使用してC#またはJavaから呼び出すか、新しいプロセス( c# ; java(プロセスビルダー))として実行できます。後者が好ましい。

これは、キー「pause」を画面からテキストを選択し、それをコピーしてAutoHotKeyを使用して別の場所に貼り付ける関数にマップする方法の例です。Shift + left clickすべてのテキストを選択するために背景で使用されます。これは最も単純な例であり、ポインタによってウィンドウを呼び出さず、固定された場所を使用することに注意してください(1つの解像度でのみ機能します)。

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がスローされます。たとえば、XTEST 2.2標準拡張機能がXサーバーでサポートされていない(または有効になっていない)場合、X-Windowシステムは例外をスローします。

セルフテスト以外の目的でRobotを使用するアプリケーションは、これらのエラー状態を適切に処理する必要があります。

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. ロボット:createScreenCapture(Rectangle screenRect)
  2. ロボット:getPixelColor(int x、int y)
  3. ロボット:keyPress(int keycode)
  4. ロボット:keyRelease(int keycode)
  5. ロボット:mouseMove(int x、int y)
  6. ロボット:mousePress(intボタン)
  7. ロボット:mouseRelease(intボタン)
  8. ロボット:mouseWheel(int WheelAmt)

C#を使用します。

無数の解決策があります。「TestAutomationc 」または「spyc #」をグーグルで検索してください。

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.          
        }
    }
}
于 2010-10-30T19:11:37.550 に答える