如何以编程方式调用键盘按键



问题:从一段C#代码调用要按下的键盘键但问题是:按键不应仅限于进程/应用程序但是被整个操作系统接收,所以当程序在后台并且不同的形式/程序具有焦点时

目标:制作一个程序,锁定CapsLockNumLock的状态

背景:我有一台笔记本电脑,这两个键让我非常沮丧,我想制作一个在后台运行的应用程序,一旦意外启用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挂接键盘。这个代码项目示例应该让你开始

如果你想禁止capslock被实际按下,你可以用来做到这一点

SetWindowsHookEx

这里有很多关于如何使用它的信息。例如

全局挂钩键盘记录问题

全局键盘挂钩;t禁用表单之外的用户输入

当然还有msdn

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx

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

它被称为Windows输入模拟器,可以在这里找到

最新更新