å
¶å®SendKeysç±»æä¾çæ¹æ³è®å¥½ç¨ç,å¯æçæ¯WPFä¸ä¸è½ç¨äº,说æ¯WPFçæ¶æ¯å¾ªç¯æ¹å¼æ¹æäºDispatcher,æ以ç´æ¥è°ç¨System.Windows.Forms.SendKeys.Send()æ¹æ³ä¼æ¥é. ä¸è¿æ²¡å
³ç³», è³å°æuse32çSendInputå¯ç¨,éè¿P/Invokeæ¹å¼,æ们å¯ä»¥æ¨¡æé®çæé¼ æ æä½.
å®ä¹æ¯è¿æ ·ç:
[DllImport("user32.dll", SetLastError = true)]
internal static extern int SendInput(int nInputs, ref INPUT mi, int cbSize);
å
¶ä¸çINPUTç»æ表示ä¸ä¸ªé®çæé¼ æ æä½:
[StructLayout(LayoutKind.Sequential)]
internal struct INPUT
{
internal int type;
internal INPUTUNION union;
};
[StructLayout(LayoutKind.Explicit)]
internal struct INPUTUNION
{
[FieldOffset(0)]
internal MOUSEINPUT mouseInput;
[FieldOffset(0)]
internal KEYBDINPUT keyboardInput;
};
[StructLayout(LayoutKind.Sequential)]
internal struct MOUSEINPUT
{
internal int dx;
internal int dy;
internal int mouseData;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
};
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBDINPUT
{
internal short wVk;
internal short wScan;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
};
[Flags]
internal enum SendMouseInputFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
Absolute = 0x8000,
};
å
³äºè¿äºæ¹æ³æç»æçå®ä¹å¨
http://www.pinvoke.net/index.aspx è¿ä¸ªç½ç«ä¸å¯ä»¥æ¥æ¾å¾å°(ä½ä¸ä¿è¯ç¾åç¾é è°±)
ä¸é¢è¿ä¸ªä»£ç æ件åäºä¸ä¸ªå¾å¥½çå
è£
,å¯ä»¥ä¸è½½ååè:
Simulation.zip
å¦ä½ä½¿ç¨å¢?
å¾ç®å, è¦æ²ä¸ä¸ªé®, æ¯å¦å车:
Keyboard.Press(Key.Enter);
Keyboard.Release(Key.Enter);
è¦æ²ä¸ä¸ªç»åé®:æ¯å¦Alt+F4
Keyboard.Press(Key.LeftAlt);
Keyboard.Press(Key.F4);
Keyboard.Release(Key.LeftAlt);
Keyboard.Release(Key.F4);
è¦æ²ä¸æ®µæå:
Keyboard.Type("notepad");
é¼ æ ä¸ä¹ç±»ä¼¼,æ¯å¦:
Mouse.MoveTo(new System.Drawing.Point(x, y));
Mouse.Click(MouseButton.Right);