在C++中检查鼠标按钮是否交换

5
我想向另一个程序的特定窗口发送一些鼠标点击消息。我目前使用的是WM_LBUTTONUPWM_LBUTTONDOWN消息,效果很好。
这些消息无论用户的鼠标按钮设置如何,都会执行相同的方式。与此相反,我想知道用户是否从鼠标设置控制面板中交换了鼠标按钮。
我进行了研究,并找到了SwapMouseButton函数,它的效果很好,但我并不想实际交换鼠标按钮,我只想知道它以前是否被交换过。
来自MSDN:
如果在调用该函数之前先反转了鼠标按钮的含义,则返回值为非零。
我可以通过这种方式获取所需的信息,但它也将它们恢复到原始的鼠标按钮状态。我只想检查而不还原到原始状态。
我当前像这样调用此函数:
SwapMouseButton(FALSE);

我想知道除了类似于 SystemParametersInfo 的方法外,是否有其他的替代方法(仅检查用户是否交换了鼠标按钮,而不还原)。
基本上,我想要做的是根据用户的鼠标按钮含义模拟主鼠标按钮单击和辅助鼠标按钮单击。
例如,当我模拟主鼠标按钮单击时,如果用户已经交换了鼠标按钮,则应该模拟右键单击,否则则按照通常情况下模拟左键单击。 对于我想要实现的内容,不存在名为 WM_PRIMARY ... 和 WM_SECONDARY ... 的消息。
提前致谢。

2
你提出了错误的问题,现在需要帮助解决错误的方案。你不能使用PostMessage来模拟键盘输入(同样的原则也适用于鼠标输入)。你本应该问的问题是:“如何自动化UI界面?”答案是:“使用UI Automation。”其中一个优点是,你不需要知道用户的本地鼠标按钮设置。 - IInspectable
@IInspectable 谢谢!我会移除PostMessage。你提供的链接非常有用。 :-) - GTAVLover
1个回答

9

您可以使用SM_SWAPBUTTON参数值的GetSystemMetrics函数。

SM_SWAPBUTTON 23

如果左右鼠标按钮的含义已交换,则为非零;否则为0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接