SendInput 鼠标点击不起作用

only_youlix only_youlix 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

​
开发环境:WPF   、 Windows 11系统 、Visual Studio 2022 (管理员启动)
想实现一个功能:通过WPF调用user32,模拟鼠标点击,目前通过SetCursorPos和mouse_event函数已经可以实现,鼠标会移动到对应坐标不太友好,想用SendInput实现静默点击。
遇到的问题:SendInput实现静默点击不起作用


   public class MouseSimulator
   {
       // 鼠标事件类型
       [Flags]
       public enum MouseEventFlags
       {
           LeftDown = 0x0002,
           LeftUp = 0x0004,
           MiddleDown = 0x0020,
           MiddleUp = 0x0040,
           RightDown = 0x0008,
           RightUp = 0x0010,
           Wheel = 0x0800,
           XDown = 0x0080,
           XUp = 0x0100
       }
       // 定义鼠标输入结构体
       [StructLayout(LayoutKind.Sequential)]
       public struct MOUSEINPUT
       {
           public int dx;
           public int dy;
           public int mouseData;
           public MouseEventFlags dwFlags;
           public int time;
           public IntPtr dwExtraInfo;
       }
       // 定义输入结构体
       [StructLayout(LayoutKind.Explicit)]
       public struct INPUT
       {
           [FieldOffset(0)]
           public int type;
           [FieldOffset(4)]
           public MOUSEINPUT mi;
       }
       // 导入SendInput函数
       [DllImport("user32.dll", SetLastError = true)]
       static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray)] INPUT[] pInputs, int cbSize);
       // 鼠标模拟单击方法
       public static void SimulateMouseClick(int x, int y)
       {
           // 设置鼠标坐标
           MOUSEINPUT mouseInput = new MOUSEINPUT
           {
               dx = x,
               dy = y
           };
           // 设置鼠标点击事件
           mouseInput.dwFlags = MouseEventFlags.LeftDown;
           INPUT inputDown = new INPUT
           {
               type = 0,
               mi = mouseInput
           };
           mouseInput.dwFlags = MouseEventFlags.LeftUp;
           INPUT inputUp = new INPUT
           {
               type = 0,
               mi = mouseInput
           };
           // 模拟鼠标点击事件
           INPUT[] inputs = new INPUT[] { inputDown, inputUp };
           SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
       }
     
   }

 

​

...全文

相关推荐

delphi10.1通过SendInput模拟鼠标移动点击的示例

delphi10.1通过SendInput模拟鼠标移动点击的示例,给初学者的

伤影

使用Sendinput函数模拟鼠标键盘操作

文章目录1.程序说明2.分析3.SendInput 1.程序说明 vs2008编译 代码在gayhub,链接 主要是使用SendInput函数,所以要好好看参数说明,建议MSDN走一波 2.分析 以鼠标为例,按左键,可以分成2个步骤: 1.鼠标左键按下 2.鼠标左键弹起 所以,模拟一个按键的动作,需要input2个事件,一般是key_down,key_up 怎么模拟组合键呢?比如说ct...

一只懒虫

C# SendInput 实现模拟鼠标操作

     本文是我学习C#模拟鼠标操作的实践心得。想实现一个模拟鼠标在屏幕上的Flash区域内逐行单击操作,来一一收获金币。c#中没有提供相关的方法,但是Win API中有,通过一番查找试验,使用SendInput方法实现。此过程中,学会了如何在C#中调用WINDOWS API,如何使用SendInput,像素坐标和绝对坐标之间的转换等。积累经验就是看帮助一定要看英文的,中文的总是少些东西,多些别扭。调试的时候,对于不熟悉的东西,先不要急于做进程序里,先用小例子一点一点地试。例如先试验怎么单击一个点,成功再

whongwei

C# SendInput 模拟鼠标操作的实现方法

C# SendInput 模拟鼠标操作的实现方法,需要的朋友可以参考一下

weixin_38591291

c#实现鼠标在指定的坐标点击屏幕

vs2010环境,采用c#实现了,鼠标自动在屏幕某个坐标上进行点击操作。

shuangtaqibing
评论
收藏 已收藏
分享
返回顶部
only_youlix
WPF/Silverlight 8,757 成员 12,031 内容