C# Hook键盘鼠标连按连点器.docx
- 文档编号:5311037
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:41
- 大小:119.38KB
C# Hook键盘鼠标连按连点器.docx
《C# Hook键盘鼠标连按连点器.docx》由会员分享,可在线阅读,更多相关《C# Hook键盘鼠标连按连点器.docx(41页珍藏版)》请在冰点文库上搜索。
C#Hook键盘鼠标连按连点器
Hook_键盘鼠标连按连点
byMeteor
当初是为了我玩的游戏做的一个自动采集功能,功能是实现鼠标和键盘自动操作
根据动作,设置的时间隔保存后自动运行
直接上图
Form1主窗体
Loading只是一个等待提示
效果
UserActivityHook类代码
usingSystem;
usingSystem.Runtime.InteropServices;
usingSystem.Reflection;
usingSystem.Windows.Forms;
namespacePatcher_采集{
publicclassUserActivityHook:
object{
publicUserActivityHook()
{
try
{
Start();
}
catch{}
}
~UserActivityHook(){
Stop();
}
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;
}
[StructLayout(LayoutKind.Sequential)]
publicclassMouseHookStruct
{
publicPOINTpt;
publicinthwnd;
publicintwHitTestCode;
publicintdwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
publicclassKeyboardHookStruct
{
publicintvkCode;
publicintscanCode;
publicintflags;
publicinttime;
publicintdwExtraInfo;
}
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
publicstaticexternintSetWindowsHookEx(intidHook,HookProclpfn,
IntPtrhInstance,intthreadId);
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
publicstaticexternboolUnhookWindowsHookEx(intidHook);
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
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,
Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);
if(hKeyboardHook==0){
Stop();
thrownewException("SetWindowsHookExistfailed.");
}
}
}
publicvoidStop()
{
boolretMouse=true;
boolretKeyboard=true;
if(hMouseHook!
=0)
{
retMouse=UnhookWindowsHookEx(hMouseHook);
hMouseHook=0;
}
if(hKeyboardHook!
=0)
{
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;
break;
}
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);
}
[DllImport("user32")]
publicstaticexternintToAscii(intuVirtKey,
intuScanCode,
byte[]lpbKeyState,
byte[]lpwTransKey,
intfuState);
[DllImport("user32")]
publicstaticexternintGetKeyboardState(byte[]pbKeyState);
privateconstintWM_KEYDOWN=0x100;
privateconstintWM_KEYUP=0x101;
privateconstintWM_SYSKEYDOWN=0x104;
privateconstintWM_SYSKEYUP=0x105;
privateintKeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)
{
if((nCode>=0)&&(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!
=null&&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!
=null&&(wParam==WM_KEYUP||wParam==WM_SYSKEYUP))
{
KeyskeyData=(Keys)MyKeyboardHookStruct.vkCode;
KeyEventArgse=newKeyEventArgs(keyData);
KeyUp(this,e);
}
}
returnCallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
}
}
}
Form1代码
usingSystem;
usingSystem.Drawing;
usingSystem.Windows.Forms;
usingSystem.Drawing.Drawing2D;
namespacePatcher_采集
{
publicpartialclassForm1:
Form
{
[System.Runtime.InteropServices.DllImport("user32")]
privatestaticexternintmouse_event(intdwFlags,intdx,intdy,intcButtons,intdwExtraInfo);
constintMOUSEEVENTF_LEFTDOWN=0x0002;
constintMOUSEEVENTF_LEFTUP=0x0004;
///
///安装钩子
///
///
///
///
///
///
[DllImport("user32.dll")]
publicstaticexternintSetWindowsHookEx(intidHook,HookProchProc,IntPtrhMod,intdwThreadId);
///
///将hook信息传递到链表中下一个hook处理过程
///
///
///
///
///
///
[DllImport("user32.dll")]
publicstaticexternintCallNextHookEx(inthHook,intnCode,IntPtrwParam,IntPtrlParam);
///
///卸载钩子
///
///
///
[DllImport("user32.dll")]
publicstaticexternboolUnhookWindowsHookEx(inthHook);
///
///获取模块句柄
///
///
///
[DllImport("kernel32.dll")]
publicstaticexternIntPtrGetModuleHandle(stringlpModuleName);
publicstructKeyInfoStruct
{
publicintvkCode;//按键键码
publicintscanCode;
publicintflags;//键盘是否按下的标志
publicinttime;
publicintdwExtraInfo;
}
[DllImport("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>=0)
{
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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# Hook键盘鼠标连按连点器 Hook 键盘 鼠标 连按连点器