MFC模擬鼠標點擊


MFC 工程

把以下代碼放到你想要響應的函數里面就行

CPoint pt; 
GetCursorPos(&pt);//獲取鼠標在屏幕的當前位置

SetCursorPos(100,200);//移動到某點坐標
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//點下右鍵
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//松開右鍵
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//點下左鍵
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松開左鍵

 

 

 

BOOL   SetCursorPos( 
     int   X,   //   horizontal   position 
     int   Y   //   vertical   position 
  ); 
  設置鼠標位置。鼠標指針在屏幕像素坐標系統中的X,Y位置 

  這個函數是用來設置Mouse位置的。可以用這個函數來移動mouse在屏幕上的移動。

  另外一個函數功能比較強,即mouse_event()

VOID   mouse_event(
     DWORD   dwFlags,   
     DWORD   dx,   
     DWORD   dy,   
     DWORD   dwData,   
     DWORD   dwExtraInfo 
  );   

  設置mouse狀態。參數說明如下:
  dwFlags   Long,下述標志的一個組合   : 
  MOUSEEVENTF_ABSOLUTE   dx和dy指定鼠標坐標系統中的一個絕對位置。在鼠標坐標系統中,屏幕在水平和垂直方向上均勻分割成65535×65535個單元   
  MOUSEEVENTF_MOVE   移動鼠標   
  MOUSEEVENTF_LEFTDOWN   模擬鼠標左鍵按下   
  MOUSEEVENTF_LEFTUP   模擬鼠標左鍵抬起   
  MOUSEEVENTF_RIGHTDOWN   模擬鼠標右鍵按下   
  MOUSEEVENTF_RIGHTUP   模擬鼠標右鍵按下   
  MOUSEEVENTF_MIDDLEDOWN   模擬鼠標中鍵按下   
  MOUSEEVENTF_MIDDLEUP   模擬鼠標中鍵按下   
  dx   根據是否指定了MOUSEEVENTF_ABSOLUTE標志,指定水平方向的絕對位置或相對運動   
  dy   根據是否指定了MOUSEEVENTF_ABSOLUTE標志,指定垂直方向的絕對位置或相對運動   
  dwData amount   of   wheel   movement 
  dwExtraInfo,通常未用的一個值。用GetMessageExtraInfo函數可取得這個值。可用的值取決於特定的驅動程序。 

  例如:將mouse移動到坐標(450,100)   可用函數:

  SetCursorPos(450,100)   ;   或
  mouse_event(MOUSEEVENTF_MOVE   ,0,450,100,GetMessageExtraInfo());   來實現 

  實現鼠標單擊:
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo()); 
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo   ()); 


  那么,如何模擬mouse不斷的移動和點擊呢?這需要用定時器完成。

  以C為例:

  在初始化程序的時候,設置時鍾:
... 
case   WM_CREATE: 
  ... 
  SetTimer(1,   1000,   NULL); 
  break; 

  這樣就設置了ID號為1   的時鍾事件,   它每秒(1000毫秒)將產生一個   WM_TIMER事件。
  然后我們在WM_TIMER事件中將入相關的處理: 

case   WM_TIMER:

  ... 
  //   mouse   move   code... 
  //   mouse   click   code... 
  break; 


在Delphi中,時鍾是通過一個Timer控件實現的。

關於時鍾事件的運用在此軟件中是很基本的一個概念。幾乎所有的工作都是在時鍾事件中完成的。如需進一步的了解時鍾的用法,請查閱相關資料。 

————————————————————————————————————————————————

vc模擬鍵盤輸入
keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event('M', 0, 0 ,0);
keybd_event('M', 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
    
方法1: 
HWND hwnd=::FindWindow(0, "文檔1"); //假設你要找的窗口標題為“文檔1” 
CWnd::FromHandle(hwnd)->SetForegroundWindow(); 
::PostMessage(hwnd, WM_KEYDOWN, VK_ESCAPE, 0L); //發送ESC按下的鍵盤消息


方法2:這里以向記事本程序發送Ctrl+s按鍵消息為例: 
CWnd *pWnd = FindWindow("Notepad", NULL); 
if (pWnd->GetSafeHwnd()) 

      pWnd->ShowWindow(SW_NORMAL); 
      pWnd->SetForegroundWindow();
      keybd_event(VK_CONTROL, 0, 0, 0); 
      keybd_event('S', 0, 0, 0); 
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); 
      keybd_event('S', 0, KEYEVENTF_KEYUP, 0); 
}

對於其他程序,關鍵就是要找到就收消息的窗口句柄。

::mouse_event(1) 模擬鼠標動作API函數mouse_event,它可以實現模擬鼠標按下和放開等動作。
VOID mouse_event(
      DWORD dwFlags, // 鼠標動作標識。
      DWORD dx, // 鼠標水平方向位置。
      DWORD dy, // 鼠標垂直方向位置。
      DWORD dwData, // 鼠標輪子轉動的數量。
      DWORD dwExtraInfo // 一個關聯鼠標動作輔加信息。
    );
