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 的入门。到目前为止,它只支持 LeftClick 和 RightClick,但借助以下两个链接,您可以轻松地使用 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 添加鼠标移动监听的主要内容,如果未能解决你的问题,请参考以下文章