C# Sendkeys全方位解析

一、什麼是Sendkeys?

SendKeys是C#中一個重要的方法,它可以模擬用戶的按鍵操作。用戶在使用電腦時,會經常操作鍵盤。而SendKeys這個方法就是用來模擬鍵盤操作的,主要有以下幾種用途。

1.自動完成一些操作,如自動運行程序、關閉程序等。
2.在某個應用程序中做一些鍵盤事件的操作,如按下Ctrl+S完成保存文件的操作。
3.實現一些自動化腳本的操作,如測試腳本、網頁操作等。

二、如何使用Sendkeys?

在C#中,使用SendKeys一般有以下三個步驟:

1.首先需要引入System.Windows.Forms命名空間,因為SendKeys是System.Windows.Forms中的方法。
2.SendKeys函數中需要輸入要觸發的按鍵事件。其中常用的按鍵代碼可以在MSDN上查到,如:{ENTER}代表回車鍵,{ESC}代表Esc鍵等。
3.SendKeys函數中有第二個參數,代表觸發時需要按下的鍵,如:SendKeys(“{ENTER}”,”Notepad”);表示在Notepad程序中按下回車鍵。

三、實現Winform上的Sendkeys

在Winform中,通過鍵盤事件來實現Sendkeys。

1. 重寫ProcessCmdKey方法

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if ((keyData == (Keys.Control | Keys.V)) || (keyData == (Keys.Shift | Keys.Insert)))
    {
        SendKeys.Send("^{V}");
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

這個方法是Winform自帶的方法,重新該方法可以實現鍵盤事件的重載。
在上面的代碼中,代表的是按下Ctrl+V或者Shift+Insert鍵時,該方法會將”^{V}”發送到當前活動的窗口。
這就完成了Winform上對Sendkeys的實現。

2. 基於P/Invoke實現Sendkeys

使用Windows的API實現Sendkeys,也是一種常用的方法。常用的是keybd_event和SendMessage方法。

2.1 keybd_event

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

private const int KEYEVENTF_KEYDOWN = 0x0000; 
private const int KEYEVENTF_KEYUP = 0x0002;
private const int VK_SHIFT = 0x10;
private const int VK_CONTROL = 0x11;

keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYDOWN, UIntPtr.Zero);
keybd_event((byte)'V', 0, KEYEVENTF_KEYDOWN, UIntPtr.Zero);
keybd_event((byte)'V', 0, KEYEVENTF_KEYUP, UIntPtr.Zero);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, UIntPtr.Zero);

使用keybd_event發送鍵盤按鍵事件,可以先按下某個鍵,然後再抬起某個鍵,完成對某個按鍵的發送。

2.2 SendMessage

[DllImport("user32.dll")]
static extern void SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);

private const uint WM_KEYDOWN = 0x0100;
private const uint WM_KEYUP = 0x0101;

SendMessage(Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, VK_CONTROL, IntPtr.Zero);
SendMessage(Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, (int)'V', IntPtr.Zero);
SendMessage(Process.GetCurrentProcess().MainWindowHandle, WM_KEYUP, (int)'V', IntPtr.Zero);
SendMessage(Process.GetCurrentProcess().MainWindowHandle, WM_KEYUP, VK_CONTROL, IntPtr.Zero);

使用SendMessage方法發送鍵盤按鍵事件,可以向窗口發送系統消息,用來模擬鍵盤按鍵事件。WM_KEYDOWN代表按下某個鍵,WM_KEYUP代表抬起某個鍵。

四、Sendkeys注意事項

1.Sendkeys方法會模擬用戶輸入,但它並不是向程序發送文本,而是模擬鍵盤按鍵事件。如果發送速度過快,可能有些按鍵事件來不及處理導致程序出錯。
2.使用Sendkeys方法要注意當前活動窗口,應該發送按鍵事件的窗口是否處於活躍狀態。
3.在處理大量內容的時候,盡量不要使用Sendkeys方法,因為它會消耗較多的CPU資源,影響程序性能。可以考慮使用Windows的API接口來實現Sendkeys方法。
4.Sendkeys方法只能模擬鍵盤按鍵事件,無法模擬鼠標事件。想要模擬鼠標事件,可以使用InputSimulator類進行模擬。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/231840.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 01:07
下一篇 2024-12-11 01:07

發表回復

登錄後才能評論