c# - 如何模拟低电平鼠标左键点击,让微软虚拟键盘接受?

标签 c# c++ driver

我的任务是在 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
    }
}

最佳答案

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
}

这是单击和释放鼠标左键的 C++ Windows API 代码。这是您可能想要处理的最低级别。 SendInput 上的 MSDN 文档也可能有用:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx

关于c# - 如何模拟低电平鼠标左键点击,让微软虚拟键盘接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28379094/

相关文章:

c++ - QWizard::setField:无法写入属性

Windows 虚拟鼠标驱动程序

apache-spark - 区分 Apache Spark 中的驱动程序代码和工作代码

c# - 无法从 NHibernate.Driver.OracleDataClientDriver 创建驱动程序

c# - 我可以在不指定数字的情况下将参数传递给 String.Format 吗?

c++ - 无法正确打印 vector 内容

c++ - 在 C++ 中解析 .dat 文件

c# - 如何从 C# 中的 WinForm.Opacity 中排除控件

C# 套接字与 C++ 套接字,哪个更好?

时间:2019-03-17 标签:c#Linq with complex result