【问题标题】:How to call a keyboard key press programmatically?如何以编程方式调用键盘按键?
【发布时间】:2013-02-26 12:48:00
【问题描述】:

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

目标: 制作一个锁定CapsLockNumLock

状态的程序

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

【问题讨论】:

    标签: c# keyboard overriding capslock


    【解决方案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");
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您必须使用 user32.dll 连接键盘。 这个 codeProject sample 应该让你开始

      【讨论】:

        【解决方案3】:

        如果你想完全禁用大写锁定,你可以这样做

        SetWindowsHookEx
        

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

        Global Hook Keylogger problem

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

        当然还有msdn

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

        【讨论】:

          【解决方案4】:

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

          它叫做 Windows 输入模拟器,可以在Here找到它

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-24
            • 2015-03-28
            • 2013-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多