首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 實作滑鼠隱藏技術:利用 mouse_event API 模擬輸入屏蔽真實滑鼠

     編輯:關於VC++

在 Windows 應用程式開發中,鍵盤與滑鼠是使用者互動的兩大核心輸入裝置。若能透過程式控制系統滑鼠行為,例如隱藏特定視窗(如計算機)的滑鼠游標,將極大擴展應用程式的控制能力。本文將介紹如何使用 Visual C++ 搭配 Windows API mouse_event 函式,達成「模擬滑鼠事件以屏蔽真實滑鼠輸入」的效果,並提供完整程式碼範例與執行風險說明。

核心原理:mouse_event 函式與事件屏蔽機制

Windows 提供的 mouse_event API 可模擬滑鼠移動、點擊、滾輪等動作。其關鍵特性在於:系統會優先處理模擬事件,導致真實滑鼠輸入被忽略。只要持續在背景執行緒發送模擬移動事件,即可達到「隱藏滑鼠」的視覺與功能效果。

函式原型與關鍵參數

VOID mouse_event(
  DWORD dwFlags,  // 模擬事件類型(移動、左鍵按下/放開、右鍵等)
  DWORD dx,       // X 座標或相對位移
  DWORD dy,       // Y 座標或相對位移
  DWORD dwData,   // 滾輪移動量
  DWORD dwExtraInfo // 應用程式自訂資訊
);

常用 dwFlags 值:

  • MOUSEEVENTF_MOVE:移動滑鼠
  • MOUSEEVENTF_LEFTDOWN / MOUSEEVENTF_LEFTUP:左鍵按下/放開
  • MOUSEEVENTF_RIGHTDOWN / MOUSEEVENTF_RIGHTUP:右鍵按下/放開
  • MOUSEEVENTF_ABSOLUTE:使用絕對座標

基本模擬點擊範例

POINT lpPoint;
GetCursorPos(&lpPoint);
SetCursorPos(lpPoint.x, lpPoint.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

完整實作:啟動背景執行緒持續發送移動事件

為了持續屏蔽系統滑鼠,需建立一個輔助執行緒,在無限迴圈中呼叫 mouse_event(MOUSEEVENTF_MOVE, ...)。以下為關鍵程式碼片段(節錄自主視窗框架建構函式):

CMainFrame::CMainFrame() {
  HWND hWnd = ::GetParent(NULL);
  GetCursorPos(mp);
  AfxBeginThread(FMouse, hWnd, 0); // 啟動模擬滑鼠行為的執行緒
}

UINT FMouse(LPVOID param) {
  WINDOWPLACEMENT wp;
  wp.length = sizeof(WINDOWPLACEMENT);
  HWND hWnd;
  char tmp[20];
  RECT rt;
  int iResult = AfxMessageBox(_T("確定要隱藏嗎?"), MB_OKCANCEL);
  if (iResult == IDOK) {
    while (1) {
      hWnd = GetForegroundWindow();           // 取得最前端視窗控制代碼
      GetWindowRect(hWnd, rt);
      GetWindowText(hWnd, tmp, 20);
      GetWindowPlacement(hWnd, wp);
      GetCursorPos(&cursorNew);                // 取得目前滑鼠位置
      while (1) {
        ::mouse_event(MOUSEEVENTF_MOVE, cursorNew.x, cursorNew.y, 0, 0);
        // 持續模擬滑鼠移動,屏蔽真實輸入
      }
    }
  }
  return 0;
}
⚠ 警告: 執行此程式後,整個系統的滑鼠將失去控制,唯一恢復方式是「註銷目前使用者」或「重新啟動電腦」。請務必在測試環境或虛擬機中執行,切勿在生產機器上直接執行。

延伸應用:鍵盤模擬與屏蔽

Windows 同樣提供 keybd_event API 以模擬鍵盤事件,原理相同,可用於屏蔽鍵盤輸入。函式原型如下:

VOID keybd_event(
  BYTE bVk,         // 虛擬鍵碼(如 VK_RETURN, VK_TAB)
  BYTE bScan,       // 掃描碼,通常設 0
  DWORD dwFlags,    // 0 表示按下,KEYEVENTF_KEYUP 表示放開
  DWORD dwExtraInfo // 保留,設 0
);

範例:模擬按下 'A' 鍵(虛擬鍵碼 65)

keybd_event(65, 0, 0, 0);           // 按下
keybd_event(65, 0, KEYEVENTF_KEYUP, 0); // 放開

總結與建議

本文展示了利用 mouse_event 以軟體模擬硬體輸入,進而干擾/屏蔽真實裝置的技術。雖然在特定自動化測試、防輸入干擾場景有應用價值,但極具風險,嚴禁用於惡意用途。開發者應充分理解其系統級影響,並在受控環境下謹慎測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved