原創(chuàng)|其它|編輯:郝浩|2009-06-15 17:18:03.000|閱讀 591 次
概述:其實SendKeys類提供的方法蠻好用的,可惜的是WPF中不能用了,說是WPF的消息循環(huán)方式改成了Dispatcher,所以直接調(diào)用System.Windows.Forms.SendKeys.Send()方法會報錯
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
其實SendKeys類提供的方法蠻好用的,可惜的是WPF中不能用了,說是WPF的消息循環(huán)方式改成了Dispatcher,所以直接調(diào)用System.Windows.Forms.SendKeys.Send()方法會報錯. 不過沒關(guān)系, 至少有use32的SendInput可用,通過P/Invoke方式,我們可以模擬鍵盤或鼠標(biāo)操作.
定義是這樣的:
[DllImport("user32.dll", SetLastError = true)] internal static extern int SendInput(int nInputs, ref INPUT mi, int cbSize);
其中的INPUT結(jié)構(gòu)表示一個鍵盤或鼠標(biāo)操作:
[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, };
關(guān)于這些方法或結(jié)構(gòu)的定義在 這個網(wǎng)站上可以查找得到(但不保證百分百靠譜)
下面這個代碼文件做了一個很好的包裝,可以下載后參考:
如何使用呢?
很簡單, 要敲一個鍵, 比如回車:
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");
鼠標(biāo)與之類似,比如:
Mouse.MoveTo(new System.Drawing.Point(x, y)); Mouse.Click(MouseButton.Right);
這里下載DEMO:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:博客園