2016-08-11 18 views
0

C++を使用してLinux(OpenSuse)でCaps Lock、Scroll Lock、Num Lockをオン/オフする簡単な方法はありますか?ファイルを使用する必要がありますか? いくつかのデバイスシミュレートキーストロークを制御したい。このソリューションは、単にキーボードのLEDを点灯するので、あなたが解決策を参照、 funcionあまりにもロックキャップを有効にする必要がある場合Linux上でCaps Lock、Scroll Lock、Num Lockキーをプログラマチックにオン/オフする方法

+0

[This(http://stackoverflow.com/questions/2171408/how-to-change-caps-lock-status-without-key-press)質問はPythonに関係しますが、基本的には同じです多かれ少なかれ、言語に依存しません。私はそれがPOSIXか、他のUnixによってサポートされているかどうかわかりません。 – 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というファイルに書き込むためにスーパーユーザー権限でプログラムを起動する必要があります。この溶液は、X11ウィンドウシステムマネージャと動作


EDIT

溶液2

(Linuxのほぼ標準です)。

// 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

アナログのKDSETLED/KDGETLEDはウィンドウにありますか? – MaysSpirit

関連する問題