一、什麼是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