<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一個簡單的實現版本,沒有去Hook鍵鼠等操作,事先錄製好操作步驟(將滑鼠移動到需要操作的位置,按下熱鍵執行相應動作),點選執行即可。
主要還是用windows api來實現,模擬點選、右擊、雙擊、傳送文字等。
程式碼可能略長一點,下面發下關鍵程式碼
主要的思路就是操作熱鍵的時候,將操作型別以及座標記錄到一個List中,然後利用Windows Api迴圈執行List中的資料
模擬滑鼠點選、文字輸入
開發工具: Visual Studio 2013
.NET Framework版本:4.5
#region 滑鼠操作型別 private const int MOUSEEVENTF_MOVE = 1;//滑鼠移動 private const int MOUSEEVENTF_LEFTDOWN = 2;//按下滑鼠左鍵 private const int MOUSEEVENTF_LEFTUP = 4;//擡起滑鼠左鍵 private const int MOUSEEVENTF_RIGHTDOWN = 8;//按下滑鼠右鍵 private const int MOUSEEVENTF_RIGHTUP = 16;//擡起滑鼠右鍵 #endregion #region Windows Api /// <summary> /// 滑鼠操作 /// </summary> /// <param name="dwFlags"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="cButtons"></param> /// <param name="dwExtraInfo"></param> [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)] public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); /// <summary> /// 設定滑鼠位置 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> [DllImport("user32")] public static extern int SetCursorPos(int x, int y); /// <summary> /// 註冊熱鍵 /// </summary> /// <param name="hWnd"></param> /// <param name="id"></param> /// <param name="control"></param> /// <param name="vk"></param> /// <returns></returns> [DllImport("user32")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk); /// <summary> /// 取消熱鍵 /// </summary> /// <param name="hWnd"></param> /// <param name="id"></param> /// <returns></returns> [DllImport("user32")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id); #endregion
private List<EventClass> listEvent = new List<EventClass>(); /// <summary> /// 註冊/取消熱鍵 /// </summary> /// <param name="isReg"></param> private void RegistKey(bool isReg) { if (isReg) { RegisterHotKey(base.Handle, 30001, MOD_CONTROL, Keys.D1); RegisterHotKey(base.Handle, 30002, MOD_CONTROL, Keys.D2); RegisterHotKey(base.Handle, 30003, MOD_CONTROL, Keys.D3); RegisterHotKey(base.Handle, 30004, MOD_CONTROL, Keys.D4); RegisterHotKey(base.Handle, 30005, MOD_CONTROL, Keys.E); } else { UnregisterHotKey(base.Handle, 30001); UnregisterHotKey(base.Handle, 30002); UnregisterHotKey(base.Handle, 30003); UnregisterHotKey(base.Handle, 30004); UnregisterHotKey(base.Handle, 30005); } } //執行點選事件 private void MouseClick(EventClass eventData) { SetCursorPos(eventData.X, eventData.Y); switch (eventData.clickType) { case ClickType.leftClick: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); break; case ClickType.rightClick: mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); break; case ClickType.doubleClick: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Thread.Sleep(100); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); break; } } //執行設定文字事件 private void SetText(EventClass eventData) { SendKeys.SendWait(eventData.Text); } /// <summary> /// 錄製 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRecord_Click(object sender, EventArgs e) { CancelTask = new CancellationTokenSource(); RegistKey(true); EnableControl(false); AddLog("正在錄製..."); KeyPress += new KeyPressEventHandler(Click_KeyPress); } /// <summary> /// 執行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRun_Click(object sender, EventArgs e) { int interval = string.IsNullOrEmpty(txtInterval.Text) ? 0 : Convert.ToInt32(txtInterval.Text); int count = string.IsNullOrEmpty(txtCount.Text) ? 1 : Convert.ToInt32(txtCount.Text); Task.Factory.StartNew(() => { for (int i = 0; i < count; i++) { foreach (EventClass current in listEvent) { if (current.clickType == ClickType.SendKeys) { SetText(current); } else { MouseClick(current); } Thread.Sleep(interval * 1000); } AddLog("第" + (i + 1) + "次執行結束"); try { CancelTask.Token.ThrowIfCancellationRequested(); } catch (System.OperationCanceledException ex) { AddLog("已手動結束執行"); return; } } AddLog("自動執行結束..."); KeyPress += new KeyPressEventHandler(Click_KeyPress); }, CancelTask.Token); } private void Click_KeyPress(object sender, KeyPressEventArgs e) { string logStr = string.Empty; ClickType clickType = ClickType.leftClick; string key = e.KeyChar.ToString().ToUpper(); switch (key) { case "1": clickType = ClickType.leftClick; logStr = "點選了滑鼠左鍵"; break; case "2": clickType = ClickType.rightClick; logStr = "點選了滑鼠右鍵"; break; case "3": clickType = ClickType.doubleClick; logStr = "雙擊了滑鼠左鍵"; break; case "4": clickType = ClickType.SendKeys; logStr = "傳送了文字:" + txtValue.Text; break; default: logStr = "按下了" + e.KeyChar + "鍵,無效!"; break; } int x = Cursor.Position.X; int y = Cursor.Position.Y; AddLog("在 (" + x + "," + y + ") 位置," + logStr); EventClass eventClass = new EventClass(); eventClass.clickType = clickType; eventClass.X = x; eventClass.Y = y; if (!string.IsNullOrEmpty(txtValue.Text)) { eventClass.Text = txtValue.Text; } listEvent.Add(eventClass); }
到此這篇關於C#模擬實現滑鼠自動點選與訊息傳送功能的文章就介紹到這了,更多相關C#滑鼠點選 訊息傳送內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45