-1

基本上我需要读取鼠标和键盘事件,因此程序会知道您何时按下键或滚动。

它在我的物理机上运行良好,但当我通过 Remmina VNC(来自 Ubuntu)连接到虚拟机(在我的情况下为 VMware)时不显示任何事件。尽管如此,鼠标和键盘在 VM 中都照常工作。我已经尝试连接到所有可用的设备,/dev/input但它仍然很安静。然后我用evtest测试了所有设备并得到了相同的结果 - 没有。

我不认为这取决于我的代码,但我使用了这个

有可能实现这一目标吗?也许我错过了一些重要的事情?任何帮助、文章或链接将不胜感激。


更新:我最近尝试过xinput

xinput list

还有另一个设备,称为Virtual core XTEST pointerVirtual core XTEST keyboard它实际上在xinput test <ID>. 这些设备未在 中列出/proc/bus/input/devices,因此我希望对您有所帮助。

4

1 回答 1

0

所以,我用命令xinput test Virtual core XTEST pointerxinput test Virtual core XTEST keyboard. 正如我从这篇文章中读到的,每个主设备都有一个Virtual core XTEST....

我正在使用 QT,代码如下所示:

...
mouseProcess = new QProcess(this);
mouseProcess->setProcessChannelMode(QProcess::MergedChannels);

// Listen to output of process with function ReadOut()
connect(mouseProcess, SIGNAL(readyReadStandardOutput()), SLOT(ReadOut()));
mouseProcess->start("xinput", QStringList() << "test" << "Virtual core XTEST pointer");
...


void ReadOutMouse() {
    QByteArray out = mouseProcess->readAllStandardOutput();
    QString output(out);
    if (output.contains("button press"))
        emit mouseEvent();
}

...

// The same is for Keyboard:
void ReadOutKeyboard() {
    QByteArray out = keyboardProcess->readAllStandardOutput();
    QString output(out);
    if (output.contains("key release"))
        emit keyboardEvent();
}
于 2020-08-03T07:14:21.797 回答