C++ Windows c++;模拟点击管理

C++ Windows c++;模拟点击管理,c++,click,simulate,C++,Click,Simulate,我在Qt5 Windows 10中有一个模拟点击的程序(用特殊设备帮助残疾朋友)。我使用SendInput。问题是,当我模拟在Windows虚拟键盘(osk.exe)上单击按键时,它不起作用。事实上,只有当我以管理员的身份运行程序时,它才能工作。然而,我想它的工作,即使程序不是作为管理员运行 有什么建议吗?Qt提供了模拟输入所需的一切,因此您不需要使用SendInput 首先,创建一个QMouseEvent,然后调用QCoreApplication::postEvent 实现将取决于您想要模拟的

我在Qt5 Windows 10中有一个模拟点击的程序(用特殊设备帮助残疾朋友)。我使用SendInput。问题是,当我模拟在Windows虚拟键盘(osk.exe)上单击按键时,它不起作用。事实上,只有当我以管理员的身份运行程序时,它才能工作。然而,我想它的工作,即使程序不是作为管理员运行


有什么建议吗?

Qt提供了模拟输入所需的一切,因此您不需要使用
SendInput

首先,创建一个
QMouseEvent
,然后调用
QCoreApplication::postEvent

实现将取决于您想要模拟的内容,但您的代码将如下所示:

// Pos is the position of the click
QMouseEvent *me = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);

QCoreApplication::postEvent(reciever, me); // Where reciever is a QObject handling the event
编辑:另一个值得尝试的片段:

#include <windows.h>

QApplication::desktop()->cursor().setPos(globalX,globalY);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 1, 1, 0, 0);
#包括
QApplication::desktop()->cursor().setPos(globalX,globalY);
鼠标事件(MOUSEEVENTF_绝对| MOUSEEVENTF_左下| MOUSEEVENTF_左上,1,1,0,0);

为什么您绝对需要它在受限权限下运行?看起来您必须是管理员才能运行它,所以,除了以管理员权限运行此程序之外,可能没有其他解决方案。@Ceros,因为我希望该程序供其他在其计算机上没有管理员权限的人使用。您必须使用SendInput吗?@picklechips否我可以使用任何在Windows上运行的QtI将尝试使用。你认为即使程序不是以管理员身份运行,它也能工作吗?据我所知,这不需要管理员权限。我刚刚意识到这可能不起作用,因为windows虚拟键盘是一个外部应用程序。不过值得一试。谢谢。管理员权限不是使用SendInput,而是能够单击Windows虚拟键盘(osk.exe)。无论如何,我会尝试一下,然后再给你回复。谢谢,我想我已经试过QMouseEvents了,但我只能在Qt窗口中单击,而不能在orhter窗口中单击。