1. 程式人生 > >Delphi中如何實現模擬組合按鍵,如發送Ctrl+F的按鍵

Delphi中如何實現模擬組合按鍵,如發送Ctrl+F的按鍵

action rtu parent tee log list popup blog 一個

利用 keybd_event函數可實現,如下面的代碼用以實現在一個公共菜單中模擬Ctrl_F按鈕以調用DBGridEH的查找對話框功能:
這是在一個ActionList中的某一Action的OnExecute事件代碼。

procedure TDM.act_LocateExecute(Sender: TObject);
var
myPopupMenu:TPopupMenu;
MyDBGridEH:TDBGridEh;
begin
//ShowMessage(TMenuItem(TAction(Sender).ActionComponent).GetParentComponent.Name);
if (TAction(Sender).ActionComponent).GetParentComponent is TPopupMenu then
myPopupMenu := (TAction(Sender).ActionComponent).GetParentComponent as TPopupMenu
else
Exit;

//ShowMessage(MyPopupMenu.PopupComponent.Name);
if (MyPopupMenu.PopupComponent is TDBGridEh) then
begin
MyDBGridEH := TDBGridEh(MyPopupMenu.PopupComponent);
MyDBGridEH.SetFocus;
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); //按下Ctrl鍵
keybd_event(ord(‘F‘), MapVirtualKey(ord(‘F‘), 0), 0, 0); //按下F鍵
keybd_event(ord(‘F‘), MapVirtualKey(ord(‘F‘), 0), KEYEVENTF_KEYUP, 0); //放開F鍵
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放開Ctrl鍵
end;
end;

Delphi中如何實現模擬組合按鍵,如發送Ctrl+F的按鍵