转贴:weenyboy(七号编码) 回复于2001-6-28 10:50:09 得0分
定义热键f2-f9,在热键处理中向窗体发消息来模拟打开主菜单formcreate:
RegisterHotKey(Handle, 1001, 0, vk_F1)formdestroy:
UnregisterHotKey(Handle, 1001);procedure HotProc(var Message: TMessage); Message WM_HotKey;
begin
case Message.Msg of
1001: begin
PostMessage(Handle, WM_KEYDOWN, vk_F1, 0);
PostMessage(Handle, WM_KEYUP, vk_F1, 0);
PostMessage(Handle, WM_KEYDOWN, Ord('F'), 0); //比如使用(&File)菜单
PostMessage(Handle, WM_KEYUP, Ord('F'), 0);
end;
end;
定义热键f2-f9,在热键处理中向窗体发消息来模拟打开主菜单formcreate:
RegisterHotKey(Handle, 1001, 0, vk_F1)formdestroy:
UnregisterHotKey(Handle, 1001);procedure HotProc(var Message: TMessage); Message WM_HotKey;
begin
case Message.Msg of
1001: begin
PostMessage(Handle, WM_KEYDOWN, vk_F1, 0);
PostMessage(Handle, WM_KEYUP, vk_F1, 0);
PostMessage(Handle, WM_KEYDOWN, Ord('F'), 0); //比如使用(&File)菜单
PostMessage(Handle, WM_KEYUP, Ord('F'), 0);
end;
end;
Shift: TShiftState);
var
p: TPoint;
begin
if Key=VK_F1 then
begin
p := ClientToScreen(Point(0,0));
TrackPopupMenu( miFile.Handle, TPM_LEFTALIGN, p.X, p.Y, 0, Handle, nil );
end;
end;
Shift: TShiftState);
begin
if Key=VK_F1 then
begin
// 模拟Alt+F
keybd_event( VK_MENU, 0, 0, 0 );
keybd_event( Ord('F'), 0, 0, 0 );
keybd_event( Ord('F'), 0, KEYEVENTF_KEYUP, 0 );
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 );
end;
end;