procedure TfrmMain.FormCreate(Sender: TObject); Application.OnActivate := RegisterAppHotKey; Application.OnDeactivate := UnRegisterAppHotKey; RegisterAppHotKey(nil); End;procedure TfrmMain.RegisterAppHotKey(Sender: TObject); begin RegisterHotKey(handle,$0003,0,VK_F3); RegisterHotKey(handle,$0004,0,VK_F4); ...... RegisterHotKey(handle,$000B,0,VK_F11); RegisterHotKey(handle,$000C,0,VK_F12); end;procedure TFrmMain.UnRegisterAppHotKey(Sender: TObject); begin UnRegisterHotKey(handle,$0003); UnRegisterHotKey(handle,$0004); ...... UnRegisterHotKey(handle,$000B); UnRegisterHotKey(handle,$000C); end;procedure TfrmMain.HotKey_Message_Proc(var Msg: TMessage); Begin Case Msg.LParamHi Of VK_F3: Begin ...... End; VK_F4: Begin ...... End; ...... VK_F11: Begin ...... End; VK_F12: Begin //程序会跳到这里,但下面的语句都不会执行 application.MessageBox('You have pressed a Hotkey: F12!','hint',mb_ok); End; Else exit; End; End;
都是系统热键,你要先屏蔽key:=0;
比如 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode Case 116: KeyCode = 0
Case 117: KeyCode = 0 Case 118: KeyCode = 0 btn_add_Click Case 119 'Me.btn_update.OnClick Case 120 'Me.btn_delete.OnClick Case 121 'Me.btn_copy.OnClick Case 122 KeyCode = 0 btn_refresh_Click Case 123 'Me.btn_exit.OnClickEnd Select End Sub上段代码是在vba里写的
比如 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode Case 116: KeyCode = 0
Case 117: KeyCode = 0 Case 118: KeyCode = 0 btn_add_Click Case 119 'Me.btn_update.OnClick Case 120 'Me.btn_delete.OnClick Case 121 'Me.btn_copy.OnClick Case 122 KeyCode = 0 btn_refresh_Click Case 123 'Me.btn_exit.OnClickEnd Select End Sub上段代码是在vba里写的
其他的热键都是成功了的。 To IORILI: 我在keydown事件中这样写了,但是没用阿procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key = 123 Then key := 0; end;
Application.OnActivate := RegisterAppHotKey;
Application.OnDeactivate := UnRegisterAppHotKey;
RegisterAppHotKey(nil);
End;procedure TfrmMain.RegisterAppHotKey(Sender: TObject);
begin
RegisterHotKey(handle,$0003,0,VK_F3);
RegisterHotKey(handle,$0004,0,VK_F4);
......
RegisterHotKey(handle,$000B,0,VK_F11);
RegisterHotKey(handle,$000C,0,VK_F12);
end;procedure TFrmMain.UnRegisterAppHotKey(Sender: TObject);
begin
UnRegisterHotKey(handle,$0003);
UnRegisterHotKey(handle,$0004);
......
UnRegisterHotKey(handle,$000B);
UnRegisterHotKey(handle,$000C);
end;procedure TfrmMain.HotKey_Message_Proc(var Msg: TMessage);
Begin
Case Msg.LParamHi Of
VK_F3:
Begin
......
End;
VK_F4:
Begin
......
End;
......
VK_F11:
Begin
......
End;
VK_F12:
Begin
//程序会跳到这里,但下面的语句都不会执行
application.MessageBox('You have pressed a Hotkey: F12!','hint',mb_ok);
End;
Else
exit;
End;
End;
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode
Case 116:
KeyCode = 0
Case 117:
KeyCode = 0
Case 118:
KeyCode = 0
btn_add_Click
Case 119
'Me.btn_update.OnClick
Case 120
'Me.btn_delete.OnClick
Case 121
'Me.btn_copy.OnClick
Case 122
KeyCode = 0
btn_refresh_Click
Case 123
'Me.btn_exit.OnClickEnd Select
End Sub上段代码是在vba里写的
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)Select Case KeyCode
Case 116:
KeyCode = 0
Case 117:
KeyCode = 0
Case 118:
KeyCode = 0
btn_add_Click
Case 119
'Me.btn_update.OnClick
Case 120
'Me.btn_delete.OnClick
Case 121
'Me.btn_copy.OnClick
Case 122
KeyCode = 0
btn_refresh_Click
Case 123
'Me.btn_exit.OnClickEnd Select
End Sub上段代码是在vba里写的
To IORILI: 我在keydown事件中这样写了,但是没用阿procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = 123 Then
key := 0;
end;
true就好了。但是注册不上F12热键的问题还是没有解决,可能是有别的软件注册了,但是我把所有可以关的程序都关了,再重新运行程序也还是不行。