75 lines
1.5 KiB
C
75 lines
1.5 KiB
C
|
#ifndef WL_NUMLOCK_H
|
||
|
#define WL_NUMLOCK_H
|
||
|
|
||
|
#include <qglobal.h>
|
||
|
|
||
|
#ifdef Q_OS_LINUX
|
||
|
|
||
|
#include <QProcess>
|
||
|
#include <QDebug>
|
||
|
#include <fstream>
|
||
|
#include <iostream>
|
||
|
#include <QDir>
|
||
|
|
||
|
// 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 <windows.h>
|
||
|
|
||
|
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
|