程序的 GUI 窗口/菜单 (Windows 操作系统) 中的鼠标点击会存储在内存中的何处?是否有某种类似于 Windows 消息队列的输入/GUI“队列”?
我想知道是否有可能手动操作这些队列,例如,让程序(或操作系统)认为一个项目或坐标在它不是(物理)时被鼠标点击。
程序的 GUI 窗口/菜单 (Windows 操作系统) 中的鼠标点击会存储在内存中的何处?是否有某种类似于 Windows 消息队列的输入/GUI“队列”?
我想知道是否有可能手动操作这些队列,例如,让程序(或操作系统)认为一个项目或坐标在它不是(物理)时被鼠标点击。
一旦消息被分派到应用程序,每个应用程序的架构就决定了处理。
某些应用程序创建队列,其他应用程序直接发送消息。后者更为常见。
理想情况下,您可以直接使用您的消息调用消息泵,这样您就可以让应用程序相信某些事件已经发生。
根据应用程序,这可以工作。然而,问题是一旦应用程序收到您的假消息,它可能需要来自环境的额外信息,并且处理可能不会按预期进行。
例如,假设您注入了一个鼠标事件,并且应用程序还通过 来检查键盘的状态GetAsyncKeyState
,那么您将无法进行进一步的处理,因为如果不通过挂钩API也是。
更好的方法是通过SendMessage(但是异步检查有同样的问题)或SendInput来刺激用户交互。