亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#采用mouse_event函數實現模擬鼠標功能

2020-01-24 01:36:20
字體:
來源:轉載
供稿:網友

下面我通過代碼為大家分享下C#模擬鼠標,具體內容如下:

想必有很多人在項目開發中可能遇見需要做模擬鼠標點擊的小功能,很多人會在百度過后采用mouse_event這個函數,不過我并不想討論如何去使用mouse_event函數怎么去使用,因為那沒有多大意義。

static void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo) {  int x = dx, y = dy;  edit_position(dwFlags, dx, dy, ref x, ref y);  IntPtr hWndFromPoint = WindowFromPoint(x, y);  screen_to_client(hWndFromPoint, ref x, ref y);  send_message(hWndFromPoint, dwFlags, cButtons, x, y); } 

 
上述代碼你發現了什么?如果你發現說明你知道了本文到底在寫什么東東 說不定你會有一些興趣看下去,不過想到我如今混那么凄慘 在工地上做干活 不過也還好。

鼠標點擊目標時會向鼠標所點擊目標窗口投遞消息,根據鼠標的按鍵、狀態不同會投遞不同的消息,一個完整的“鼠標左鍵單擊”事件過程為“WM_LBUTTONDOWN +

WM_LBUTTONUP”即鼠標“先左鍵按下 + 后左鍵抬起”,由于mouse_event可以模擬鼠標點擊過程而不是直接性一次完整的鼠標單擊過程,所以同樣存在“按下、抬起”

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE, -450, 0, 1, 0); 
mouse_event在沒有提供MOUSEEVENTF_MOVE量時光標不會移動到相對位置,“光標相對位置=光標現行位置+新光標位置”如果提供量“MOUSEEVENTF_ABSOLUTE”絕對位置,則會以“新光標位置”為準而不會添加“光標現行位置”

static void edit_position(int dwFlags, int dx, int dy, ref int x, ref int y) {  Point pos = MousePosition;  x = x + pos.X;  y = y + pos.Y;  if ((dwFlags | MOUSEEVENTF_ABSOLUTE) == dwFlags)   SetCursorPos(dx, dy);  if ((dwFlags | MOUSEEVENTF_MOVE) == dwFlags)   SetCursorPos(x, y); } 

edit_position函數主要用于對MOUSEEVENTF_MOVE于MOUSEEVENTF_ABSOLUTE

相對/絕對光標位置修改的一個支持

static void send_message(IntPtr hWnd, int dwFlags, int cButtons, int x, int y) {  if ((dwFlags | MOUSEEVENTF_LEFTDOWN) == dwFlags)   SendMessage(hWnd, WM_LBUTTONDOWN, cButtons, MakeDWord(x, y));  if ((dwFlags | MOUSEEVENTF_LEFTUP) == dwFlags)   SendMessage(hWnd, WM_LBUTTONUP, cButtons, MakeDWord(x, y));  if ((dwFlags | MOUSEEVENTF_RIGHTDOWN) == dwFlags)   SendMessage(hWnd, WM_RBUTTONDOWN, cButtons, MakeDWord(x, y));  if ((dwFlags | MOUSEEVENTF_RIGHTUP) == dwFlags)   SendMessage(hWnd, WM_RBUTTONUP, cButtons, MakeDWord(x, y));  if ((dwFlags | MOUSEEVENTF_MIDDLEDOWN) == dwFlags)   SendMessage(hWnd, WM_MBUTTONDOWN, cButtons, MakeDWord(x, y));  if ((dwFlags | MOUSEEVENTF_MIDDLEUP) == dwFlags)   SendMessage(hWnd, WM_MBUTTONUP, cButtons, MakeDWord(x, y)); } 

 

send_message函數主要用于模擬鼠標點擊的過程,上面我提到“先左鍵按下 + 后左鍵抬起”在上面的代碼中你會看的清楚的不得了,如果相反你可以去嘗試一番會有什么后果與其說

不如你們自己做更要來的快些。

