Отключение переключателя num-lock в C #? - PullRequest
4 голосов
/ 28 августа 2009

Я бы хотел, чтобы num-lock был включен, пока мое приложение работает, так что если пользователь отключит num-lock, он сразу же будет снова включен. Какой самый простой способ добиться этого в C #?

Чтобы уточнить, во время работы моего приложения я "владею" машиной пользователя, поэтому в моем конкретном случае пользователю не нужно будет отключать num-lock (это не означает, что у меня вообще есть фокус) раз).

Спасибо

Ответы [ 5 ]

1 голос
/ 28 августа 2009

Включите Form.KeyPreview в вашей форме, добавьте ссылку на Microsoft.VisualBasic (или вы можете использовать собственный API напрямую для опроса состояния ключа блокировки num).

public static class NativeMethods
{
    public const byte VK_NUMLOCK = 0x90;
    public const uint KEYEVENTF_EXTENDEDKEY = 1;
    public const int KEYEVENTF_KEYUP = 0x2;

    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

    public static void SimulateKeyPress(byte keyCode)
    {
        keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
        keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    }
}

public partial class Form1 : Form
{
    private bool protectKeys; // To protect from inifite keypress chain reactions

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (protectKeys)
            return;

        if (e.KeyCode == Keys.NumLock && 
            !(new Microsoft.VisualBasic.Devices.Keyboard().NumLock))
        {
            protectKeys = true;
            NativeMethods.SimulateKeyPress(NativeMethods.VK_NUMLOCK);
            protectKeys = false;
        }
    }
}
1 голос
/ 28 августа 2009

Вы можете сделать это с помощью нескольких вызовов P / Invoke. Проверить эту страницу

0 голосов
/ 28 августа 2009

см. Ссылку

определить, выключен ли NumLock, и снова включить его

Код находится на vb.net, но его легко перевести на c #.

Bye.

0 голосов
/ 28 августа 2009

Может быть, вы найдете полезную информацию по этой ссылке - http://www.codeproject.com/KB/statusbar/update_toggle_key_status.aspx

0 голосов
/ 28 августа 2009

Вам нужно добавить низкоуровневый хук клавиатуры для этого. Стивен Туб написал на своем блоге учебник по настройке.

Ваша клавиатура может проверить статус VK_NUMLOCK. Пример VB см. Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...