C# 模擬鼠標移動和點擊

咱們須要用到的mouse_event函數,位於user32.dll這個庫文件裏面,因此咱們要先聲明引用。html

        [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來得到此附加信息。
返回值:無。post

 

 

程序中咱們直接調用mouse_event函數就能夠了 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);spa

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

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

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

四、使用絕對座標:mouse_event (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0)事件

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

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分別是你要點擊的點的橫座標和縱座標get

 

鍵盤模擬用 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

相關文章
相關標籤/搜索