static int MakeDWord(int low, int high) {  return low + (high * Abs(~ushort.MaxValue)); } static int Abs(int value) {  return ((value >> 31) ^ value) - (value >> 31); } MakeDWord / 合并整數,函數主要是把兩個short合并為一個int,分為low、high兩部分  static bool screen_to_client(IntPtr hwnd, ref int x, ref int y) {  bool bRetVal = false;  Point lpptPos = new Point(x, y);  if ((bRetVal = ScreenToClient(hwnd, ref lpptPos)))  {   x = lpptPos.X;   y = lpptPos.Y;  }  return bRetVal; } screen_to_client函數故名思意,它主要用于把屏幕上的坐標轉換到窗口客戶上對應坐標 public const int WM_LBUTTONDOWN = 513; // 鼠標左鍵按下 public const int WM_LBUTTONUP = 514; // 鼠標左鍵抬起 public const int WM_RBUTTONDOWN = 516; // 鼠標右鍵按下 public const int WM_RBUTTONUP = 517; // 鼠標右鍵抬起 public const int WM_MBUTTONDOWN = 519; // 鼠標中鍵按下 public const int WM_MBUTTONUP = 520; // 鼠標中鍵抬起 public const int MOUSEEVENTF_MOVE = 0x0001; // 移動鼠標   public const int MOUSEEVENTF_LEFTDOWN = 0x0002; // 鼠標左鍵按下  public const int MOUSEEVENTF_LEFTUP = 0x0004; // 鼠標左鍵抬起  public const int MOUSEEVENTF_RIGHTDOWN = 0x0008; // 鼠標右鍵按下  public const int MOUSEEVENTF_RIGHTUP = 0x0010; // 鼠標右鍵抬起   public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; // 鼠標中鍵按下 public const int MOUSEEVENTF_MIDDLEUP = 0x0040; // 鼠標中鍵抬起   public const int MOUSEEVENTF_ABSOLUTE = 0x8000; // 絕對坐標 [DllImport("user32.dll", SetLastError = true)] public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, int lParam); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr WindowFromPoint(int xPoint, int yPoint); [DllImport("user32.dll", SetLastError = true)] public static extern int SetCursorPos(int x, int y); [DllImport("user32.dll", SetLastError = true)] public static extern bool ScreenToClient(IntPtr hWnd, ref Point lppt); // [DllImport("user32", SetLastError = true)] // public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 


鼠標右鍵單擊(靜默):

復制代碼 代碼如下:

mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 1, 0); 

鼠標左鍵雙擊(靜默):

復制代碼 代碼如下:

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 2, 0); 

鼠標移動(相對位置):

復制代碼 代碼如下:

mouse_event(MOUSEEVENTF_MOVE, 100, 50, 0, 0); 

鼠標移動(絕對位置):

復制代碼 代碼如下:

mouse_event(MOUSEEVENTF_ABSOLUTE, 100, 50, 0, 0); 

