Как вызвать нажатие клавиши клавиатуры программно?

Проблема: вызов клавиши клавиатуры, которая должна быть нажата, из фрагмента кода C#, но здесь есть одна загвоздка: нажатие клавиши не должно ограничиваться процессом / приложением, а должно приниматься всей операционной системой, а также, когда программа находится в фон и другая форма / программа имеет фокус

Цель: создать программу, которая блокирует состояние CapsLock и NumLock

Предыстория: у меня есть ноутбук, и эти 2 клавиши сильно меня расстраивают, я хочу сделать приложение, которое работает в фоновом режиме, и которое отключает CapsLock, как только он случайно включается, и для NumLock, который никогда не будет отключен, также, Я хочу расширить свои знания о кодировании, я пытался найти решения, но ни один из них не решил (всю) проблему.

4 ответа

Решение
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 должен помочь вам начать

Вы можете попробовать проект CodePlex, который имитирует щелчки клавиатуры и мыши.

Его называют Windows Input Simulator, и его можно найти здесь.

Если вы хотите отключить вообще нажатие capslock, вы можете сделать это с помощью

SetWindowsHookEx

Здесь много информации о том, как его использовать. Например

Глобальная проблема с хук-кейлогером

Глобальный хук клавиатуры, который не отключает пользовательский ввод вне формы

И конечно MSDN

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

Другие вопросы по тегам