您的位置:首页 > 编程语言 > C#

(转)C#模拟键盘鼠标事件

2015-05-19 10:56 387 查看
原文

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;i<91;i++) { charLetter=(char)i; SendKeys.Send(Letter.ToString()); System.Threading.Thread.Sleep(100); SendKeys.Flush(); } for(inti=97;i<123;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;i<10;i++) { SendKeys.Send(i.ToString()); System.Threading.Thread.Sleep(100); SendKeys.Flush(); } } privatevoidbutton4_Click(objectsender,System.EventArgse) {//Backspace this.richTextBox1.Focus(); SendKeys.Send("{Backspace}"); } privatevoidbutton5_Click(objectsender,System.EventArgse) {//Home this.richTextBox1.Focus(); SendKeys.Send("{Home}"); } privatevoidbutton6_Click(objectsender,System.EventArgse) {//End this.richTextBox1.Focus(); SendKeys.Send("{End}"); } privatevoidbutton7_Click(objectsender,System.EventArgse) {//Enter this.richTextBox1.Focus(); SendKeys.Send("{Enter}"); } privatevoidbutton8_Click(objectsender,System.EventArgse) {//Delete this.richTextBox1.Focus(); SendKeys.Send("{Delete}"); } privatevoidbutton2_Click(objectsender,System.EventArgse) {//Shift+Home this.richTextBox1.Focus(); SendKeys.Send("+{Home}"); } privatevoidbutton9_Click(objectsender,System.EventArgse) {//Shift+End this.richTextBox1.Focus(); SendKeys.Send("+{End}"); }

  

看下方法的说明

publicclassSendKeys:System.Object

[code]System.Windows.Forms的成员

摘要:

提供将键击发送到应用程序的方法。

[/code]


publicstaticvoidSend(System.Stringkeys)

[code]System.Windows.Forms.SendKeys的成员

摘要:

向活动应用程序发送击键。

[/code]


publicstaticvoidSleep(System.TimeSpantimeout)

[code]System.Threading.Thread的成员

摘要:

将当前线程阻塞指定的时间。

[/code]

publicstaticvoidFlush()

[code]System.Windows.Forms.SendKeys的成员

2.模拟鼠标

有时,我们需在我们的程序中模拟鼠标的移动、点击等动作。——比如,一个再现用户操作的宏,或者一个演示操作方法的Demo程序。那么,我们在.Net中如何实现呢?

.Net并没有提供改变鼠标指针位置、模拟点击操作的函数;但是WindowsAPI提供了。其中一个是:

[DllImport("user32.dll")]
staticexternboolSetCursorPos(intX,intY);[/code]

该函数可以改变鼠标指针的位置。其中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函数来查找任务栏及开始菜单)
点这里下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: