2016-08-11 2 views
0

C++을 사용하여 Linux (OpenSuse)에서 Caps Lock, Scroll Lock 및 Num Lock을 켜고 끌 수있는 간단한 방법이 있습니까? 파일을 사용해야합니까? 일부 장치 시뮬레이션 키 입력을 제어하려고합니다. 이 솔루션은 바로 키보드의 주도에 설정 때문에이 솔루션을 참조 funcion 너무 잠 그려면 모자를 활성화해야하는 경우어떻게하면 Caps Lock, Scroll Lock, Num Lock 키를 리눅스에서 프로그래밍 방식으로 켜고 끌 수 있습니까?

+0

[This (http://stackoverflow.com/questions/2171408/how-to-change-caps-lock-status-without-key-press) 질문은 파이썬에 관한 것이지만 본질적으로 동일합니다. 언어 적으로 다소 차이가 있습니다. 나는 그것이 POSIX인지 또는 다른 유닉스에 의해 지원되는지 전혀 모른다. – Downvoter

답변

0

솔루션 1

, 머리를 이동하십시오 2.

// Linux header, no portable source 
#include <sys/ioctl.h> 
#include <fcntl.h> 
#include <unistd.h> 

int main(int argc, char* argv[]) { 
    int fd_console = open("/dev/console", O_WRONLY); 
    if (fd_console == -1) { 
    std::cerr << "Error opening console file descriptor\n"; 
    exit(-1); 
    } 

    // turn on caps lock 
    ioctl(fd_console, 0x4B32, 0x04); 

    // turn on num block 
    ioctl(fd_console, 0x4B32, 0x02); 

    // turn off 
    ioctl(fd_console, 0x4B32, 0x0); 

    close(fd_console); 
    return 0; 
} 

기억 /dev/console 파일에 쓰기 위해 수퍼 유저 권한으로 프로그램을 시작해야합니다.


편집 2

이 솔루션은 X11 윈도우 시스템 관리자와 함께 작동

솔루션 (리눅스에서 거의 표준이다).

// X11 library and testing extensions 
#include <X11/Xlib.h> 
#include <X11/keysym.h> 
#include <X11/extensions/XTest.h> 

int main(int argc, char *argv[]) { 
    // Get the root display. 
    Display* display = XOpenDisplay(NULL); 

    // Get the keycode for XK_Caps_Lock keysymbol 
    unsigned int keycode = XKeysymToKeycode(display, XK_Caps_Lock); 

    // Simulate Press 
    XTestFakeKeyEvent(display, keycode, True, CurrentTime); 
    XFlush(display); 

    // Simulate Release 
    XTestFakeKeyEvent(display, keycode, False, CurrentTime); 
    XFlush(display); 

    return 0; 
} 

참고 : 더 키 - 기호가 header에서 찾을 수 있습니다.

+0

수퍼 유저 권한은 Windows처럼 자주 바보가됩니다. 사소하면서도 중요한 일을하기 위해 무엇인가 허락해야 할 때 보안의 반대입니다. 이를 수행 할 수있는 데몬 프로세스를 설계하고 비 특권 프로세스에 API를 제공 할 수 있습니까? –

+0

[xdotool] (https://github.com/jordansissel/xdotool)은 어떻습니까? –

+0

Windows에 아날로그 KDSETLED/KDGETLED가 있습니까? – MaysSpirit

관련 문제