winform 添加鼠标移动监听

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform 添加鼠标移动监听相关的知识,希望对你有一定的参考价值。

winform 添加鼠标移动监听 窗口没有任何的按钮, 只有显示的数据, 现在我移动鼠标。 要显示关闭按钮。 不知道怎么写。。。 跪求代码。。麻烦写全

写个定时器,定时判断鼠标的坐标是否改变即可。

具体代码就算了,你自己查API。

简单逻辑,就是 用一个变量把 鼠标当前坐标保存。
定时检测的时候,和这个变量比较,
如果改变,就执行你的逻辑,并把新的值赋值过去即可。追问

如果还要查。那我何必还在这里提问呢。 你说是吧。 我要的是代码。。。代码。。。

参考技术A 上源码网站搜搜,很多这样的例子 参考技术B

如何在winform和wpf中以编程方式鼠标移动、单击、右键单击和按键等?

【中文标题】如何在winform和wpf中以编程方式鼠标移动、单击、右键单击和按键等?【英文标题】:How to programmatically mouse move,click,right click and keypress, etc. in winform and wpf? 【发布时间】:2011-07-02 22:30:38 【问题描述】:

如何在 winform 和 wpf 中以编程方式鼠标移动、单击、右键单击和按键等。如果可能,请帮助我编写代码 sn-p。

【问题讨论】:

重印但不完全相同:Injecting Mouse Input in WPF Applications 为什么?使用辅助功能来做你想做的事情可能会更容易。 【参考方案1】:

如果我正确理解了您的问题,那么您想要真正模拟输入。在这种情况下,SendInput 是要走的路。来自this link

PInvoke 到 SendInput – 这是 模拟输入的官方方法。它 通过所有的推动输入 预期的代码路径,并且是 与真实输入无法区分。

使用此功能的简单方法是在 CodePlex 使用 InputSimulator。添加对 InputSimulator.dll 的引用,您可以模拟击键,如

// Tab
InputSimulator.SimulateKeyDown(VirtualKeyCode.TAB);
// Shift+Tab
InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.SHIFT, VirtualKeyCode.TAB);   
// etc.

但是,InputSimulator 还不支持鼠标,但这里是 MouseSimulator 的入门。到目前为止,它只支持 LeftClickRightClick,但借助以下两个链接,您可以轻松地使用 MouseMove 等扩展它。

pinvoke.net: sendinput (user32) How can I emulate mouse events in an application?

鼠标模拟器

public class MouseSimulator

    [DllImport("user32.dll", SetLastError = true)]
    static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);

    [StructLayout(LayoutKind.Sequential)]
    struct INPUT
    
        public SendInputEventType type;
        public MouseKeybdhardwareInputUnion mkhi;
    
    [StructLayout(LayoutKind.Explicit)]
    struct MouseKeybdhardwareInputUnion
    
        [FieldOffset(0)]
        public MouseInputData mi;

        [FieldOffset(0)]
        public KEYBDINPUT ki;

        [FieldOffset(0)]
        public HARDWAREINPUT hi;
    
    [StructLayout(LayoutKind.Sequential)]
    struct KEYBDINPUT
    
        public ushort wVk;
        public ushort wScan;
        public uint dwFlags;
        public uint time;
        public IntPtr dwExtraInfo;
    
    [StructLayout(LayoutKind.Sequential)]
    struct HARDWAREINPUT
    
        public int uMsg;
        public short wParamL;
        public short wParamH;
    
    struct MouseInputData
    
        public int dx;
        public int dy;
        public uint mouseData;
        public MouseEventFlags dwFlags;
        public uint time;
        public IntPtr dwExtraInfo;
    
    [Flags]
    enum MouseEventFlags : uint
    
        MOUSEEVENTF_MOVE = 0x0001,
        MOUSEEVENTF_LEFTDOWN = 0x0002,
        MOUSEEVENTF_LEFTUP = 0x0004,
        MOUSEEVENTF_RIGHTDOWN = 0x0008,
        MOUSEEVENTF_RIGHTUP = 0x0010,
        MOUSEEVENTF_MIDDLEDOWN = 0x0020,
        MOUSEEVENTF_MIDDLEUP = 0x0040,
        MOUSEEVENTF_XDOWN = 0x0080,
        MOUSEEVENTF_XUP = 0x0100,
        MOUSEEVENTF_WHEEL = 0x0800,
        MOUSEEVENTF_VIRTUALDESK = 0x4000,
        MOUSEEVENTF_ABSOLUTE = 0x8000
    
    enum SendInputEventType : int
    
        InputMouse,
        InputKeyboard,
        InputHardware
    

    public static void ClickLeftMouseButton()
    
        INPUT mouseDownInput = new INPUT();
        mouseDownInput.type = SendInputEventType.InputMouse;
        mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN;
        SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));

        INPUT mouseUpInput = new INPUT();
        mouseUpInput.type = SendInputEventType.InputMouse;
        mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTUP;
        SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
    
    public static void ClickRightMouseButton()
    
        INPUT mouseDownInput = new INPUT();
        mouseDownInput.type = SendInputEventType.InputMouse;
        mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTDOWN;
        SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));

        INPUT mouseUpInput = new INPUT();
        mouseUpInput.type = SendInputEventType.InputMouse;
        mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_RIGHTUP;
        SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
    

【讨论】:

以上是关于winform 添加鼠标移动监听的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 鼠标移动上去,弹出下拉

C#的winform. 有自动隐藏的控件吗?鼠标移过去再展开的

winform 窗体移动事件 同时移动两个窗体

C# winform鼠标移动到窗口给窗口加边框并获得句柄

C#winform怎么可以让鼠标移动到控件时显示

c# 在 winform 开发中,当鼠标移动到某图片时,该图片自动隐藏,移开时,又显示出来。求代码。