本文给大家分享的是使用C#实现鼠标钩子功能,程序已能获取鼠标坐标,其他就没别的功能了,有需要的小伙伴参考下吧。
C#实现的鼠标钩子,可以获取鼠标在屏幕中的坐标,记得要以管理员权限运行才行
复制代码代码如下:
使用系统;
使用系统。集合。泛型;
使用系统。组件模型;
使用系统。数据;
使用系统。绘图;
使用系统100 . Linq
使用系统。反思;
使用系统运行时。InteropServices
使用系统。文本;
使用系统窗户。形式
命名空间app01
{
公共分部类表单1:表单
{
公共委托int HookProc(int nCode,IntPtr wParam,int ptr lParam);
//定义钩子句柄
public static int hHook=0;
//定义钩子类型
公共建筑国际WH _鼠标_ LL=14
公共HookProc MyProcedure
//安装钩子
[DllImport('user32.dll ',CharSet=CharSet .自动,呼叫约定=呼叫约定.StdCall)]
public static extern int SetWindowsHookEx(int id hook,HookProc lpfn,IntPtr hInstance,int threadId);
//卸载钩子
[DllImport('user32.dll ',CharSet=CharSet .自动,呼叫约定=呼叫约定.StdCall)]
public static extern bool unhook windowshookex(int id hook);
//调用下一个钩子
[DllImport('user32.dll ',CharSet=CharSet .自动,呼叫约定=呼叫约定.StdCall)]
public static extern int CallNextHookEx(int id hook,int nCode,IntPtr wParam,int ptr lParam);
[StructLayout(LayoutKind .连续)]
公共类点
{
public int x;
public int y;
}
[StructLayout(LayoutKind .连续)]
公共类MouseHookStruct
{
公点pt;
公共int hwnd
public int wHitTestCode
public int dwExtraInfo
}
公共表单1()
{
初始化组件();
}
私有void button1_Click(对象发送方,EventArgs e)
{
if (hHook==0)
{
MyProcedure=new HookProc(this .MouseHookProc);
//这里挂节钩子
hHook=SetWindowsHookEx(WH _鼠标_LL,我的过程,编组GetHINSTANCE(程序集GetExecutingAssembly().GetModules()[0]),0);
if (hHook==0)
{
消息框.显示(' SetWindowsHookEx失败');
返回;
}
按钮1。Text='卸载钩子;
}
其他
{
bool ret=UnhookWindowsHookEx(hHook);
if (ret==false)
{
消息框.显示(' UnhookWindowsHookEx失败');
返回;
}
hHook=0;
按钮1。Text='安装钩子;
}
}
public int MouseHookProc(int nCode,IntPtr wParam,IntPtr lParam)
{
MouseHookStruct MyMouseHookStruct=(MouseHookStruct)Marshal .PtrToStructure(lParam,类型为(MouseHookStruct));
if (nCode 0)
{
返回CallNextHookEx(hHook,nCode,wParam,lParam);
}
其他
{
string str caption=' x=' mymousehookstruct。角。x . tostring(' d ')' y=' mymousehookstruct。角。y . tostring(' d ');
这个Text=strCaption。
返回CallNextHookEx(hHook,nCode,wParam,lParam);
}
}
}
}
演示:
以上就是本文所述的全部内容了,希望大家能够喜欢。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。