【问题标题】:Check if mouse buttons are swapped or not in C++检查鼠标按钮是否在 C++ 中被交换
【发布时间】:2017-08-11 14:30:37
【问题描述】:

我想向另一个程序的指定窗口发送一些鼠标点击消息。我目前使用WM_LBUTTONUPWM_LBUTTONDOWN 消息,它们工作正常。

无论用户的鼠标按钮设置如何,这些消息的执行方式完全相同。反对它,我想知道用户是否从鼠标设置控制面板交换了鼠标按钮。

我研究并发现SwapMouseButton函数,它工作正常,但我实际上并不想交换鼠标按钮,我只想知道它之前是否被交换过。

来自 MSDN:

如果之前鼠标按键的含义被颠倒了,在函数被调用之前,返回值是非零的。

我可以通过这种方式获得我想要的信息,但它也可以将它们恢复到鼠标按钮的原始状态。我只想检查,不想恢复到原来的状态。

我目前将此函数称为:

SwapMouseButton(FALSE);

我想知道任何其他替代方法(例如SystemParametersInfo)来仅检查(不恢复)鼠标按钮是否已被用户先前交换过。

基本上,我想做的是根据用户的鼠标按钮含义模拟鼠标主按钮单击和鼠标辅助按钮单击。

例如,当我模拟主鼠标按钮单击时,如果用户交换了鼠标按钮,则应该模拟鼠标右键单击,否则像往常一样模拟左键单击。不存在名为 WM_PRIMARY...WM_SECONDARY... 的消息让我做我想做的事。

提前致谢。

【问题讨论】:

  • 您提出了错误的问题,现在需要有关错误解决方案的帮助。 You can’t simulate keyboard input with PostMessage(相同的基本原理适用于鼠标输入)。您应该问的问题是:“我如何自动化 UI?” 该问题的答案是:“使用 UI Automation。” 这样做的一个优点是,您不需要知道用户的本地鼠标按钮设置。
  • @IInspectable 谢谢!我将删除PostMessage。您提供的链接非常有用。 :-)

标签: c++ winapi click mouseevent


【解决方案1】:

您可以将GetSystemMetricsSM_SWAPBUTTON 参数值一起使用。

SM_SWAPBUTTON 23

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多