一個簡單的類比鍵盤滑鼠操作的類,擴充 VirtualKeys 枚舉就可以了,或者直接寫!
using System;
using System.Runtime.InteropServices;
using System.Text;
class Keyboard
{
const uint KEYEVENTF_EXTENDEDKEY = 0x1;
const uint KEYEVENTF_KEYUP = 0x2;
[DllImport("user32.dll")]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
static extern void keybd_event(
byte bVk,
byte bScan,
uint dwFlags,
uint dwExtraInfo
);
public enum VirtualKeys: byte
{
VK_NUMLOCK = 0x90, //數字鎖定鍵
VK_SCROLL = 0x91, //滾動鎖定
VK_CAPITAL = 0x14, //大小寫鎖定
VK_A = 62
}
public static bool GetState(VirtualKeys Key)
{
return (GetKeyState((int)Key)==1);
}
public static void SetState(VirtualKeys Key, bool State)
{
if(State!=GetState(Key))
{
keybd_event(
(byte)Key,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0
);
keybd_event(
(byte)Key,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0
);
}
}
}
樣本:
類比操作
Keyboard.SetState(
VirtualKeys.VK_CAPITAL,
!Keyboard.GetState(VirtualKeys.VK_CAPITAL)
);
得到鍵盤狀態
Keyboard.GetState(VirtualKeys.VK_CAPITAL)
* 十進位值 標識符 IBM相容鍵盤
--------------------------------------------------------------------------------
1 VK_LBUTTON 滑鼠左鍵
2 VK_RBUTTON 滑鼠右鍵
3 VK_CANCEL Ctrl+Break(通常不需要處理)
4 VK_MBUTTON 滑鼠中鍵
8 VK_BACK Backspace
9 VK_TAB Tab
12 VK_CLEAR Num Lock關閉時的數字鍵台5
13 VK_RETURN Enter(或者另一個)
16 VK_SHIFT Shift(或者另一個)
17 VK_CONTROL Ctrl(或者另一個)
18 VK_MENU Alt(或者另一個)
19 VK_PAUSE Pause
20 VK_CAPITAL Caps Lock
27 VK_ESCAPE Esc
32 VK_SPACE Spacebar
33 VK_PRIOR Page Up
34 VK_NEXT Page Down
35 VK_END End
36 VK_HOME Home
37 VK_LEFT 左箭頭
38 VK_UP 上箭頭
39 VK_RIGHT 右箭頭
40 VK_DOWN 下箭頭
41 VK_SELECT 可選
42 VK_PRINT 可選
43 VK_EXECUTE 可選
44 VK_SNAPSHOT Print Screen
45 VK_INSERT Insert
46 VK_DELETE Delete
47 VK_HELP 可選
48~57 無 主鍵盤上的0~9
65~90 無 A~Z
96~105 VK_NUMPAD0~VK_NUMPAD9 Num Lock開啟時數字鍵台上的0~9
106 VK_NULTIPLY 數字鍵台上的*
107 VK_ADD 數字鍵台上的+
108 VK_SEPARATOR 可選
109 VK_SUBTRACT 數字鍵台上的-
110 VK_DECIMAL 數字鍵台上的.
111 VK_DIVIDE 數字鍵台上的/
112~135 VK_F1~VK_F24 功能鍵F1~F24
144 VK_NUMLOCK Num Lock
145 VK_SCROLL Scroll Lock
*/
突然發現在c#裡面原來還有一個 System.Windows.Forms.SendKeys
不過這個只能類比鍵盤
真正能類比滑鼠操作的代碼在這裡!找的我好辛苦啊!
函式宣告:
private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
private readonly int MOUSEEVENTF_LEFTUP = 0x4;
[DllImport("user32")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
調用方法:
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分別是你要點擊的點的橫座標和縱座標