如何通过编程方式调用键盘按键?

时间:2013-02-26 12:48:01

标签: c# keyboard override capslock

问题: 从一段C#代码中调用要按下的键盘键 但这里有一个问题:按键不应局限于流程/应用程序 但是整个操作系统都收到了,当程序在后台并且不同的表单/程序有焦点时也是如此

目标: 制作一个锁定 CapsLock NumLock

状态的程序

背景: 我有一台笔记本电脑,这两个键让我很沮丧,我想创建一个在后台运行的应用程序,并且一旦意外启用就禁用 CapsLock ,并且 NumLock 永远不会被禁用,我也想扩展我对编码的了解,我试图找到解决方案,但没有一个能解决(整个)问题。

4 个答案:

答案 0 :(得分: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");
        }
    }
}

答案 1 :(得分:0)

您必须使用user32.dll挂钩键盘。 这个codeProject sample应该让你入门

答案 2 :(得分:0)

如果你想要实际被按下禁用大写锁定,你可以用

来完成
SetWindowsHookEx

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

Global Hook Keylogger problem

Global keyboard hook that doesn't disable user input outside of form

and ofcourse msdn

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

答案 3 :(得分:0)

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

它被称为Windows输入模拟器,可以找到它Here