暂停/中断作为键盘快捷键(Win32,*可能*特定于Delphi)

暂停/中断作为键盘快捷键(Win32,*可能*特定于Delphi),delphi,winapi,keyboard-shortcuts,Delphi,Winapi,Keyboard Shortcuts,不能在键盘快捷键中使用暂停/中断键吗 我知道我可以响应暂停/中断键,例如 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_PAUSE then ShowMessage('VK_PAUSE pressed'); end; 但是,我无法使用TShortCut属性响应暂停/中断键,例如在菜单项和操作列表中。对象检查器允许我输入Paus

不能在键盘快捷键中使用暂停/中断键吗

我知道我可以响应暂停/中断键,例如

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_PAUSE then
    ShowMessage('VK_PAUSE pressed');
end;

但是,我无法使用
TShortCut
属性响应暂停/中断键,例如在菜单项和操作列表中。对象检查器允许我输入Pause、Shift+Pause、Ctrl+Pause、Alt+Pause、Ctrl+Shift+Pause等,因此它可以清楚地识别暂停键。但当我运行应用程序时,菜单项/操作不会在指定的快捷方式上触发。是否有已知的解决方法?

对于D2007,一个快速的解决方法似乎是在运行时分配它;
Action1.ShortCut:=VK\u暂停

由于某种原因,如果在设计时指定,VK_暂停(19)似乎会变异为VK_NUMLOCK(144)。
在设计时指定快捷方式时,IDE必须将字符串转换为快捷方式。问题是
TextToShortCut('Pause')返回144而不是19。虽然我不确定我是否相信这个错误与德尔福有关;使用“暂停”,检索快捷方式可以找到
菜单。GetSpecialName
,我认为不应该这样


另一个注意事项是,尽管上述解决方法适用于“Alt”和“Shift”修饰符,但不适用于“Ctrl”修饰符。原因是,操作系统助理“Ctrl+Break”处理一个特殊代码:
VK\u CANCEL
。要使用“Ctrl+Pause”作为快捷方式,必须编写代码

Action1.ShortCut := menus.Shortcut(VK_CANCEL, [ssCtrl]);