Lam*_*lex 7 .net c# keyboard-shortcuts keyboard-events
我正在制作一个全局捕获键盘输入的Windows应用程序.当用户使用应用程序使用的CTRL + ALT + G快捷键组合时
SendKey.Send(Guid.NewGuid().ToString());
Run Code Online (Sandbox Code Playgroud)
在任何文本字段中键入生成的GUID.无论应用程序采取何种输入,它都应该这样做.
当你第一次键入CTRL + ALT + G时,它的工作方式与我的预期完全相同,但后续尝试不会产生任何结果,或者只是非常罕见的成功.
我的意思是,这一切都应该非常简单和一致.我有一个工作的全局键盘钩子,它一直工作,我已经测试过,但SendKey.Send()方法不是每次都有效.
我看过Google的任何与我的问题相关的内容,但到目前为止还没有任何工作.
有人有任何见解吗?
编辑1:我也尝试过使用SendKey.SendWait(),做同样的事情.我真的想要一种更灵敏的方式来使用这种键盘快捷方式生成新的GUID.
编辑2:
以下是代码的基本部分:
/* Initialization Code Here */
// register the event that is fired after the key press.
hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);
// register the control + alt + F12 combination as hot key.
hook.RegisterHotKey((uint)(HotkeyModifiers.Control | HotkeyModifiers.Alt), Keys.G);
Run Code Online (Sandbox Code Playgroud)
事件代码非常简单:
void hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
SendKeys.SendWait(Guid.NewGuid().ToString());
}
Run Code Online (Sandbox Code Playgroud)
我项目中的其他任何事情都只是松懈.
更新1:
关于这个问题,我确实有更多的问题,但是今天我没有时间继续研究这个问题.我已经实现了Jon Raynor建议使用app.config方法取得一定程度的成功.一旦我解决了我的新问题,我将发布一个编辑,如果我的应用程序按预期运行,可能会关闭此问题.
您可能遇到计时问题.根据MSDN文档:
已针对.NET Framework 3.0更新了SendKeys类,以便在Windows Vista上运行的应用程序中使用它.Windows Vista的增强安全性(称为用户帐户控制或UAC)可防止先前的实施按预期工作.
SendKeys类易受时序问题的影响,一些开发人员不得不解决这些问题.更新后的实现仍然容易受到时序问题的影响,但速度稍快,可能需要更改解决方法.SendKeys类首先尝试使用先前的实现,如果失败,则使用新实现.因此,SendKeys类在不同的操作系统上可能会有不同的行为.此外,当SendKeys类使用新实现时,SendWait方法将不会等待将消息发送到另一个进程时进行处理.
如果您的应用程序依赖于与操作系统无关的一致行为,则可以通过将以下应用程序设置添加到app.config文件来强制SendKeys类使用新实现.
Run Code Online (Sandbox Code Playgroud)<appSettings> <add key="SendKeys" value="SendInput"/> </appSettings>
要强制SendKeys类使用先前的实现,请改为使用值"JournalHook".
归档时间: |
|
查看次数: |
4216 次 |
最近记录: |