你的位置:首页 > 软件开发 > ASP.net > C#实现自动单击

C#实现自动单击

发布时间:2015-12-30 22:00:37
最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能。所以利用工作中常用的C#调用 API不停地点击鼠标。如图: 为方便在基础上修改,我把整个解决方案放到百度云盘。以下为链接:链接: http://pan.baidu.com/s/1o7 ...

最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能。

所以利用工作中常用的C#调用 API不停地点击鼠标。

如图:C#实现自动单击

 

为方便在基础上修改,我把整个解决方案放到百度云盘。以下为链接:

链接: http://pan.baidu.com/s/1o7t80bS 密码: pehi

 

先将用到的公用方法贴上来:

 1 using System; 2 using System.Collections.Generic; 3 using System.Diagnostics; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 using System.Windows.Forms; 7  8 namespace AutoKeyTool 9 { 10   public class KeyboardHook 11   { 12     int hHook; 13     Win32Api.HookProc KeyboardHookDelegate; 14     public event KeyEventHandler OnKeyDownEvent; 15     public event KeyEventHandler OnKeyUpEvent; 16     public event KeyPressEventHandler OnKeyPressEvent; 17  18     public KeyboardHook() { } 19     public void SetHook() 20     { 21       KeyboardHookDelegate = new Win32Api.HookProc(KeyboardHookProc); 22       Process cProcess = Process.GetCurrentProcess(); 23       ProcessModule cModule = cProcess.MainModule; 24       var mh = Win32Api.GetModuleHandle(cModule.ModuleName); 25       hHook = Win32Api.SetWindowsHookEx(Win32Api.WH_KEYBOARD_LL, KeyboardHookDelegate, mh, 0); 26     } 27  28     public void UnHook() 29     { 30       Win32Api.UnhookWindowsHookEx(hHook); 31     } 32  33     private List<Keys> preKeysList = new List<Keys>();//存放被按下的控制键,用来生成具体的键 34     private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) 35     { 36       //如果该消息被丢弃(nCode<0)或者没有事件绑定处理程序则不会触发事件 37       if ((nCode >= 0) && (OnKeyDownEvent != null || OnKeyUpEvent != null || OnKeyPressEvent != null)) 38       { 39         Win32Api.KeyboardHookStruct KeyDataFromHook = (Win32Api.KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.KeyboardHookStruct)); 40         Keys keyData = (Keys)KeyDataFromHook.vkCode; 41         //按下控制键 42         if ((OnKeyDownEvent != null || OnKeyPressEvent != null) && (wParam == Win32Api.WM_KEYDOWN || wParam == Win32Api.WM_SYSKEYDOWN)) 43         { 44           if (IsCtrlAltShiftKeys(keyData) && preKeysList.IndexOf(keyData) == -1) 45           { 46             preKeysList.Add(keyData); 47           } 48         } 49         //WM_KEYDOWN和WM_SYSKEYDOWN消息,将会引发OnKeyDownEvent事件 50         if (OnKeyDownEvent != null && (wParam == Win32Api.WM_KEYDOWN || wParam == Win32Api.WM_SYSKEYDOWN)) 51         { 52           KeyEventArgs e = new KeyEventArgs(GetDownKeys(keyData)); 53           OnKeyDownEvent(this, e); 54         } 55  56         //WM_KEYDOWN消息将引发OnKeyPressEvent  57  58         if (OnKeyPressEvent != null && wParam == Win32Api.WM_KEYDOWN) 59         { 60           byte[] keyState = new byte[256]; 61           Win32Api.GetKeyboardState(keyState); 62           byte[] inBuffer = new byte[2]; 63           if (Win32Api.ToAscii(KeyDataFromHook.vkCode, KeyDataFromHook.scanCode, keyState, inBuffer, KeyDataFromHook.flags) == 1) 64           { 65             KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]); 66             OnKeyPressEvent(this, e); 67           } 68         } 69  70         //松开控制键 71         if ((OnKeyDownEvent != null || OnKeyPressEvent != null) && (wParam == Win32Api.WM_KEYUP || wParam == Win32Api.WM_SYSKEYUP)) 72         { 73           if (IsCtrlAltShiftKeys(keyData)) 74           { 75             for (int i = preKeysList.Count - 1; i >= 0; i--) 76             { 77               if (preKeysList[i] == keyData) { preKeysList.RemoveAt(i); } 78             } 79           } 80         } 81  82         //WM_KEYUP和WM_SYSKEYUP消息,将引发OnKeyUpEvent事件  83         if (OnKeyUpEvent != null && (wParam == Win32Api.WM_KEYUP || wParam == Win32Api.WM_SYSKEYUP)) 84         { 85           KeyEventArgs e = new KeyEventArgs(GetDownKeys(keyData)); 86           OnKeyUpEvent(this, e); 87         } 88       } 89       return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam); 90  91     } 92  93     //根据已经按下的控制键生成key 94     private Keys GetDownKeys(Keys key) 95     { 96       Keys rtnKey = Keys.None; 97       foreach (Keys i in preKeysList) 98       { 99         if (i == Keys.LControlKey || i == Keys.RControlKey) { rtnKey = rtnKey | Keys.Control; }100         if (i == Keys.LMenu || i == Keys.RMenu) { rtnKey = rtnKey | Keys.Alt; }101         if (i == Keys.LShiftKey || i == Keys.RShiftKey) { rtnKey = rtnKey | Keys.Shift; }102       }103       return rtnKey | key;104     }105     private Boolean IsCtrlAltShiftKeys(Keys key)106     {107       if (key == Keys.LControlKey || key == Keys.RControlKey || key == Keys.LMenu || key == Keys.RMenu || key == Keys.LShiftKey || key == Keys.RShiftKey) { return true; }108       return false;109     }110   }111 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:C#实现自动单击

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录