以上內容比較多請認真學習,希望能夠幫助到大家。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频播放| 欧美大片在线影院| 精品成人久久av| 成人亚洲综合色就1024| 中文字幕日韩视频| 国产97色在线| 亚洲精品免费av| 久久99精品久久久久久噜噜| 久青草国产97香蕉在线视频| 亚洲欧美三级伦理| 久久久在线免费观看| 国产精品天天狠天天看| 日韩在线不卡视频| 操人视频在线观看欧美| 91网在线免费观看| 欧美视频在线观看免费| 国产成人精品国内自产拍免费看| 精品动漫一区二区| 久久久av一区| 91牛牛免费视频| 色中色综合影院手机版在线观看| 日韩在线视频观看正片免费网站| 精品久久香蕉国产线看观看gif| 日本精品免费观看| 91亚洲国产精品| 在线精品国产欧美| 国产精品草莓在线免费观看| 亚州av一区二区| 久久中文字幕视频| 亚洲free性xxxx护士hd| 久热在线中文字幕色999舞| 91精品免费久久久久久久久| 亚洲色图综合久久| 亚洲毛片在线免费观看| 亚洲性av网站| 亚洲自拍偷拍色图| 98精品国产自产在线观看| 色琪琪综合男人的天堂aⅴ视频| 色多多国产成人永久免费网站| 久久99视频精品| 亚洲成人精品在线| 91精品久久久久久综合乱菊| 亚洲a成v人在线观看| 最近2019好看的中文字幕免费| 欧美高清视频在线观看| 欧美激情在线有限公司| 一区二区三区视频免费在线观看| 欧美一级免费看| 欧美在线影院在线视频| 国产精品亚洲片夜色在线| 日韩精品一区二区三区第95| 欧美另类极品videosbestfree| 亚洲激情电影中文字幕| 91久久久国产精品| 狠狠躁天天躁日日躁欧美| 一区二区欧美激情| 在线日韩欧美视频| 久久久午夜视频| 亚洲第一页自拍| 国产欧美精品xxxx另类| 91高清在线免费观看| 欧美日韩免费在线| 国产精品热视频| 久久久久99精品久久久久| 欧美激情在线播放| 97免费在线视频| 欧美视频一二三| 欧美激情第99页| 欧洲亚洲在线视频| 91高潮精品免费porn| 日韩大陆欧美高清视频区| 欧美国产日韩一区二区| 亚洲精品免费网站| 欧美激情a∨在线视频播放| 亚洲色图激情小说| 久久久视频精品| 精品久久久久久中文字幕大豆网| 亚洲男人的天堂网站| 欧美最猛性xxxxx免费| 欧美激情视频网| 国产精品偷伦免费视频观看的| 久久国产精品久久国产精品| 久久夜精品va视频免费观看| 亚洲成色777777在线观看影院| 不卡av在线播放| 色噜噜国产精品视频一区二区| 国产69精品久久久久久| 国产91在线播放九色快色| 68精品国产免费久久久久久婷婷| 欧美电影免费观看高清| 深夜精品寂寞黄网站在线观看| 91久久久久久久久久| 精品在线欧美视频| 亚洲精品久久久久中文字幕欢迎你| 少妇精69xxtheporn| 欧美日韩在线另类| 欧美日韩精品中文字幕| 成人福利免费观看| 不卡av日日日| 一级做a爰片久久毛片美女图片| 韩国日本不卡在线| 国产精品自产拍在线观看中文| 国产一区二区三区在线观看网站| 精品中文字幕在线观看| 综合国产在线观看| 亚洲欧美成人在线| 精品日韩视频在线观看| 这里只有精品丝袜| 国产精品91免费在线| 中文在线资源观看视频网站免费不卡| 国产精品亚洲一区二区三区| 精品香蕉一区二区三区| 欧美国产一区二区三区| 精品日本高清在线播放| 日本19禁啪啪免费观看www| 日韩中文在线视频| 国产精品视频成人| 亚洲午夜未删减在线观看| 亚洲久久久久久久久久久| 欧美国产日本在线| 九九九热精品免费视频观看网站| 国产亚洲精品高潮| 国产中文字幕亚洲| 日韩有码视频在线| 8090成年在线看片午夜| 国产日韩精品在线| 久久精品亚洲94久久精品| 欧美成人在线免费视频| 久久久久久久国产| 2019中文字幕免费视频| 成人网在线免费观看| 成人中文字幕+乱码+中文字幕| 色综合久久久久久中文网| 国产精品自产拍在线观| 欧美男插女视频| 97在线日本国产| 97视频色精品| 欧美成人中文字幕| 精品性高朝久久久久久久| 91免费综合在线| 精品国产一区二区三区久久久狼| 欧美猛男性生活免费| 国产精品69久久| 亚洲欧洲自拍偷拍| 精品成人av一区| 国产精品av电影| 久久视频在线看| 久久国产精品首页| 亚洲欧美激情一区| 欧美俄罗斯性视频| 久久精品国产精品亚洲| 亚洲国产婷婷香蕉久久久久久| 亚洲男人天堂古典| 国产精品久久久久久久美男| 日韩中文字幕在线播放| 狠狠久久五月精品中文字幕| 国产精品一区二区三区久久| 欧美日韩成人黄色| 久久久91精品国产一区不卡| 国语自产精品视频在线看| 欧美视频国产精品| 欧美激情第一页xxx| 亚洲伊人成综合成人网| 国产成人自拍视频在线观看|