课题C#全局鼠标键盘HookWord下载.docx
《课题C#全局鼠标键盘HookWord下载.docx》由会员分享,可在线阅读,更多相关《课题C#全局鼠标键盘HookWord下载.docx(8页珍藏版)》请在冰豆网上搜索。
publicclassKeyBordHook
{
privateconstintWM_KEYDOWN=0x100;
privateconstintWM_KEYUP=0x101;
privateconstintWM_SYSKEYDOWN=0x104;
privateconstintWM_SYSKEYUP=0x105;
//全局的事件
publiceventKeyEventHandlerOnKeyDownEvent;
publiceventKeyEventHandlerOnKeyUpEvent;
publiceventKeyPressEventHandlerOnKeyPressEvent;
staticinthKeyboardHook=0;
//键盘钩子句柄
//鼠标常量
publicconstintWH_KEYBOARD_LL=13;
//keyboard
hook
constant
HookProcKeyboardHookProcedure;
//声明键盘钩子事件类型.
//声明键盘钩子的封送结构类型
[StructLayout(LayoutKind.Sequential)]
publicclassKeyboardHookStruct
publicintvkCode;
//表示一个在1到254间的虚似键盘码
publicintscanCode;
//表示硬件扫描码
publicintflags;
publicinttime;
publicintdwExtraInfo;
}
//装置钩子的函数
[DllImport("
user32.dll"
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
publicstaticexternintSetWindowsHookEx(intidHook,HookProclpfn,IntPtrhInstance,intthreadId);
//卸下钩子的函数
publicstaticexternboolUnhookWindowsHookEx(intidHook);
//下一个钩挂的函数
publicstaticexternintCallNextHookEx(intidHook,intnCode,Int32wParam,IntPtrlParam);
user32"
)]
publicstaticexternintToAscii(intuVirtKey,intuScanCode,byte[]lpbKeyState,byte[]lpwTransKey,intfuState);
publicstaticexternintGetKeyboardState(byte[]pbKeyState);
publicdelegateintHookProc(intnCode,Int32wParam,IntPtrlParam);
墨认的构造函数构造当前类的实例并自动的运行起来.
publicKeyBordHook()
Start();
//析构函数.
~KeyBordHook()
Stop();
publicvoidStart()
//安装键盘钩子
if(hKeyboardHook==0)
KeyboardHookProcedure=newHookProc(KeyboardHookProc);
hKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().ManifestModule),0);
thrownewException("
SetWindowsHookEx
ist
failed."
);
publicvoidStop()
boolretKeyboard=true;
if(hKeyboardHook!
=0)
retKeyboard=UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook=0;
//如果卸下钩子失败
if(!
(retKeyboard))thrownewException("
UnhookWindowsHookEx
privateintKeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)
if((nCode>
=0)&
&
(OnKeyDownEvent!
=null||OnKeyUpEvent!
=null||OnKeyPressEvent!
=null))
KeyboardHookStructMyKeyboardHookStruct=(KeyboardHookStruct)Marshal.PtrToStructure(lParam,typeof(KeyboardHookStruct));
//引发OnKeyDownEvent
if(OnKeyDownEvent!
=null&
(wParam==WM_KEYDOWN||wParam==WM_SYSKEYDOWN))
KeyskeyData=(Keys)MyKeyboardHookStruct.vkCode;
KeyEventArgse=newKeyEventArgs(keyData);
OnKeyDownEvent(this,e);
//引发OnKeyPressEvent
if(OnKeyPressEvent!
wParam==WM_KEYDOWN)
byte[]keyState=newbyte[256];
GetKeyboardState(keyState);
byte[]inBuffer=newbyte[2];
if(ToAscii(MyKeyboardHookStruct.vkCode,
MyKeyboardHookStruct.scanCode,
keyState,
inBuffer,
MyKeyboardHookStruct.flags)==1)
KeyPressEventArgse=newKeyPressEventArgs((char)inBuffer[0]);
OnKeyPressEvent(this,e);
//引发OnKeyUpEvent
if(OnKeyUpEvent!
(wParam==WM_KEYUP||wParam==WM_SYSKEYUP))
OnKeyUpEvent(this,e);
returnCallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
这个类可以让你得到一个在运行中程序的所有鼠标事件
并且引发一个带MouseEventArgs参数的.NET鼠标事件以便你很容易使用这些信息
publicclassMouseHook
privateconstintWM_MOUSEMOVE=0x200;
privateconstintWM_LBUTTONDOWN=0x201;
privateconstintWM_RBUTTONDOWN=0x204;
privateconstintWM_MBUTTONDOWN=0x207;
privateconstintWM_LBUTTONUP=0x202;
privateconstintWM_RBUTTONUP=0x205;
privateconstintWM_MBUTTONUP=0x208;
privateconstintWM_LBUTTONDBLCLK=0x203;
privateconstintWM_RBUTTONDBLCLK=0x206;
privateconstintWM_MBUTTONDBLCLK=0x209;
publiceventMouseEventHandlerOnMouseActivity;
staticinthMouseHook=0;
//鼠标钩子句柄
publicconstintWH_MOUSE_LL=14;
//mouse
HookProcMouseHookProcedure;
//声明鼠标钩子事件类型.
//声明一个Point的封送类型
publicclassPOINT
publicintx;
publicinty;
//声明鼠标钩子的封送结构类型
publicclassMouseHookStruct
publicPOINTpt;
publicinthWnd;
publicintwHitTestCode;
墨认的构造函数构造当前类的实例.
publicMouseHook()
//Start();
~MouseHook()
//安装鼠标钩子
if(hMouseHook==0)
//生成一个HookProc的实例.
MouseHookProcedure=newHookProc(MouseHookProc);
hMouseHook=SetWindowsHookEx(WH_MOUSE_LL,MouseHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);
//如果装置失败停止钩子
SetWindowsHookExfailed."
boolretMouse=true;
if(hMouseHook!
retMouse=UnhookWindowsHookEx(hMouseHook);
hMouseHook=0;
(retMouse))thrownewException("
privateintMouseHookProc(intnCode,Int32wParam,IntPtrlParam)
//如果正常运行并且用户要监听鼠标的消息
(OnMouseActivity!
MouseButtonsbutton=MouseButtons.None;
intclickCount=0;
switch(wParam)
caseWM_LBUTTONDOWN:
button=MouseButtons.Left;
clickCount=1;
break;
caseWM_LBUTTONUP:
caseWM_LBUTTONDBLCLK:
clickCount=2;
caseWM_RBUTTONDOWN:
button=MouseButtons.Right;
caseWM_RBUTTONUP:
caseWM_RBUTTONDBLCLK: