网站首页   |   操作系统   |   程序设计   |   网络技术   |   软件工程   |   数据库   |   软件应用   |   认证考试   |   网站建设
    平面设计   |   三维动画   |   软件下载   |   源码下载   |   网管技术   |   电子书   |   社区论坛   |   网络安全   |   查询工具    
                             视频教程
中IT学习在线
Google
首页 JAVA NET C# ASP PHP ASP.net VC/VC++ C++/C VB html xml SOA

您现在的位置: IT学习在线 >> 程序设计 >> ASP.net  >> 正文

.net中模拟键盘和鼠标操作

作者:不详  来源:IT学习在线  发布时间 :2009年10月11日 收藏本页收藏本页 减小字体 增大字体

  本文示例源代码或素材下载

  其实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 这个网站上可以查找得到(但不保证百分百靠谱)

  如何使用呢?

  很简单, 要敲一个键, 比如回车:

Keyboard.Press(Key.Enter);
Keyboard.Release(Key.Enter);

  要敲一个组合键:比如Alt+F4Keyboard.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);

[]【责编:佚名】

 推荐文章
· 初探ASP.NET MVC框架
· ASP.NET状态管理之一(概括篇)
· 用动态控件模拟复合控件(上)
· 为VS.NET 2005增加Atlas Scripts的
· ASP.NET页面提前处理问题
· Asp.net MVC Beta 整合 Spring.Net
 今日更新
赞助商广告