Je veux capturer du texte depuis des fenêtres ouvertes en utilisant un pointeur de souris et un raccourci clavier en utilisant C # ou java (comme babylon ), donc qu’est-ce que j’ai besoin de savoir et comment le mettre en œuvre?
Quelles sont les bibliothèques dont j’ai besoin? ou puis-je utiliser Winapi?
Vous pouvez utiliser des programmes comme AutoHotKey ou AutoIt . Notez que l’enregistreur automatique est inclus, cela vous donne un brouillon de base. Vous pouvez comstackr ces scripts en exécutables et les appeler à partir de C # ou de Java à l’aide de Shell Execute ( c # ; java (exec)) ou à exécuter en tant que nouveau Processus ( c # ; java (processus constructeur)). Ce dernier est préféré.
Voici un exemple de la façon de mapper une touche “pause” à une fonction permettant de sélectionner un texte à l’écran, de la copier et de la coller à un autre endroit à l’aide d’AutoHotKey. Shift + left click
est utilisé sur l’arrière-plan pour sélectionner tout le texte. Notez que ceci est l’exemple le plus simple et n’appelle pas window par son pointeur et utilise des emplacements fixes (et ne fonctionne que pour une résolution).
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 contient la classe Robot
, pour ce faire.
Cette classe est utilisée pour générer des événements d’entrée système natifs à des fins d’automatisation de test, de démonstrations à exécution automatique et d’autres applications nécessitant le contrôle de la souris et du clavier. L’objective principal de Robot est de faciliter les tests automatisés des implémentations de la plate-forme Java.
L’utilisation de la classe pour générer des événements d’entrée diffère de la publication d’événements dans la queue d’événements AWT ou de composants AWT en ce sens que les événements sont générés dans la queue d’entrée native de la plate-forme. Par exemple, Robot.mouseMove déplace le curseur de la souris au lieu de générer simplement des événements de déplacement de la souris.
Notez que certaines plates-formes nécessitent des privilèges spéciaux ou des extensions pour accéder au contrôle des entrées de bas niveau. Si la configuration actuelle de la plate-forme n’autorise pas le contrôle des entrées, une exception AWTException sera levée lors de la tentative de construction d’objects Robot. Par exemple, les systèmes X-Window émettent une exception si l’extension standard XTEST 2.2 n’est pas prise en charge (ou n’est pas activée) par le serveur X.
Les applications qui utilisent Robot à des fins autres que l’autotest doivent gérer ces conditions d’erreur avec élégance.
Vous pouvez personnaliser votre utilisation de Robot, mais de manière générale:
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(Ssortingng 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. } }
Autres exemples de robots sur java2s: ( lien )
Il existe une myriade de solutions. Il suffit de google ” Test Automation c # ” ou ” spy c # “.
MSDN: SendKeys
MSDN: Comment: simuler des événements de souris et de clavier dans du code
Vous pouvez utiliser l’API Windows, mais cela nécessite un travail fastidieux. Vous ne voulez pas faire cela, vous ne voulez vraiment pas, mais si vous le faites, alors vérifiez:
Je vous recommande d’utiliser inputimulator . Exemple:
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(ssortingng[] 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. } } }