C# 如何模拟鼠标左键点击低层,让微软虚拟键盘接受呢?

C# 如何模拟鼠标左键点击低层,让微软虚拟键盘接受呢?,c#,c++,driver,C#,C++,Driver,我的任务是在web浏览器java应用程序中自动填写一些表单 但是Java可以避免这种自动化。它具有防止使用AutoIt填充数据的保护。由于这种保护,有时Java表单中的数据填充不正确,因此无法实现自动化过程 然后我尝试使用Microsoft虚拟键盘,它可以很好地与Java表单配合使用。然而,它也有防止AutoIt的保护,当我尝试使用AutoIt在虚拟键盘上生成鼠标点击时,这是行不通的。按键根本没有按下 因此,我希望以某种方式编写一个小的exe文件,只需在硬件级别上单击鼠标即可生成。此文件应始终在

我的任务是在web浏览器java应用程序中自动填写一些表单

但是Java可以避免这种自动化。它具有防止使用AutoIt填充数据的保护。由于这种保护,有时Java表单中的数据填充不正确,因此无法实现自动化过程

然后我尝试使用Microsoft虚拟键盘,它可以很好地与Java表单配合使用。然而,它也有防止AutoIt的保护,当我尝试使用AutoIt在虚拟键盘上生成鼠标点击时,这是行不通的。按键根本没有按下

因此,我希望以某种方式编写一个小的exe文件,只需在硬件级别上单击鼠标即可生成。此文件应始终在后台运行,并且不从活动窗口中调整焦点。这将允许我使用虚拟键盘来填充java表单

我已经找到了,但我找不到按语法调用鼠标左键的方法。我只能用GlovePIE将一些键盘键重新映射为鼠标单击

<>我还阅读了C++中的按键和事件释放,但是我担心虚拟键盘可能会对它产生保护。我也不知道如何编写正确的C++代码来使用按键和键释放来生成鼠标点击。 编辑

#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
    }
}
#包括
#包括
int\uuu stdcall WinMain(HINSTANCE HINSTANCE,
HINSTANCE HPPrevenstance,
LPTSTR lpCmdLine,
int cmdShow)
{
无效单击(){
INPUT={0};//输入结构
//左下
input.type=输入\鼠标;
input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;//鼠标左键按下
SendInput(1,&input,sizeof(input));//调用SendInput,传入输入以单击
睡眠(1);
//左起
零内存(&input,sizeof(input));//清除输入
input.type=输入\鼠标;
input.mi.dwFlags=MOUSEEVENTF_LEFTUP;//鼠标左键向上
SendInput(1,&input,sizeof(input));//调用SendInput,传入input以取消单击
}
}

这是点击和释放鼠标左键的C++ Windows API代码。这是你可能想要处理的最低级别。


SendInput上的MSDN文档也可能有用:

asqapro,谢谢您的回答。我真的很感谢你的帮助。但你们能回顾一下我在问题编辑部分发布的代码吗?这是我的第一个C++程序,很难正确地完成它。生成失败时出现错误:“WinMain”:无法重载函数,本地函数定义非法,IntelliSense:应为“;”如果有人能快速回答我写的代码有什么问题,我会非常感激。今天是星期六,我们计划今天进行维护,因为这对我们来说非常方便。您使用的是什么IDE/编译器?int main(){}应该可以工作。只是好奇,因为您已经同时提到了autoit和java。你试过了吗?
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
}