2013-02-26 87 views
4

问题: 调用一个键盘按键被按下,由一块的C#代码 但这里的捕获:将按键不应该被限定于过程/应用 而是通过整个操作系统接收,从而还当该程序是在后台和不同的形式/程序具有焦点如何以编程方式按键盘键?

目标: 使该锁定的状态的CapsLock的程序和数字锁定

背景: 我有一台笔记本电脑,而这2个键阻挠我去了,我要让在后台运行的应用程序,并且,一旦它被意外启用禁用的CapsLock,并的NumLock永远不会被禁用,另外,我想扩展我对编码的知识,我试图找到解决方案,但是他们都没有解决(整个)问题。

回答

1
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"); 
     } 
    } 
} 
0

您必须使用user32.dll钩住键盘。 这CodeProject上sample应该让你开始

0

您可以尝试模拟键盘和鼠标点击一个CodePlex项目。

其称为Windows输入模拟器,它可以发现Here

相关问题