在Windows 7中取消注册Alt-Tab热键

8

我认为这个问题应该很容易解决,我把它带到这里是因为我真的感觉我已经到处寻找解决方案了。

我的代码是用C#编写的,应该只是简单地覆盖Alt-Tab热键。这行在XP中有效,但在7中返回false:

RegisterHotKey(handle, ID__ALT_TAB, MOD_ALT, VK_TAB)); 

我知道Windows 7现在要求我在注册新的热键之前取消注册热键,这就是问题所在。 当我检查最后一个错误代码时,我得到代码1409,表示热键已经存在。然而,如果我在上面的那一行之前调用这一行:
UnregisterHotKey(handle, ID__ALT_TAB)); 

这行代码失败了,最后的错误代码设置为1419,意味着没有这样的热键存在。这些行在XP中可以正常工作,我可以注册一个热键,然后注销它。我认为是因为我试图使用错误的ID注销热键,因为ID_ALT_TAB是自定义的。我还没有找到Windows级别的Alt-Tab热键的正确ID。非常感谢任何帮助或一般性的指针。


8
我讨厌一个不允许我退出的应用程序。 - Fosco
也许他只是在开发一个Alt+Tab替代工具?! - Andreas
很明显的问题,但我还是想问一下。你尝试以管理员身份运行程序了吗? - Nate Zaugg
4个回答

1

我认为没有办法做到这一点。更不用说,即使你设法在现有的热键上注册你的热键,当你的应用程序退出时会发生什么?突然间,就没有Alt-Tab了。

相反,我会选择另一个快捷方式来触发你的替换。也许是Ctrl-Alt-Tab?


1

不确定您是否已经看到了this?这里可能需要一些C语言的工作。我认为您应该能够使用此代码拦截Alt+Tab键盘快捷键,然后在其位置执行任何操作,但我不确定。

编辑:还可以查看this,其中包含一些旧的VB代码,您可能需要将其翻译成C#。


我的一个朋友使用了上面链接的VB代码,它有效。不过,你需要有一种处理程序意外终止的方法。你最不想发生的事情就是让你的计算机没有Alt-Tab。 - Alex Essilfie

0

UnregisterHotKey 的工作正常,并且在从完成注册的相同线程触发时返回 0,因此请确保您从同一线程注销热键,否则它将返回 1419。已在 Vista 上进行测试。


0

你是否以管理员身份运行程序(而不仅仅是作为管理员登录)?在XP之后,程序不一定会获得管理员权限,即使用户是管理员,你可以尝试右键单击“以管理员身份运行”(或类似选项)。


以管理员身份运行返回相同的结果。我在这里寻找的是如何注销我没有创建并因此没有ID的Windows级别热键。现有代码应在Windows7中运行失败以进行注册。这在registerHotKey的文件中有提到;http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx - Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接