C# 模擬鼠標移動和點擊


我們需要用到的mouse_event函數,位於user32.dll這個庫文件里面,所以我們要先聲明引用。

        [System.Runtime.InteropServices.DllImport("user32")]
        private static extern int mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        //移動鼠標 
        const int MOUSEEVENTF_MOVE = 0x0001;
        //模擬鼠標左鍵按下 
        const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        //模擬鼠標左鍵抬起 
        const int MOUSEEVENTF_LEFTUP = 0x0004;
        //模擬鼠標右鍵按下 
        const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        //模擬鼠標右鍵抬起 
        const int MOUSEEVENTF_RIGHTUP = 0x0010;
        //模擬鼠標中鍵按下 
        const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
        //模擬鼠標中鍵抬起 
        const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        //標示是否采用絕對坐標 
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;
        //模擬鼠標滾輪滾動操作,必須配合dwData參數
        const int MOUSEEVENTF_WHEEL = 0x0800;


        public static void TestMoveMouse()
        {
            Console.WriteLine("模擬鼠標移動5個像素點。");
            //mouse_event(MOUSEEVENTF_MOVE, 50, 50, 0, 0);//相對當前鼠標位置x軸和y軸分別移動50像素
            mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -20, 0);//鼠標滾動,使界面向下滾動20的高度
        }

 

dwFlags:標志位集,指定點擊按鈕和鼠標動作的多種情況。此參數里的各位可以是下列值的任何合理組合:

  • MOUSEEVENTF_ABSOLUTE:表明參數dX,dy含有規范化的絕對坐標。如果不設置此位,參數含有相對數據:相對於上次位置的改動位置。此標志可被設置,也可不設置,不管鼠標的類型或與系統相連的類似於鼠標的設備的類型如何。要得到關於相對鼠標動作的信息,參見下面備注部分。
  • MOUSEEVENTF_MOVE:表明發生移動。
  • MOUSEEVENTF_LEFTDOWN:表明接按下鼠標左鍵。
  • MOUSEEVENTF_LEFTUP:表明松開鼠標左鍵。
  • MOUSEEVENTF_RIGHTDOWN:表明按下鼠標右鍵。
  • MOUSEEVENTF_RIGHTUP:表明松開鼠標右鍵。
  • MOUSEEVENTF_MIDDLEDOWN:表明按下鼠標中鍵。
  • MOUSEEVENTF_MIDDLEUP:表明松開鼠標中鍵。
  • MOUSEEVENTF_WHEEL:在Windows NT中如果鼠標有一個輪,表明鼠標輪被移動。移動的數量由dwData給出。


dx:指定鼠標沿x軸的絕對位置或者從上次鼠標事件產生以來移動的數量,依賴於MOUSEEVENTF_ABSOLUTE的設置。給出的絕對數據作為鼠標的實際X坐標;給出的相對數據作為移動的mickeys數。一個mickey表示鼠標移動的數量,表明鼠標已經移動。
dy:指定鼠標沿y軸的絕對位置或者從上次鼠標事件產生以來移動的數量,依賴於MOUSEEVENTF_ABSOLUTE的設置。給出的絕對數據作為鼠標的實際y坐標,給出的相對數據作為移動的mickeys數。
dwData:如果dwFlags為MOUSEEVENTF_WHEEL,則dwData指定鼠標輪移動的數量。正值表明鼠標輪向前轉動,即遠離用戶的方向;負值表明鼠標輪向后轉動,即朝向用戶。一個輪擊定義為WHEEL_DELTA,即120。如果dwFlagsS不是MOUSEEVENTF_WHEEL,則dWData應為零。
dwExtralnfo:指定與鼠標事件相關的附加32位值。應用程序調用函數GetMessageExtraInfo來獲得此附加信息。
返回值:無。

 

 

程序中我們直接調用mouse_event函數就可以了 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);

1、這里是鼠標左鍵按下和松開兩個事件的組合即一次單擊: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

2、模擬鼠標右鍵單擊事件: mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )

3、兩次連續的鼠標左鍵單擊事件 構成一次鼠標雙擊事件: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

