【发布时间】:2015-02-07 05:52:46
【问题描述】:
我的任务是在 Web 浏览器 Java 应用程序中自动填写一些表单。
但是 Java 可以防止这种自动化。它可以防止使用 AutoIt 填充数据。由于这种保护,有时数据无法正确填写到 Java 表单中,因此自动化过程是不可能的。
然后我尝试使用 Microsoft 虚拟键盘,它适用于 Java 表单。但是,它也具有针对 AutoIt 的保护,当我尝试使用 AutoIt 在虚拟键盘上生成鼠标点击时,这不起作用。键根本没有按下。
因此,我希望以某种方式编写一个只生成单击鼠标的小 exe 文件,但在硬件级别。此文件应始终在后台运行,并且不要从活动窗口中获得焦点。这将允许我使用虚拟键盘来填写 java 表单。
我找到了http://glovepie.org/,但我找不到以编程方式调用鼠标左键的方法。我只能用 GlovePIE 重新映射一些键盘键来单击鼠标。
我还阅读了 C++ 中的 keydown 和 keyrelease 事件,但我担心虚拟键盘可能有针对它的保护。我也不知道如何编写正确的 C++ 代码来使用 keydown 和 keyrelease 生成鼠标点击。
编辑
#include <windows.h>
#include <Winuser.h>
int __stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int cmdShow)
{
void click(){
INPUT input = { 0 }; //INPUT structure
// left down
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //left mouse button down
SendInput(1, &input, sizeof(INPUT)); //call SendInput, pass in input to click
Sleep(1);
// left up
ZeroMemory(&input, sizeof(INPUT)); //clear out input
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //left mouse button up
SendInput(1, &input, sizeof(INPUT)); //call SendInput, pass in input to unclick
}
}
【问题讨论】:
-
只是好奇,因为您同时提到了 autoit 和 java。你试过IUIAutomation吗?