是否存在本机.NET方法或与user32.dll的GetKeyboardState等效的方法?

时间:2010-07-05 01:21:10

标签: c# keyboard key user32 managed-code

答案:此方法没有本机管理的等效项。但是,可以在pinvoke.net找到一个很好的示例托管代码API。

大家好

我有一个接受“跟踪模式”标志的应用程序。跟踪模式打开包含文本框的表单。文本框通过自定义TraceListener对象显示输出。如果命令行中存在-t,则将从其自己的低优先级线程中打开跟踪窗口。对于那些在出现问题时试图诊断应用程序的顾问来说,这很方便。

一些顾问要求在启动期间按下一些模糊的组合键应该打开跟踪模式,这样他们就不必每次都去命令行激活它。这是一个合理的要求。

我不想给他们一个按钮或菜单项,因为在创建主表单之前,顾问会关心的很多关键信息会在启动时显示给Trace,因为各个组件都是实例化的,初始化。

我认为在.NET中检测当前的键盘状态应该很简单 - 但似乎在我看的每个地方,建议使用[DllImport(“user32.dll”,EntryPoint =“GetKeyboardState”,SetLastError) = true)]作为检测正在发生的事情的方法。

这一切都很好 - 我很满意。但是,作为一般经验法则,我尝试确保在尝试使用自己的Windows函数之前使用本机.NET托管代码。

是否存在本机.NET方法或与user32.dll的GetKeyboardState等效的文件?

2 个答案:

答案 0 :(得分:1)

Control.ModiferKeysControl的静态属性,如果有的话,当前按下了修饰键。我不知道有什么东西可以获得一般的键盘状态,看起来大多数代码P / Invoke都有GetKeyboardStateGetKeyState来检查特定键。

答案 1 :(得分:0)

你确定PreviewKeyDownEventArgs没有你需要的东西吗?如果是,则可以使用PreviewKeyDown事件。

另一种选择可能是加速键。 Windows API函数可以使用应用程序资源中的加速器表将键盘序列映射到命令,其中命令与菜单项的功能相同;你知道,WM_COMMAND消息。我知道使用C ++在MFC中很容易做到但是当我试图找到C#方式时,我迷路了。如果您可以弄清楚如何使用C#执行加速键,那么它可能是一个灵活的解决方案。