問題: 調用一個鍵盤按鍵被按下,由一塊的C#代碼 但這裏的捕獲:將按鍵不應該被限定於過程/應用 而是通過整個操作系統接收,從而還當該程序是在後臺和不同的形式/程序具有焦點如何以編程方式按鍵盤鍵?
目標: 使該鎖定的狀態的CapsLock的程序和數字鎖定
背景: 我有一臺筆記本電腦,而這2個鍵阻撓我去了,我要讓在後臺運行的應用程序,並且,一旦它被意外啓用禁用的CapsLock,並的NumLock永遠不會被禁用,另外,我想擴展我對編碼的知識,我試圖找到解決方案,但是他們都沒有解決(整個)問題。
問題: 調用一個鍵盤按鍵被按下,由一塊的C#代碼 但這裏的捕獲:將按鍵不應該被限定於過程/應用 而是通過整個操作系統接收,從而還當該程序是在後臺和不同的形式/程序具有焦點如何以編程方式按鍵盤鍵?
目標: 使該鎖定的狀態的CapsLock的程序和數字鎖定
背景: 我有一臺筆記本電腦,而這2個鍵阻撓我去了,我要讓在後臺運行的應用程序,並且,一旦它被意外啓用禁用的CapsLock,並的NumLock永遠不會被禁用,另外,我想擴展我對編碼的知識,我試圖找到解決方案,但是他們都沒有解決(整個)問題。
using System;
using System.Runtime.InteropServices;
public class CapsLockControl
{
public const byte VK_NUMLOCK = 0x90;
public const byte VK_CAPSLOCK = 0x14;
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,UIntPtr dwExtraInfo);
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
public static void Main()
{
if (Control.IsKeyLocked(Keys.CapsLock))
{
Console.WriteLine("Caps Lock key is ON. We'll turn it off");
keybd_event(CapsLockControl.VK_CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr) 0);
keybd_event(CapsLockControl.VK_CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
(UIntPtr) 0);
}
else
{
Console.WriteLine("Caps Lock key is OFF");
}
}
}
您必須使用user32.dll鉤住鍵盤。 這CodeProject上sample應該讓你開始
如果你想在所有的與實際被壓禁用大寫鎖,你可以做到這一點與
SetWindowsHookEx
有大量的信息在這裏瞭解如何使用它。例如
Global keyboard hook that doesn't disable user input outside of form
而且ofcourse MSDN
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx
您可以嘗試模擬鍵盤和鼠標點擊一個CodePlex項目。
其稱爲Windows輸入模擬器,它可以發現Here