其中,dwFlags表示了各種各樣的鼠標動作和點擊活動,它的常用取值如下:
MOUSEEVENTF_MOVE 表示模擬鼠標移動事件;
MOUSEEVENTF_LEFTDOWN 表示模擬按下鼠標左鍵;
MOUSEEVENTF_LEFTUP 表示模擬放開鼠標左鍵;
MOUSEEVENTF_RIGHTDOWN 表示模擬按下鼠標右鍵;
MOUSEEVENTF_RIGHTUP 表示模擬放開鼠標右鍵;
MOUSEEVENTF_MIDDLEDOWN 表示模擬按下鼠標中鍵;
MOUSEEVENTF_MIDDLEUP 表示模擬放開鼠標中鍵。


符號常量 十六進制值 指定的鼠標或鍵盤按鍵
VK_LBUTTON 01 鼠標左鍵
VK_RBUTTON 02 鼠標右鍵
VK_CANCEL 03 Control-break 過程
VK_MBUTTON 04 鼠標中鍵
VK_BACK 08 BACKSPACE 鍵
VK_TAB   09 TAB 鍵
VK_CLEAR 0C CLEAR 鍵
VK_RETURN 0D ENTER 鍵
VK_SHIFT 10 SHIFT 鍵
VK_CONTROL 11 CTRL 鍵
VK_MENU 12 ALT 鍵
VK_PAUSE 13 PAUSE 鍵
VK_CAPITAL 14 CAPS LOCK 鍵
VK_ESCAPE 1B ESC 鍵
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP 鍵
VK_NEXT 22 PAGE DOWN 鍵
VK_END   23 END 鍵
VK_HOME 24 HOME 鍵
VK_LEFT 25 LEFT ARROW 鍵
VK_UP   26 UP ARROW 鍵
VK_RIGHT 27 RIGHT ARROW 鍵
VK_DOWN 28 DOWN ARROW 鍵
VK_SELECT 29 SELECT 鍵
VK_EXECUTE 2B EXECUTE 鍵
VK_SNAPSHOT 2C PRINT SCREEN鍵(用於Windows 3.0及以后版本)
VK_INSERT 2D INS 鍵
VK_DELETE 2E DEL 鍵
VK_HELP 2F HELP 鍵
///////////////////////////////////////////////////
對於字母鍵和非小鍵盤上的數字鍵,直接在單引號中加入該鍵就行.
比如:
a鍵:'A'
1鍵:'1'
//////////////////////////////////////////////
VK_LWIN 5B Left Windows 鍵 (Microsoft自然鍵盤)
VK_RWIN 5C Right Windows 鍵 (Microsoft自然鍵盤)
VK_APPS 5D Applications 鍵 (Microsoft自然鍵盤)
VK_NUMPAD0 60 數字小鍵盤上的 0 鍵
VK_NUMPAD1 61 數字小鍵盤上的 1 鍵
VK_NUMPAD2 62 數字小鍵盤上的 2 鍵
VK_NUMPAD3 63 數字小鍵盤上的 3 鍵
VK_NUMPAD4 64 數字小鍵盤上的 4 鍵
VK_NUMPAD5 65 數字小鍵盤上的 5 鍵
VK_NUMPAD6 66 數字小鍵盤上的 6 鍵
VK_NUMPAD7 67 數字小鍵盤上的 7 鍵
VK_NUMPAD8 68 數字小鍵盤上的 8 鍵
VK_NUMPAD9 69 數字小鍵盤上的 9 鍵
VK_MULTIPLY 6A Multiply 鍵
VK_ADD   6B Add 鍵
VK_SEPARATOR 6C Separator 鍵
VK_SUBTRACT 6D Subtract 鍵
VK_DECIMAL 6E Decimal 鍵
VK_DIVIDE 6F Divide 鍵
VK_F1 70 F1 鍵
VK_F2 71 F2 鍵
VK_F3 72 F3 鍵
VK_F4 73 F4 鍵
VK_F5 74 F5 鍵
VK_F6 75 F6 鍵
VK_F7 76 F7 鍵
VK_F8 77 F8 鍵
VK_F9 78 F9 鍵
VK_F10 79 F10 鍵
VK_F11 7A F11 鍵
VK_F12 7B F12 鍵
VK_F13 7C F13 鍵
VK_F14 7D F14 鍵
VK_F15 7E F15 鍵
VK_F16 7F F16 鍵
VK_F17 80H F17 鍵
VK_F18 81H F18 鍵
VK_F19 82H F19 鍵
VK_F20 83H F20 鍵
VK_F21 84H F21 鍵
VK_F22 85H F22 鍵
VK_F23 86H F23 鍵
VK_F24 87H F24 鍵
VK_NUMLOCK 90 NUM LOCK 鍵
VK_SCROLL 91 SCROLL LOCK 鍵
VK_ATTN F6 Attn 鍵
VK_CRSEL F7 CrSel 鍵
VK_EXSEL F8 ExSel 鍵
VK_EREOF F9 Erase EOF 鍵
VK_PLAY FA Play 鍵
VK_ZOOM FB Zoom 鍵

VK_OEM_CLEAR FE Clear 鍵

 

轉自:https://blog.csdn.net/plutus_sutulp/article/details/12750349


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM