16,748
社区成员
发帖
与我相关
我的任务
分享
var
wnd:hwnd;
procedure TForm1.Button1Click(Sender: TObject);
var
ScanCode : Word;
lParam, Oem: longint;
begin
//按CTRL
ScanCode:= MapVirtualKey($11, 0);
lParam:= longint(ScanCode) shl 16 or 1;
SendMessage(wnd, WM_KEYDOWN, $11, lParam);
//按CTRL+P
Oem:= OemKeyScan(ord('P'));
ScanCode:= Oem and $000000FF or $FF00;//从OemKey提取0000XX00做ScanCode,这步估计难倒不少人,国内更没这方面资料,感慨一下
lParam:= longint(ScanCode) shl 16 or 1;//按MSDN上的说明,把它放到16bit的位置去,然后or 1设置只发送一次
SendMessage(wnd, WM_KEYDOWN, ord(Key), lParam);
SendMessage(wnd, WM_CHAR, ord(Key), lParam);
//松开CTRL+P
lParam:= lParam or $C0000000;//松开CTRL
SendMessage(wnd, WM_KEYUP, ord(Key), lParam);
//松开CTRL
ScanCode:= MapVirtualKey($11, 0);
lParam:= longint(ScanCode) shl 16 or 1;
lParam:= lParam or $C0000000;
SendMessage(wnd, WM_KEYDOWN, $11, lParam);
//打完收功!
end;