b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C#鼠标钩子 带你走出Form的区域限制

电脑杂谈  发布时间:2019-12-09 13:02:36  来源:网络整理

鼠标钩子 下载_鼠标全局钩子_鼠标 钩子

记一次鼠标钩子的使用

惰性啊,好久没写东西了,但是最近这东西太重要,所以决心记出来,后续可以说说。

第一个提示 enter local portbase: ,意思更清楚,一个主机端口,我键入了8989,然后换行,第二个提示 enter the destination ip address 输入目标ip地址,我输入了127.0.0.1本机嘛. 第三个提示 enter the destionation port 目标端口,直接键入8888.然后回车再来个提示number of packets you wish to be sent: 你想发送多少个包,我想发送10个就输入10吧,回车. 此时错误来了:error: the specified port base is not an even number,主机端口错了...怎么回事.关了再来 输入9999 127.0.0.1 8888 10 问题还是一样.这就尴尬了,源码的难题吗,看了一个源码貌似例子:有一个form,form里有个textbox,我们想使用户在textbox里输入的之后,不管敲键盘的那个键,textbox里显示的一直为“a”,这时我们就可以借助钩子鼠标消息,先往windows的钩子链表中加入一个自己写的钩子鼠标消息,只要一按上键盘都会造成一个键盘消息,我们的钩子在这个消息放到textbox之前先截获它,让textbox显示一个“a”,之后结束这个消息,这样textbox得到的总是“a”,这时我们就可以借助钩子鼠标消息,先往windows的钩子链表中加入一个自己写的钩子鼠标消息,只要一按上键盘都会造成一个键盘消息,我们的钩子在这个消息放到textbox之前先截获它鼠标 钩子,让textbox显示一个“

顾名思义,围绕着鼠标的操作而进行的,提前附上鼠标的相关Intptr值:

private const int WM_MOUSEMOVE = 0x200;

private const int WM_LBUTTONDOWN = 0x201;

private const int WM_RBUTTONDOWN = 0x204;

private const int WM_MBUTTONDOWN = 0x207;

鼠标钩子 下载_鼠标 钩子_鼠标全局钩子

private const int WM_LBUTTONUP = 0x202;

private const int WM_RBUTTONUP = 0x205;

private const int WM_MBUTTONUP = 0x208;

private const int WM_LBUTTONDBLCLK = 0x203;

private const int WM_RBUTTONDBLCLK = 0x206;

private const int WM_MBUTTONDBLCLK = 0x209; 十六进制的值,注意和十进制之间的转换

钩子源码网上好多就不敲了,使用过程简单说一下:

创建对象

鼠标钩子 下载_鼠标 钩子_鼠标全局钩子

安装钩子

绑定事件

卸载钩子(释放资源)

钩子里有这么一段代码鼠标 钩子,说下用的之后存在的坑:

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode < 0)

鼠标 钩子_鼠标钩子 下载_鼠标全局钩子

{

return win32api.callnexthookex(hhook, ncode, wparam, lparam)return callnexthookex(hhook, ncode, wparam, lparam)return::callnexthookex(hhook,ncode,wparam,lparam)

}

else

{

//判断能否是鼠标点击 规避鼠标移动函数

if (wParam.ToString("X2") == "201" || wParam.ToString("X2") == "204")

{

鼠标全局钩子_鼠标钩子 下载_鼠标 钩子

MouseButtons button = MouseButtons.Left;

var e = new MouseEventArgs(button, 1, point.X, point.Y, 0);

MouseClickEvent?.Invoke(this, e);

this.point = new point(mymousehookstruct.pt.x, mymousehookstruct.pt.y) mouseeventargs e = new mouseeventargs(button, clickcount, mymousehookstruct.pt.x, mymousehookstruct.pt.y, delta) e = new mouseeventargs(button, doubleclickcount, mymousehookstruct.pt.x, mymousehookstruct.pt.y, delta)

//return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

return default(int);

}

}

还有用键盘钩子截获鼠标右键消息来超过目的,这里应该切记一点,当鼠标单击释放时菜单就会跳出(由于起初只截获了鼠标按上的消息,程序仍然不灵,一度怀疑用钩子实现的可能性,哎,细心细心啊)低级鼠标钩子跟低级屏幕钩子一样,只不过它截获的是鼠标事件,也有个普通鼠标钩子(wh_mouse),和低级鼠标钩子的差别参考低级键盘钩子跟普通键盘钩子的差别api_释放平台钩子 (鼠标钩子)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-132943-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 黑牢之希娜
        黑牢之希娜

        美国威胁恐吓伊拉克没用的

      • 朱娅
        朱娅

        我们的烊烊小王子

      每日福利
      热点图片
      拼命载入中...