Как вызвать нажатие клавиши клавиатуры программно?
Проблема: вызов клавиши клавиатуры, которая должна быть нажата, из фрагмента кода 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