摆弄多点触控

时间:2015-02-02 22:54:35

标签: c# winapi touch wacom

我有一个wacom竹垫,想要做一些疯狂的东西,包括抓住触摸板。触摸板可以采用两种模式:Observer和Consumer。虽然观察者模式也将触摸数据传递给操作系统,但消费者仍然会吃掉。仅数据。但是:消费者模式需要目标窗口成为活动窗口。

这就是问题所在。我需要另一个应用程序来同时接收键盘消息并防止鼠标受到触摸板的影响。

我已尝试过一些选项:

  • 使用'鼠标监狱的观察员模式'咩。我可能需要鼠标,所以没有。
  • 禁用平板电脑首选项中的触控,但这会禁用触控(按照建议),而不仅仅是按键盘移动鼠标。
  • 消费者模式并尝试将键盘wndproc消息传递给下一个应用程序。结果是......没有。

我试图在窗口上抓取wndproc,但由于我的子控件有键盘焦点,所以这并没有用。我最终使用了一个自定义文本框,它也覆盖了wndproc并抓取了WP_KEYFIRST和WP_KEYLAST之间的所有消息,并将它们放到我认为的下一个窗口(使用GetForegroundWindow和GetWindow(GW_NEXTWINDOW))。我已经尝试了SendMessage和PostMessage,但是每次使用记事本进行快速测试都失败了。

所以我的问题是:如何传递wndproc键盘消息或禁用触摸板完成的鼠标移动?

PS:在某些时候我得到了理想的结果(Observer但没有鼠标操作),但这是巧合并重新插入平板电脑修复它。但我无法复制它。

修改

在使用winapi和键盘传递进一步摆弄后,这种方法似乎是不可能的(或者非常非常难......) 有一种方法可以获取所有窗口[1],您也可以从此片段获取z顺序。但是:并非每个窗口都处理此窗口的键盘输入。听起来很愚蠢,是愚蠢的(在我看来)。 Windows似乎不会将键盘事件从窗口传递到目标控件,而是直接传递给控件。但仅在某些情况下。所以我放弃了这个具体的方法。另一种方法是使其明确地用于我需要的程序(在我的情况下是可能的)或者采用上面提到的其他方式。由于不想使用这样的黑客,我进一步了解如何禁用鼠标移动的想法。

[1]:Enumerate windows like alt-tab does

0 个答案:

没有答案