C# 神奇的 SendKeys 类

 

SendKeys.Send 方法

 

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

 

命名空间: System.Windows.Forms
程序集:System.Windows.Forms(在 System.Windows.Forms.dll 中)
复制
public static void Send(
	string keys
)

参数

keys
类型:System.String
要发送的击键字符串。
异常条件
InvalidOperationException

没有可向其发送击键的活动应用程序。

ArgumentException

keys 并不表示有效击键

每个键都由一个或多个字符表示。要指定单个键盘字符,请使用该字符本身。例如,要表示字母 A,请将字符串“A”传递给方法。要表示多个字符,请将各个附加字符追加到它之前的字符的后面。要表示字母 A、B 和 C,请将参数指定为“ABC”。

加号 (+)、插入符号 (^)、百分号 (%)、波形符 (~) 以及圆括号 () 对 SendKeys 具有特殊含义。要指定这些字符中的某个字符,请将其放在大括号 ({}) 内。例如,要指定加号,请使用“{+}”。要指定大括号字符,请使用“{{}”和“{}}”。中括号 ([ ]) 对 SendKeys 没有特殊含义,但必须将它们放在大括号内。在其他应用程序中,中括号具有特殊含义,此含义可能会在发生动态数据交换 (DDE) 时起重要作用。

警告说明警告

如果应用程序用于键盘各不相同的国际用途,则使用 Send 可能产生不可预知的结果,应避免使用它。

要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码。

 

要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码。

 

代码

Backspace

{BACKSPACE}、{BS} 或 {BKSP}

Break

{BREAK}

Caps Lock

{CAPSLOCK}

Del 或 Delete

{DELETE} 或 {DEL}

向下键

{DOWN}

End

{END}

Enter

{ENTER} 或 ~

Esc

{ESC}

Help

{HELP}

Home

{HOME}

Ins 或 Insert

{INSERT} 或 {INS}

向左键

{LEFT}

Num Lock

{NUMLOCK}

Page Down

{PGDN}

向上翻页

{PGUP}

Print Screen

{PRTSC}(保留供将来使用)

向右键

{RIGHT}

Scroll Lock

{SCROLLLOCK}

TAB

{TAB}

向上键

{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

+

Ctrl

^

Alt

%

要指定在按一些键时应同时按住 Shift、Ctrl 和 Alt 键的任意组合,请将这些键的代码放在括号内。例如,要指定按 E 和 C 时同时按住 Shift 键,请使用“+(EC)”。要指定按 E 时应按住 Shift,之后按 C 时不按住 Shift,请使用“+EC”。

要指定重复键,请使用格式 {key number}。键和数字之间必须放一空格。例如,{LEFT 42} 表示按向左键 42 次;{h 10} 表示按 H 10 次。

注意注意

因为没有可用来激活另一个应用程序的托管方法,所以可以在当前应用程序中使用此类,或使用本机 Windows 方法(如 FindWindowSetForegroundWindow)来强制聚焦到其他应用程序上。

注意注意

已针对 .NET Framework 3.0 更新了 SendKeys 类,以便在 Windows Vista 中运行的应用程序中使用该类。Windows Vista 的增强安全性(称为用户帐户控制或 UAC)可以防止以前的实现按预期工作。

SendKeys 类易出现计时问题,某些开发人员必须解决这些问题。更新的实现仍易出现计时问题,但它略快,可能需要对解决方法进行更改。SendKeys 类尝试先使用以前的实现,如果失败,则使用新实现。因此,在不同的操作系统上,SendKeys 类的行为可能不同。此外,如果 SendKeys 类使用新实现,则将消息发送到另一进程时,SendWait 方法不会等待处理这些消息。

如果无论操作系统如何应用程序都依赖一致的行为,则通过在 app.config 文件中添加下列应用程序设置,可以强制 SendKeys 类使用新实现。

<appSettings>

<add key="SendKeys" value="SendInput"/>

</appSettings>

要强制 SendKeys 类使用以前的实现,请改用值 "JournalHook"

下面的代码示例演示如何使用 Send 方法。若要运行该示例,请将下面的代码粘贴到包含一个名为 Button1 的按钮的窗体 Form1 中。请确保该 Click 事件已与此示例中的事件处理方法关联。应将该按钮控件的 TabIndex 属性设置为 0。当该示例运行时,双击该窗体以触发按钮的 Click 事件。

复制
	// Clicking Button1 causes a message box to appear.
	private void Button1_Click(System.Object sender, System.EventArgs e)
	{
		MessageBox.Show("Click here!");
	}


	// Use the SendKeys.Send method to raise the Button1 click event 
	// and display the message box.
	private void Form1_DoubleClick(object sender, System.EventArgs e)
	{

		// Send the enter key; since the tab stop of Button1 is 0, this
		// will trigger the click event.
		SendKeys.Send("{ENTER}");
	}


.NET Framework

受以下版本支持:4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

 

 

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

 

补充:

winform键盘事件(方向键)的响应

 

C#winForm里键盘事件的响应
1,方向键和回车不能够在KeyDown事件里响应.解决方案是重写ProcessCmdKey
2,其原理并不清晰.base.ProcessCmdKey调用父类的键盘事件.
  KeyDown函数等于在父类里注册了一个事件响应代码.

 

//在KeyDown事件里无法捕获方向键,回车.能捕获空格之类

        //但是是重写了之后,就不能捕获了.

        private void FrmKeyDown_KeyDown(object sender, KeyEventArgs e)

        {

            //MessageBox.Show(e.KeyCode.ToString());//这里捕获不到方向键

            switch (e.KeyCode)

            {

                case Keys.Right:

                    MessageBox.Show("Right123");

                    break;

                case Keys.Left:

                    MessageBox.Show("Left123");

                    break;

                case Keys.Up://方向键不反应

                    MessageBox.Show("up123");

                    break;

                case Keys.Down:

                    MessageBox.Show("Down123");

                    break;

                case Keys.Space:

                    MessageBox.Show("space123");//空格可以响应

                    break;

                case Keys.Enter:

                    MessageBox.Show("enter123");

                    break;

            }

        }

        //方向键事件的处理,只能重写ProcessCmdKey,重写的方法体可以自动生成,不用担心.

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

        {

            switch (keyData)

            {

                case Keys.Right:

                    MessageBox.Show("Right");

                    break;

                case Keys.Left:

                    MessageBox.Show("Left");

                    break;

                case Keys.Up://方向键不反应

                    MessageBox.Show("up");

                    break;

                case Keys.Down:

                    MessageBox.Show("down");

                    break;

                case Keys.Space:

                    MessageBox.Show("space");

                    break;

                case Keys.Enter:

                    MessageBox.Show("enter");

                    break;

            }

            //return false;//如果要调用KeyDown,这里一定要返回false才行,否则只响应重写方法里的按键.

            //这里调用一下父类方向,相当于调用普通的KeyDown事件.//所以按空格会弹出两个对话框

            return base.ProcessCmdKey(ref msg, keyData);

        }

posted @ 2012-05-12 23:01  AYUI框架  阅读(4884)  评论(0编辑  收藏  举报