我的详细信息:运行 Windows CE 4.2、Compact Framework 2.0 SP1 的定制移动设备。到目前为止,C# 应用程序充分利用了 P/Invokes,没有任何问题。
我写了一个低级键盘钩子(类似于,但不完全相同,这个 CodeProject 帖子),它的工作非常好,但有一个例外。我们的软件所做的一件事是允许访问 Windows CE 的屏幕校准功能。这是您需要点击一系列目标的屏幕,最后按 Esc 取消或 Enter 接受。我们通过 P/Invoke调用这个功能,我认为这个 Win32 API 函数内部发生的按键被我的键盘钩子干扰了。
我的键盘钩子没有做任何密集的事情,也没有改变执行流程,但我认为两者的使用可能从根本上不兼容。当我在运行此屏幕后退出调试器时,当程序关闭时,所有的 Enter 键按下我都尝试一次全部“击中”(此设备会发出咔哒声)。这让我认为钩子没有正确地将按键传递给 Win32 API 函数,就像它正确传递给 .NET 应用程序一样。有什么想法吗?
您是否认为:
a)键盘钩子和需要键盘的 P/Invokes 不兼容,或者
b)我的键盘钩子实现是罪魁祸首,或者
c)它是否完全取决于硬件制造商、驱动程序等?
谢谢你的帮助!