在Windows Vista上应用程序看不到Shift + Ctrl + 0组合键

时间:2009-09-23 08:35:06

标签: delphi windows-vista keyboard-events

我从一个新的Delphi VCL应用程序开始,将Menus添加到uses子句,在表单上放一个标签,并指定表单的OnShortCut事件:

procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  Label1.Caption := ShortCutToText(ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)));
end;

在XP上,这适用于我尝试过的所有快捷键组合,包括 Shift + Ctrl + 0 。在Vista和Windows 7上,测试应用程序显示 Shift + Ctrl + 1 Shift + Ctrl + 9 ,但不是 Shift + Ctrl + 0 。其他组合,如 Shift + 0 Ctrl + 0 ,甚至 Shift + Ctrl + Alt + 0 显示正常。

在调试器下运行应用程序,我发现如果 Shift Ctrl ,则永远不会使用Msg.CharCode = Ord('0')触发OnShortCut事件按下 0 键时按住键。

Delphi IDE在Vista下也存在同样的问题。 Ctrl + Shift + 1 设置书签1,但 Ctrl + Shift + < kbd> 0 没有设置书签0,它应该。

我已经使用Delphi 2007和2010在Windows Vista和7的原始安装上测试了这一点,因此没有第三方软件捕获密钥。我没有尝试过任何其他开发工具来确定问题是Delphi还是Vista本身。

3 个答案:

答案 0 :(得分:15)

Shift + Ctrl + 0 在Vista中预先分配给输入法编辑器(IME):

http://support.microsoft.com/kb/967893

这将解决您的问题,但会影响IME的用户(主要是亚洲版本),因此您应该考虑不使用此快捷方式。

答案 1 :(得分:3)

看来你不是第一个问这个的人,我在How-To Geek论坛上发现了this帖子。

然后我找到了this MS知识库文章:

“输入法编辑器键盘快捷键( CTRL + SHIFT + 0 )在Vista中切换输入语言”

用于在语言之间切换。有一种解决方法可以关闭它。我刚尝试了它并且它可以工作,应用程序现在识别 Ctrl + Shift + 0

答案 2 :(得分:3)

尝试旧学校 Ctrl + K Ctrl + 0 设置书签0。