C# WPF 中用代碼模擬鼠標和鍵盤的操作

  原文地址
  C#開發者都知道,在Winform開發中,SendKeys類提供的方法是很實用的。但是可惜的是,在WPF中不能使用這個方法了。
  我們知道,在WPF中非UI線程刷新UI線程,需要使用Dispatcher.Invoke((Action)delegate { /* Your
code is put here */ });
方法。這裏調用System.Windows.Forms.SendKeys.Send()方法會報錯。

  下面這個代碼文件做了一個很好的包裝,可以下載後參考:
  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);
  
  
  Simulation類的定義如下:

//定義是這樣的:

[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,
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章