C# Hook键盘鼠标连按连点器Word格式.docx
《C# Hook键盘鼠标连按连点器Word格式.docx》由会员分享,可在线阅读,更多相关《C# Hook键盘鼠标连按连点器Word格式.docx(41页珍藏版)》请在冰点文库上搜索。
publiceventMouseEventHandlerOnMouseActivity;
publiceventKeyEventHandlerKeyDown;
publiceventKeyPressEventHandlerKeyPress;
publiceventKeyEventHandlerKeyUp;
publicdelegateintHookProc(intnCode,Int32wParam,IntPtrlParam);
staticinthMouseHook=0;
staticinthKeyboardHook=0;
publicconstintWH_MOUSE_LL=14;
publicconstintWH_KEYBOARD_LL=13;
HookProcMouseHookProcedure;
HookProcKeyboardHookProcedure;
[StructLayout(LayoutKind.Sequential)]
publicclassPOINT
{
publicintx;
publicinty;
}
publicclassMouseHookStruct
publicPOINTpt;
publicinthwnd;
publicintwHitTestCode;
publicintdwExtraInfo;
publicclassKeyboardHookStruct
publicintvkCode;
publicintscanCode;
publicintflags;
publicinttime;
[DllImport("
user32.dll"
CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
publicstaticexternintSetWindowsHookEx(intidHook,HookProclpfn,
IntPtrhInstance,intthreadId);
publicstaticexternboolUnhookWindowsHookEx(intidHook);
publicstaticexternintCallNextHookEx(intidHook,intnCode,
Int32wParam,IntPtrlParam);
publicvoidStart()
if(hMouseHook==0)
{
MouseHookProcedure=newHookProc(MouseHookProc);
hMouseHook=SetWindowsHookEx(WH_MOUSE_LL,
MouseHookProcedure,
Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);
if(hMouseHook==0){
Stop();
thrownewException("
SetWindowsHookExfailed."
);
}
}
if(hKeyboardHook==0)
KeyboardHookProcedure=newHookProc(KeyboardHookProc);
hKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,
KeyboardHookProcedure,
Assembly.GetExecutingAssembly().GetModules()[0]),
if(hKeyboardHook==0){
SetWindowsHookExistfailed."
publicvoidStop()
boolretMouse=true;
boolretKeyboard=true;
if(hMouseHook!
=0)
retMouse=UnhookWindowsHookEx(hMouseHook);
hMouseHook=0;
}
if(hKeyboardHook!
retKeyboard=UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook=0;
if(!
(retMouse&
&
retKeyboard))thrownewException("
UnhookWindowsHookExfailed."
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;
privateintMouseHookProc(intnCode,Int32wParam,IntPtrlParam)
if((nCode>
=0)&
(OnMouseActivity!
=null)){
MouseButtonsbutton=MouseButtons.None;
switch(wParam)
{
caseWM_LBUTTONDOWN:
button=MouseButtons.Left;
break;
caseWM_RBUTTONDOWN:
button=MouseButtons.Right;
intclickCount=0;
if(button!
=MouseButtons.None)
if(wParam==WM_LBUTTONDBLCLK||wParam==WM_RBUTTONDBLCLK)clickCount=2;
elseclickCount=1;
MouseHookStructMyMouseHookStruct=(MouseHookStruct)Marshal.PtrToStructure(lParam,typeof(MouseHookStruct));
MouseEventArgse=newMouseEventArgs(
button,
clickCount,
MyMouseHookStruct.pt.x,
MyMouseHookStruct.pt.y,
0);
OnMouseActivity(this,e);
returnCallNextHookEx(hMouseHook,nCode,wParam,lParam);
user32"
)]
publicstaticexternintToAscii(intuVirtKey,
intuScanCode,
byte[]lpbKeyState,
byte[]lpwTransKey,
intfuState);
publicstaticexternintGetKeyboardState(byte[]pbKeyState);
privateconstintWM_KEYDOWN=0x100;
privateconstintWM_KEYUP=0x101;
privateconstintWM_SYSKEYDOWN=0x104;
privateconstintWM_SYSKEYUP=0x105;
privateintKeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)
(KeyDown!
=null||KeyUp!
=null||KeyPress!
=null))
KeyboardHookStructMyKeyboardHookStruct=(KeyboardHookStruct)Marshal.PtrToStructure(lParam,typeof(KeyboardHookStruct));
if(KeyDown!
=null&
(wParam==WM_KEYDOWN||wParam==WM_SYSKEYDOWN))
KeyskeyData=(Keys)MyKeyboardHookStruct.vkCode;
KeyEventArgse=newKeyEventArgs(keyData);
KeyDown(this,e);
if(KeyPress!
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]);
KeyPress(this,e);
if(KeyUp!
(wParam==WM_KEYUP||wParam==WM_SYSKEYUP))
KeyUp(this,e);
returnCallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
}
Form1代码
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
namespacePatcher_采集
{
publicpartialclassForm1:
Form
[System.Runtime.InteropServices.DllImport("
)]
privatestaticexternintmouse_event(intdwFlags,intdx,intdy,intcButtons,intdwExtraInfo);
constintMOUSEEVENTF_LEFTDOWN=0x0002;
constintMOUSEEVENTF_LEFTUP=0x0004;
///<
summary>
///安装钩子
/summary>
paramname="
idHook"
>
<
/param>
hProc"
hMod"
dwThreadId"
returns>
/returns>
[DllImport("
publicstaticexternintSetWindowsHookEx(intidHook,HookProchProc,IntPtrhMod,intdwThreadId);
///将hook信息传递到链表中下一个hook处理过程
hHook"
nCode"
wParam"
lParam"
publicstaticexternintCallNextHookEx(inthHook,intnCode,IntPtrwParam,IntPtrlParam);
///卸载钩子
publicstaticexternboolUnhookWindowsHookEx(inthHook);
///获取模块句柄
lpModuleName"
kernel32.dll"
publicstaticexternIntPtrGetModuleHandle(stringlpModuleName);
publicstructKeyInfoStruct
publicintvkCode;
//按键键码
publicintscanCode;
publicintflags;
//键盘是否按下的标志
publicinttime;
publicintdwExtraInfo;
User32.dll"
publicstaticexternvoidkeybd_event(BytebVk,BytebScan,Int32
dwFlags,Int32dwExtraInfo);
privateconstintWH_KEYBOARD_LL=13;
//钩子类型全局钩子
privateconstintWM_KEYUP=0x101;
//按键抬起
privateconstintWM_KEYDOWN=0x100;
//按键按下
privateconstintKEYEVENTF_KEYUP=2;
byteVK_Q=0;
///坐标
privatePoint[]points;
///坐标个数索引
intpointIndex=1;
intnowPointIndex=0;
///按键索引
intKeyIndex=0;
Labellb;
///输入框
TextBoxtxt;
///LinkLabel
//LinkLabellink;
///执行的动作顺序,保存的控件名称
stringdongzuo="
txtP1"
;
intdongzuoIndex=0;
publicdelegateintHookProc(intnCode,IntPtrwParam,IntPtrlParam);
boolbStopMsg=false;
inthHook=0;
GCHandlegc;
stringb="
F2"
intindex=0;
privateUserActivityHookhook;
Iconicon1=newIcon(Application.StartupPath+@"
\..\emoticon-1.ico"
Iconicon2=newIcon(Application.StartupPath+@"
\..\emoticon-2.ico"
publicintMethodHookProc(intnCode,IntPtrwParam,IntPtrlParam)
if(nCode>
KeyInfoStructinputInfo=(KeyInfoStruct)Marshal.PtrToStructure(lParam,typeof(KeyInfoStruct));
if(wParam==(IntPtr)WM_KEYDOWN)
//如果按键按下
if(((Keys)inputInfo.vkCode).ToString()==b)
if(timer1.Enabled==true)
notifyIcon1.Icon=icon1;
timer1.Enabled=false;
else
notifyIcon1.Icon=icon2;
timer1.Enabled=true;
if(bStopMsg)
return1;
returnCallNextHookEx(hHook,nCode,wParam,lParam);
//继续传递消息
publicForm1()
InitializeComponent();
boBox1.SelectedIndex=1;
//默认索引值
boBox1.DropDownStyle=ComboBoxStyle.DropDownList;
//仅在列表中选择
privatevoidForm1_Load(objectsender,EventArgse)
if(0==hHook)
HookProcKeyCallBack=newHookProc(MethodHookProc);
hHook=