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);

        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM