原創|其它|編輯:郝浩|2009-06-15 17:18:03.000|閱讀 585 次
概述:其實SendKeys類提供的方法蠻好用的,可惜的是WPF中不能用了,說是WPF的消息循環方式改成了Dispatcher,所以直接調用System.Windows.Forms.SendKeys.Send()方法會報錯
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
其實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, };
關于這些方法或結構的定義在 這個網站上可以查找得到(但不保證百分百靠譜)
下面這個代碼文件做了一個很好的包裝,可以下載后參考:
如何使用呢?
很簡單, 要敲一個鍵, 比如回車:
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);
這里下載DEMO:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園