4、使用絕對坐標:mouse_event (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0)

     需要說明的是,如果沒有使用MOUSEEVENTF_ABSOLUTE,函數默認的是相對於鼠標當前位置的點,如果dx,和dy,用0,0表示,這函數認為是當前鼠標所在的點。

5、直接設定絕對坐標並單擊 mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 其中X,Y分別是你要點擊的點的橫坐標和縱坐標

 

鍵盤模擬用 Keybd_event函數

Keybd_event能觸發一個按鍵事 件,也就是說回產生一個WM_KEYDOWN或WM_KEYUP消息。當然也可以用產生這兩個消息來模擬按鍵,但是沒有直接用這個函數方便。

函數原型:void keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo );

參數說明:
bVk 虛擬按鍵代碼編號
bScan 按鍵的的硬件掃描代碼
dwFlags 控制功能操作的各個方面;KEYEVENTF_EXTENDEDKEY:如果指定,掃描代碼前面有一個前綴字節,其值為0xE0;KEYEVENTF_KEYUP:如果指定,則抬起按鍵。
dwExtraInfo 按鍵動作的附加信息

返回值:無返回值

Keybd_event共有四個參數:
第一個為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。
第二個參數為掃描碼,一般不用 設置,用0代替就行。
第三個參數為選項標志,如果為keydown則置0即可,如果為keyup則設成“KEYEVENTF_KEYUP”,
第四個參數一 般也是置0即可。例如:實現模擬按下i鍵,其中的 0x49 表示 i 鍵的虛擬鍵值。

 

鍵盤鍵碼對照表:

按鍵

鍵碼

按鍵

鍵碼

按鍵

鍵碼

按鍵

鍵碼

A

65

6(數字鍵盤)

102

;

59

:

58

B

66

7(數字鍵盤)

103

=

61

+

43

C

67

8(數字鍵盤)

104

,

44

60

D

68

9(數字鍵盤)

105

-

45

_

95

E

69

*

106

.

46

62

F

70

!

33

/

47

?

63

G

71

Enter

13

`

96

~

126

H

72

@

64

[

91

{

123

I

73

#

35

\

92

|

124

J

74

$

36

}

125

]

93

K

75

F1

112

a

97

b

98

L

76

F2

113

c

99

d

100

M

77

F3

114

e

101

f

102

N

78

F4

115

g

103

h

104

O

79

F5

116

i

105

j

106

P

80

F6

117

k

107

l

108

Q

81

F7

118

m

109

n

110

R

82

F8

119

o

111

p

112

S

83

F9

120

q

113

r

114

T

84

F10

121

s

115

t

116

U

85

F11

122

u

117

v

118

V

86

F12

123

w

119

x

120

W

87

Backspace

8

y

121

z

122

X

88

Tab

9

0(數字鍵盤)

96

Up Arrow

38

Y

89

Clear

12

1(數字鍵盤)

97

Right Arrow

39

Z

90

Shift

16

2(數字鍵盤)

98

Down Arrow

40

0(小鍵盤)

48

Control

17

3(數字鍵盤)

99

Insert

45

1(小鍵盤)

49

Alt

18

4(數字鍵盤)

100

Delete

46

2(小鍵盤)

50

Cap Lock

20

5(數字鍵盤)

101

Num Lock

144

3(小鍵盤)

51

Esc

27

2(數字鍵盤)

98

Down Arrow

40

4(小鍵盤)

52

Spacebar

32

3(數字鍵盤)

99

Insert

45

5(小鍵盤)

53

Page Up

33

4(數字鍵盤)

100

Delete

46

6(小鍵盤)

54

Page Down

34

5(數字鍵盤)

101

Num Lock

144

7(小鍵盤)

55

End

35

 

8(小鍵盤)

56

Home

36

 

9(小鍵盤)

57

Left Arrow

37

 

 

 

具體可參考我上一篇文章:C#模擬鼠標、鍵盤操作

 

出處:https://www.cnblogs.com/soundcode/p/9777526.html


免責聲明!

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



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