您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > C#模拟键盘鼠标事件-SendKeys
C#模拟键盘鼠标事件-SendKeys2007-09-1815:137689人阅读评论(1)收藏举报1.模拟键盘事件System.Windows.Forms.SendKeys以下是SendKeys的一些特殊键代码表。键代码BACKSPACE{BACKSPACE}、{BS}或{BKSP}BREAK{BREAK}CAPSLOCK{CAPSLOCK}DEL或DELETE{DELETE}或{DEL}DOWNARROW(下箭头键){DOWN}END{END}ENTER{ENTER}或~ESC{ESC}HELP{HELP}HOME{HOME}INS或INSERT{INSERT}或{INS}LEFTARROW(左箭头键){LEFT}NUMLOCK{NUMLOCK}PAGEDOWN{PGDN}PAGEUP{PGUP}PRINTSCREEN{PRTSC}(保留,以备将来使用)RIGHTARROW(右箭头键){RIGHT}SCROLLLOCK{SCROLLLOCK}TAB{TAB}UPARROW(上箭头键){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%privatevoidbutton1_Click(objectsender,System.EventArgse){//英文输入this.richTextBox1.Focus();for(inti=65;i91;i++){charLetter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}for(inti=97;i123;i++){charLetter=(char)i;SendKeys.Send(Letter.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}privatevoidbutton3_Click(objectsender,System.EventArgse){//数字输入this.richTextBox1.Focus();for(inti=0;i10;i++){SendKeys.Send(i.ToString());System.Threading.Thread.Sleep(100);SendKeys.Flush();}}privatevoidbutton4_Click(objectsender,System.EventArgse){//Backspacethis.richTextBox1.Focus();SendKeys.Send({Backspace});}privatevoidbutton5_Click(objectsender,System.EventArgse){//Homethis.richTextBox1.Focus();SendKeys.Send({Home});}privatevoidbutton6_Click(objectsender,System.EventArgse){//Endthis.richTextBox1.Focus();SendKeys.Send({End});}privatevoidbutton7_Click(objectsender,System.EventArgse){//Enterthis.richTextBox1.Focus();SendKeys.Send({Enter});}privatevoidbutton8_Click(objectsender,System.EventArgse){//Deletethis.richTextBox1.Focus();SendKeys.Send({Delete});}privatevoidbutton2_Click(objectsender,System.EventArgse){//Shift+Homethis.richTextBox1.Focus();SendKeys.Send(+{Home});}privatevoidbutton9_Click(objectsender,System.EventArgse){//Shift+Endthis.richTextBox1.Focus();SendKeys.Send(+{End});}看下方法的说明publicclassSendKeys:System.ObjectSystem.Windows.Forms的成员摘要:提供将键击发送到应用程序的方法。publicstaticvoidSend(System.Stringkeys)System.Windows.Forms.SendKeys的成员摘要:向活动应用程序发送击键。publicstaticvoidSleep(System.TimeSpantimeout)System.Threading.Thread的成员摘要:将当前线程阻塞指定的时间。publicstaticvoidFlush()System.Windows.Forms.SendKeys的成员2.模拟鼠标有时,我们需在我们的程序中模拟鼠标的移动、点击等动作。——比如,一个再现用户操作的宏,或者一个演示操作方法的Demo程序。那么,我们在.Net中如何实现呢?.Net并没有提供改变鼠标指针位置、模拟点击操作的函数;但是WindowsAPI提供了。其中一个是:[DllImport(user32.dll)]staticexternboolSetCursorPos(intX,intY);该函数可以改变鼠标指针的位置。其中X,Y是相对于屏幕左上角的绝对位置。另一个函数是:[DllImport(user32.dll)]staticexternvoidmouse_event(MouseEventFlagflags,intdx,intdy,uintdata,UIntPtrextraInfo);这个函数不仅可以设置鼠标指针绝对的位置,而且可以以相对坐标来设置。另外,该函数还可以模拟鼠标左右键点击、鼠标滚轮操作等。其中的MouseEventFlag是一个基于uint类型的枚举,定义如下:[Flags]enumMouseEventFlag: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}关于这两个函数的详细说明,可以查看MSDNLibrary或者Windows的PlatformSDK文档。下面的演示程序(完整版源代码,VS.Net2005/C#)演示了使用上面的函数,控制鼠标移动到任务栏并点击“开始”按钮的方法。(该程序使用了FindWindowEx等API函数来查找任务栏及开始菜单)点这里下载postedon2007-08-0722:01Thunderdanky阅读(185)评论(3)编辑收藏所属分类:.NET技术文章FeedBack:#re:C#模拟键盘鼠标事件2007-08-0722: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类已针对.NETFramework3.0进行了更新,能够用于在WindowsVista上运行的应用程序中。WindowsVista增强的安全性(称为用户账户控件或UAC)使以前的实现无法按预期方式工作。SendKeys类容易出现计时问题,有些开发人员必须解决这个问题。更新的实现仍然容易发生计时问题,但速度略有提高,并且可能要求更改解决方法。SendKeys类首先会尝试使用以前的实现,失败后再使用新的实现。因此,SendKeys类的行为可能因操作系统的不同而有所差异。此外,当SendKeys类使用新的实现时,SendWait方法在消息被发送到另一进程时不会等待消息的处理。如果您的应用程序依赖于不受操作系统影响的一致性行为,则可通过向app.config文件添加以下应用程序设置,强制SendKeys类使用新的实现。appSettingsaddkey=SendKeysvalue=SendInput//appSettings要强制SendKeys类使用以前的实现,请改用值JournalHook。向同一应用程序发送键击调用SendKeys类的Send或SendWait方法。应用程序的活动控件将接收指定的键击。下面的代码示例使用Send在用户双击窗体的图面时模拟按Enter键。此示例假定一个Form,该窗体具有单个Tab键索引为0的Button控件。VisualBasic复制代码'Sendakeytothebuttonwhentheuserdouble-clicksanywhere'ontheform.PrivateSubForm1_DoubleClick(ByValsenderAsObject,_ByValeAsEventArgs)HandlesMe.DoubleClick'Sendtheenterkeytothebutton,whichraisestheclick'eventforthebutton.Thisworksbecausethetabstopof'thebuttonis0.SendKeys.Send({ENTER})EndSubC#复制代码//Sendakeytothebuttonwhentheuserdouble-clicksanywhere//ontheform.privatevoidForm1_DoubleClick(objectsender,EventArgse){//Sendtheenterkeytothebutton,whichraisestheclick//eventforthebutton.T
本文标题:C#模拟键盘鼠标事件-SendKeys
链接地址:https://www.777doc.com/doc-3258154 .html