鼠标和键盘操作的全局钩子较好.docx

上传人:b****9 文档编号:23349116 上传时间:2023-05-16 格式:DOCX 页数:21 大小:18.13KB
下载 相关 举报
鼠标和键盘操作的全局钩子较好.docx_第1页
第1页 / 共21页
鼠标和键盘操作的全局钩子较好.docx_第2页
第2页 / 共21页
鼠标和键盘操作的全局钩子较好.docx_第3页
第3页 / 共21页
鼠标和键盘操作的全局钩子较好.docx_第4页
第4页 / 共21页
鼠标和键盘操作的全局钩子较好.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

鼠标和键盘操作的全局钩子较好.docx

《鼠标和键盘操作的全局钩子较好.docx》由会员分享,可在线阅读,更多相关《鼠标和键盘操作的全局钩子较好.docx(21页珍藏版)》请在冰豆网上搜索。

鼠标和键盘操作的全局钩子较好.docx

鼠标和键盘操作的全局钩子较好

usingSystem;

usingSystem.ComponentModel;

usingSystem.Reflection;

usingSystem.Runtime.InteropServices;

usingSystem.Windows.Forms;

namespaceUserActivityMonitor

{

///

///Thisclassmonitorsallmouseactivitiesglobally(alsooutsideoftheapplication)

///andprovidesappropriateevents.

///

publicstaticclassHookManager

{

///

///Occurswhenthemousepointerismoved.

///

publicstaticeventMouseEventHandlerMouseMove

{

add

{

EnsureSubscribedToGlobalMouseEvents();

s_MouseMove+=value;

}

remove

{

s_MouseMove-=value;

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenaclickwasperformedbythemouse.

///

publicstaticeventMouseEventHandlerMouseClick

{

add

{

EnsureSubscribedToGlobalMouseEvents();

s_MouseClick+=value;

}

remove

{

s_MouseClick-=value;

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenthemouseamousebuttonispressed.

///

publicstaticeventMouseEventHandlerMouseDown

{

add

{

EnsureSubscribedToGlobalMouseEvents();

s_MouseDown+=value;

}

remove

{

s_MouseDown-=value;

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenamousebuttonisreleased.

///

publicstaticeventMouseEventHandlerMouseUp

{

add

{

EnsureSubscribedToGlobalMouseEvents();

s_MouseUp+=value;

}

remove

{

s_MouseUp-=value;

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenthemousewheelmoves.

///

publicstaticeventMouseEventHandlerMouseWheel

{

add

{

EnsureSubscribedToGlobalMouseEvents();

s_MouseWheel+=value;

}

remove

{

s_MouseWheel-=value;

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenadoubleclickedwasperformedbythemouse.

///

publicstaticeventMouseEventHandlerMouseDoubleClick

{

add

{

EnsureSubscribedToGlobalMouseEvents();

if(s_MouseDoubleClick==null)

{

s_DoubleClickTimer=newTimer

{

Interval=GetDoubleClickTime(),

Enabled=false};

s_DoubleClickTimer.Tick+=DoubleClickTimeElapsed;

MouseUp+=OnMouseUp;

}

s_MouseDoubleClick+=value;

}

remove

{

if(s_MouseDoubleClick!

=null)

{

s_MouseDoubleClick-=value;

if(s_MouseDoubleClick==null)

{

MouseUp-=OnMouseUp;

s_DoubleClickTimer.Tick-=DoubleClickTimeElapsed;

s_DoubleClickTimer=null;

}

}

TryUnsubscribeFromGlobalMouseEvents();

}

}

///

///Occurswhenakeyisreleased.

///

publicstaticeventKeyEventHandlerKeyUp

{

add

{

EnsureSubscribedToGlobalKeyboardEvents();

s_KeyUp+=value;

}

remove

{

s_KeyUp-=value;

TryUnsubscribeFromGlobalKeyboardEvents();

}

}

///

///Occurswhenakeyispreseed.

///

publicstaticeventKeyEventHandlerKeyDown

{

add

{

EnsureSubscribedToGlobalKeyboardEvents();

s_KeyDown+=value;

}

remove

{

s_KeyDown-=value;

TryUnsubscribeFromGlobalKeyboardEvents();

}

}

///

///Occurswhenakeyispressed.

///

///

///Keyeventsoccurinthefollowingorder:

///

///KeyDown

///KeyPress

///KeyUp

///

///TheKeyPresseventisnotraisedbynoncharacterkeys;however,thenoncharacterkeysdoraisetheKeyDownandKeyUpevents.

///UsetheKeyCharpropertytosamplekeystrokesatruntimeandtoconsumeormodifyasubsetofcommonkeystrokes.

///Tohandlekeyboardeventsonlyinyourapplicationandnotenableotherapplicationstoreceivekeyboardevents,

///settheKeyPressEventArgs.Handledpropertyinyourform'sKeyPressevent-handlingmethodtotrue.

///

publicstaticeventKeyPressEventHandlerKeyPress

{

add

{

EnsureSubscribedToGlobalKeyboardEvents();

s_KeyPress+=value;

}

remove

{

s_KeyPress-=value;

TryUnsubscribeFromGlobalKeyboardEvents();

}

}

privatestaticeventMouseEventHandlers_MouseMove;

privatestaticeventMouseEventHandlers_MouseClick;

privatestaticeventMouseEventHandlers_MouseDown;

privatestaticeventMouseEventHandlers_MouseUp;

privatestaticeventMouseEventHandlers_MouseWheel;

privatestaticeventMouseEventHandlers_MouseDoubleClick;

privatestaticMouseButtonss_PrevClickedButton;

privatestaticTimers_DoubleClickTimer;

privatestaticvoidDoubleClickTimeElapsed(objectsender,EventArgse)

{

s_DoubleClickTimer.Enabled=false;

s_PrevClickedButton=MouseButtons.None;

}

privatestaticvoidOnMouseUp(objectsender,MouseEventArgse)

{

if(e.Clicks<1)

{

return;

}

if(e.Button.Equals(s_PrevClickedButton))

{

if(s_MouseDoubleClick!

=null)

{

s_MouseDoubleClick.Invoke(null,e);

}

s_DoubleClickTimer.Enabled=false;

s_PrevClickedButton=MouseButtons.None;

}

else{

s_DoubleClickTimer.Enabled=true;

s_PrevClickedButton=e.Button;

}

}

privatestaticeventKeyPressEventHandlers_KeyPress;

privatestaticeventKeyEventHandlers_KeyUp;

privatestaticeventKeyEventHandlers_KeyDown;

privateconstintWH_MOUSE_LL=14;

privateconstintWH_KEYBOARD_LL=13;

privateconstintWM_LBUTTONDOWN=0x201;

privateconstintWM_RBUTTONDOWN=0x204;

privateconstintWM_LBUTTONUP=0x202;

privateconstintWM_RBUTTONUP=0x205;

privateconstintWM_LBUTTONDBLCLK=0x203;

privateconstintWM_RBUTTONDBLCLK=0x206;

privateconstintWM_MOUSEWHEEL=0x020A;

privateconstintWM_KEYDOWN=0x100;

privateconstintWM_KEYUP=0x101;

privateconstintWM_SYSKEYDOWN=0x104;

privateconstintWM_SYSKEYUP=0x105;

privateconstbyteVK_SHIFT=0x10;

privateconstbyteVK_CAPITAL=0x14;

[DllImport("user32.dll",CharSet=CharSet.Auto,

CallingConvention=CallingConvention.StdCall)]

privatestaticexternintCallNextHookEx(

intidHook,

intnCode,

intwParam,

IntPtrlParam);

[DllImport("user32.dll",CharSet=CharSet.Auto,

CallingConvention=CallingConvention.StdCall,SetLastError=true)]

privatestaticexternintSetWindowsHookEx(

intidHook,

HookProclpfn,

IntPtrhMod,

intdwThreadId);

[DllImport("user32.dll",CharSet=CharSet.Auto,

CallingConvention=CallingConvention.StdCall,SetLastError=true)]

privatestaticexternintUnhookWindowsHookEx(intidHook);

[DllImport("user32")]

privatestaticexternintGetDoubleClickTime();

[DllImport("user32")]

privatestaticexternintToAscii(

intuVirtKey,

intuScanCode,

byte[]lpbKeyState,

byte[]lpwTransKey,

intfuState);

[DllImport("user32")]

privatestaticexternintGetKeyboardState(byte[]pbKeyState);

[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]

privatestaticexternshortGetKeyState(intvKey);

[StructLayout(LayoutKind.Sequential)]

privatestructPoint

{

internalreadonlyintX;

internalreadonlyintY;

}

[StructLayout(LayoutKind.Sequential)]

privatestructMouseLLHookStruct

{

internalPointPoint;

internalreadonlyintMouseData;

privatereadonlyintFlags;

privatereadonlyintTime;

privatereadonlyintExtraInfo;

}

[StructLayout(LayoutKind.Sequential)]

privatestructKeyboardHookStruct

{

internalreadonlyintVirtualKeyCode;

internalreadonlyintScanCode;

internalreadonlyintFlags;

privatereadonlyintTime;

privatereadonlyintExtraInfo;

}

privatedelegateintHookProc(intnCode,intwParam,IntPtrlParam);

privatestaticHookProcs_MouseDelegate;

privatestaticints_MouseHookHandle;

privatestaticintm_OldX;

privatestaticintm_OldY;

privatestaticintMouseHookProc(intnCode,intwParam,IntPtrlParam)

{

if(nCode>=0)

{

varmouseHookStruct=(MouseLLHookStruct)Marshal.PtrToStructure(lParam,typeof(MouseLLHookStruct));

varbutton=MouseButtons.None;

shortmouseDelta=0;

varclickCount=0;

varmouseDown=false;

varmouseUp=false;

switch(wParam)

{

caseWM_LBUTTONDOWN:

mouseDown=true;

button=MouseButtons.Left;

clickCount=1;

break;

caseWM_LBUTTONUP:

mouseUp=true;

button=MouseButtons.Left;

clickCount=1;

break;

caseWM_LBUTTONDBLCLK:

button=MouseButtons.Left;

clickCount=2;

break;

caseWM_RBUTTONDOWN:

mouseDown=true;

button=MouseButtons.Right;

clickCount=1;

break;

caseWM_RBUTTONUP:

mouseUp=true;

button=MouseButtons.Right;

clickCount=1;

break;

caseWM_RBUTTONDBLCLK:

button=MouseButtons.Right;

clickCount=2;

break;

caseWM_MOUSEWHEEL:

mouseDelta=(short)((mouseHookStruct.MouseData>>16)&0xffff);

break;

}

vare=newMouseEventExtArgs(

button,

clickCount,

mouseHookStruct.Point.X,

mouseHookStruct.Point.Y,

mouseDelta);

if(s_MouseUp!

=null&&mouseUp)

{

s_MouseUp.Invoke(null,e);

}

if(s_MouseDown!

=null&&mouseDown)

{

s_MouseDown.Invoke(null,e);

}

if(s_MouseClick!

=null&&clickCount>0)

{

s_MouseClick.Invoke(null,e);

}

if(s_MouseDoubleClick!

=null&&clickCount==2)

{

s_MouseDoubleClick.Invoke(null,e);

}

if(s_MouseWheel!

=null&&mouseDelta!

=0)

{

s_MouseWheel.Invoke(null,e);

}

if((s_MouseMove!

=null)&&(m_OldX!

=mouseHookStruct.Point.X||m_OldY!

=mouseHookStruct.Point.Y))

{

m_OldX=mouseHookStruct.Point.X;

m_OldY=mouseHookStruct.Point.Y;

if(s_MouseMove!

=null)

{

s_MouseMove.Invoke(null,e);

}

}

if(e.Handled)

{

return-1;

}

}

returnCallNextHookEx(s_MouseHookHandle,nCode,wParam,lParam);

}

privatestaticvoidEnsureSubscribedToGlobalMouseEvents()

{

if(s_MouseHookHandle!

=0)

{

return;

}

s_MouseDelegate=MouseHookProc;

s_MouseHookHandle=SetWindowsHookEx(

WH_MOUSE_LL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1