C#模拟键盘鼠标事件-SendKeys2007-09-18 15:13 7689人阅读评论(1) 收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys 的一些特殊键代码表。
键代码BACKSPACE {BACKSPACE}、{BS} 或{BKSP}BREAK {BREAK}CAPS LOCK {CAPSLOCK}DEL 或DELETE {DELETE} 或{DEL}DOWN ARROW(下箭头键){DOWN}END {END}ENTER {ENTER} 或~ESC {ESC}HELP {HELP}HOME {HOME}INS 或INSERT {INSERT} 或{INS}LEFT ARROW(左箭头键){LEFT}NUM LOCK {NUMLOCK}PAGE DOWN {PGDN}PAGE UP {PGUP}PRINT SCREEN {PRTSC}(保留,以备将来使用)RIGHT ARROW(右箭头键){RIGHT}SCROLL LOCK {SCROLLLOCK}TAB {TAB}UP ARROW(上箭头键){UP}F1 {F1}F2 {F2}F3 {F3}F4 {F4}F5 {F5}F6 {F6}F7 {F7}F8 {F8}F9 {F9}F10 {F10}F11 {F11}F12 {F12}F13 {F13}F14 {F14}F15 {F15}F16 {F16}数字键盘加号{ADD}数字键盘减号{SUBTRACT}数字键盘乘号{MULTIPLY}数字键盘除号{DIVIDE}若要指定与SHIFT、CTRL 和ALT 键的任意组合一起使用的键,请在这些键代码之前加上以下一个或多个代码:键代码SHIFT + (SHIFT="+")CTRL ^ (CTRL="^") 如果输入ALT % private void button1_Click(object sender, System.EventArgs e) {//英文输入this.richTextBox1.Focus();for(int i=65;i<91;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(int i=97;i<123;i++){char Letter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}private void button3_Click(object sender, System.EventArgs e) {//数字输入this.richTextBox1.Focus();for(int i=0;i<10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}private void button4_Click(object sender, System.EventArgs e) {//Backspacethis.richTextBox1.Focus();SendKeys.Send("{Backspace}");}private void button5_Click(object sender, System.EventArgs e) {//Homethis.richTextBox1.Focus();SendKeys.Send("{Home}");}private void button6_Click(object sender, System.EventArgs e) {//Endthis.richTextBox1.Focus();SendKeys.Send("{End}");}private void button7_Click(object sender, System.EventArgs e) {//Enterthis.richTextBox1.Focus();SendKeys.Send("{Enter}");private void button8_Click(object sender, System.EventArgs e) {//Deletethis.richTextBox1.Focus();SendKeys.Send("{Delete}");}private void button2_Click(object sender, System.EventArgs e) {//Shift+Homethis.richTextBox1.Focus();SendKeys.Send("+{Home}");}private void button9_Click(object sender, System.EventArgs e) {//Shift+Endthis.richTextBox1.Focus();SendKeys.Send("+{End}");}看下方法的说明public class SendKeys : System.ObjectSystem.Windows.Forms 的成员摘要:提供将键击发送到应用程序的方法。
public static void Send ( System.String keys ) System.Windows.Forms.SendKeys 的成员摘要:向活动应用程序发送击键。
public static void Sleep ( System.TimeSpan timeout ) System.Threading.Thread 的成员摘要:将当前线程阻塞指定的时间。
public static void Flush ( )System.Windows.Forms.SendKeys 的成员2.模拟鼠标有时,我们需在我们的程序中模拟鼠标的移动、点击等动作。
——比如,一个再现用户操作的宏,或者一个演示操作方法的Demo程序。
那么,我们在.Net中如何实现呢?.Net并没有提供改变鼠标指针位置、模拟点击操作的函数;但是Windows API提供了。
其中一个是:[DllImport("user32.dll")]static extern bool SetCursorPos(int X, int Y);该函数可以改变鼠标指针的位置。
其中X,Y是相对于屏幕左上角的绝对位置。
另一个函数是:[DllImport("user32.dll")]static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);这个函数不仅可以设置鼠标指针绝对的位置,而且可以以相对坐标来设置。
另外,该函数还可以模拟鼠标左右键点击、鼠标滚轮操作等。
其中的MouseEventFlag是一个基于uint类型的枚举,定义如下:[Flags]enum MouseEventFlag : uint{Move = 0x0001,LeftDown = 0x0002,LeftUp = 0x0004,RightDown = 0x0008,RightUp = 0x0010,MiddleDown = 0x0020,MiddleUp = 0x0040,XDown = 0x0080,XUp = 0x0100,Wheel = 0x0800,VirtualDesk = 0x4000,Absolute = 0x8000}关于这两个函数的详细说明,可以查看MSDN Library或者Windows的Platform SDK文档。
下面的演示程序(完整版源代码, 2005/C#)演示了使用上面的函数,控制鼠标移动到任务栏并点击“开始”按钮的方法。
(该程序使用了FindWindowEx等API函数来查找任务栏及开始菜单)点这里下载posted on 2007-08-07 22:01 Thunderdanky阅读(185) 评论(3)编辑收藏所属分类: .NET技术文章FeedBack:# re: C#模拟键盘鼠标事件2007-08-07 22:01 | Thunderdanky看一个参考MSDN上的如何:在代码中模拟鼠标和键盘事件Windows 窗体提供以编程方式模拟鼠标和键盘输入的几个选项。
本主题提供这些选项的概述。
模拟鼠标输入模拟鼠标事件的最佳方法是调用引发要模拟的鼠标事件的OnEventName 方法。
此选项通常只在自定义控件和窗体中是可能的,因为引发事件的方法受保护,而且不能从控件或窗体外部访问。
例如,下面的步骤阐释如何用代码模拟单击鼠标右键的事件。
以编程方式单击鼠标右键创建一个Button 属性设置为System.Windows.Forms.MouseButtons.Right 值的MouseEventArgs。
将此MouseEventArgs 用作参数调用OnMouseClick 方法。
有关自定义控件的更多信息,请参见设计时开发Windows 窗体控件。
还有其他模拟鼠标输入的方法。
例如,可以通过编程方式设置一个表示通常通过鼠标输入设置的状态的控件属性(如CheckBox 控件的Checked 属性),或者您可以直接调用附加到要模拟的事件的委托。
模拟键盘输入虽然您可以通过使用上面讨论的鼠标输入策略来模拟键盘输入,但Windows 窗体还提供了用于将键击发送到活动应用程序的SendKeys 类。
警告如果您的应用程序打算用于可以使用各种键盘的国际使用,则使用System.Windows.Forms.SendKeys.Send(System.String) 可能产生不可预知的结果,因而应当避免。
注意SendKeys 类已针对 .NET Framework 3.0 进行了更新,能够用于在Windows Vista 上运行的应用程序中。
Windows Vista 增强的安全性(称为用户账户控件或UAC)使以前的实现无法按预期方式工作。
SendKeys 类容易出现计时问题,有些开发人员必须解决这个问题。