最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能。所以利用工作中常用的C#调用 API不停地点击鼠标。如图: 为方便在基础上修改,我把整个解决方案放到百度云盘。以下为链接:链接: http://pan.baidu.com/s/1o7 ...
最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能。
所以利用工作中常用的C#调用 API不停地点击鼠标。
如图:
为方便在基础上修改,我把整个解决方案放到百度云盘。以下为链接:
链接: 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#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。