#ifndef WL_NUMLOCK_H #define WL_NUMLOCK_H #include #ifdef Q_OS_LINUX #include #include #include #include #include // wl - WindwsLinux class WLKeyManager{ public: WLKeyManager(){} bool getNumLockState(){ if (path.length() == 0) path = getNumLockFilePath(); std::ifstream file(path); char str; file >> str; file.close(); return str == '1'; } void pressNumLock(){ QProcess::execute("/bin/xdotool", {"key", "Num_Lock"}); } private: std::string path; std::string getNumLockFilePath(){ QDir inputs("/sys/class/input/"); QString numlock; foreach (QString dir, inputs.entryList({"event*"})){ QDir temp(inputs.absoluteFilePath(dir) + "/device/"); QStringList list = temp.entryList({"*::numlock"}); if (!list.empty()){ numlock = list[0]; break; } } return QString("/sys/class/input/event3/device/" + numlock + "/brightness").toStdString(); } }; #endif #ifdef Q_OS_WIN #include class WLKeyManager{ public: WLKeyManager(){} bool getNumLockState(){ return (bool)GetKeyState(VK_NUMLOCK); } void pressNumLock(){ keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0); } }; #endif #endif // WL_NUMLOCK_H