首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过编程打开/关闭Caps Lock、Scroll Lock、Num Lock键

如何通过编程打开/关闭Caps Lock、Scroll Lock、Num Lock键
EN

Stack Overflow用户
提问于 2016-08-19 21:47:11
回答 1查看 2.1K关注 0票数 1

下面是一些linux中的代码示例:

代码语言:javascript
复制
void set_leds(int val) 
{
 int fd = open ("/dev/console", O_WRONLY);
 // argument (Bit 0 - Scroll Lock, Bit 1 - Num Lock, Bit 2 - Caps lock)
 ioctl (fd, KDSETLED, val);
 close(fd);
}
void set_leds_sequence(unsigned char * cmdSeq, int len)
{
 int i;
 for (i = 0; i < len; ++i)
 {
   set_leds( cmdSeq[i] );
 }
}
void activate(void)
{
 unsigned char seq_activate[3]  = {3, 5, 4};
 set_leds_sequence(seq_activate, 3);
}

我如何在Windows (C++\C)上做这样的事情?我有一种感觉,keybd_event不会接近我。有没有简单的方法来打开/关闭Windows上的大写锁定、滚动锁定和数字锁定LEDS?

EN

回答 1

Stack Overflow用户

发布于 2016-08-20 16:47:59

下面是我找到的代码:https://github.com/ftk/kbled/blob/master/keyboard.c

代码语言:javascript
复制
#define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)   

static HANDLE kbd;
using namespace std;

void OpenKeyboardDevice()
{
    if (!DefineDosDevice(DDD_RAW_TARGET_PATH, L"Kbd000000",
        L"\\Device\\KeyboardClass0"))
    {
        assert(false);
    }

    kbd = CreateFile(L"\\\\.\\Kbd000000", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING, 0, NULL);
    assert(kbd);
}


void CloseKeyboardDevice()
{
    DefineDosDevice(DDD_REMOVE_DEFINITION, L"Kbd000000", NULL);
    CloseHandle(kbd);
}



int set_leds(int led)
{
    uint32_t input = 0;
    DWORD len;
    input |= led << 16;
    if (!DeviceIoControl(kbd, IOCTL_KEYBOARD_SET_INDICATORS,
        &input, sizeof(input),
        NULL, 0,
        &len, NULL))
        return GetLastError();

    return 0;
}

void set_leds_sequence(unsigned char * cmdSeq, int len)
{
    int i;
    for (i = 0; i < len; ++i)
    {
        set_leds(cmdSeq[i]);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39040673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档