问题: 调用一个键盘按键被按下,由一块的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