//重贴代码,仍然不起作用。
procedure TfrmSimulation.ShowArchive(CBHwnd: HWND);
function MakeSysKeyDownFirstByte(VirtualKeyType:LONGINT):string;
begin
// VirtualKeyType : 0 - alt ;1 - ctrl 2- shift
case VirtualKeyType of
0: result:='21';// 00100001
1: result:='01';// 00000001
2: result:='01';// 00000001
end;
end;
function MakeKeyLparam(VirtualKey:LONGINT; flag :LONGINT):LONGINT;
var
s:String;
Firstbyte:String; // lparam参数的24-31位
Scancode:LONGINT;
Secondbyte:string; //lparam参数的16-23位,即虚拟键扫描码
begin
if flag = WM_KEYDOWN then
Firstbyte :='00'
else
Firstbyte := 'C0';
if flag = WM_SYSKEYDOWN then
begin
case VirtualKey of
VK_MENU,VK_LMENU,VK_RMENU: Firstbyte:=MakeSysKeyDownFirstByte(0);
VK_SHIFT: Firstbyte:=MakeSysKeyDownFirstByte(2);
VK_CONTROL: Firstbyte:=MakeSysKeyDownFirstByte(1);
end;
end;
//获得键的扫描码
Scancode := MapVirtualKey(VirtualKey, 0);
Secondbyte := IntToHex(Scancode, 2);
s :='$'+Firstbyte + Secondbyte + '0001';
result := strtoint(s);
end;
begin
//CTRL+D被按下
PostMessage(CBHwnd,WM_KEYDOWN,ord('D'), MakeKeyLparam(VK_MENU,WM_SYSKEYDOWN));
Sleep(500);
PostMessage(CBHwnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(CBHwnd,WM_KEYUP,ord('D'),MakeKeyLparam(VK_MENU,WM_KEYUP));
end;
兄弟,根据您的意见,我修改了,还是不起作用,请帮忙看下。多谢啦。。。。。
procedure TfrmSimulation.ShowArchive(CBHwnd: HWND);
function MakeSysKeyDownFirstByte(VirtualKeyType:LONGINT):string;
begin
// VirtualKeyType : 0 - alt ;1 - ctrl 2- shift
case VirtualKeyType of
0: result:='21';// 00100001
1: result:='01';// 00000001
2: result:='01';// 00000001
end;
end;
function MakeKeyLparam(VirtualKey:LONGINT; flag :LONGINT):LONGINT;
var
s:String;
Firstbyte:String; // lparam参数的24-31位
Scancode:LONGINT;
Secondbyte:string; //lparam参数的16-23位,即虚拟键扫描码
begin
if flag = WM_KEYDOWN then
Firstbyte :='00'
else
Firstbyte := 'C0';
if flag = WM_SYSKEYDOWN then
begin
case VirtualKey of
VK_MENU,VK_LMENU,VK_RMENU: Firstbyte:=MakeSysKeyDownFirstByte(0);
VK_SHIFT: Firstbyte:=MakeSysKeyDownFirstByte(2);
VK_CONTROL: Firstbyte:=MakeSysKeyDownFirstByte(1);
end;
end;
//获得键的扫描码
Scancode := MapVirtualKey(VirtualKey, 0);
Secondbyte := IntToHex(Scancode, 2);
s :='$'+Firstbyte + Secondbyte + '0001';
result := strtoint(s);
end;
begin
function MakeSysKeyDownFirstByte(VirtualKeyType:LONGINT):string;
begin
// VirtualKeyType : 0 - alt ;1 - ctrl 2- shift
case VirtualKeyType of
0: result:='21';// 00100001
1: result:='01';// 00000001
2: result:='01';// 00000001
end;
end;
Function MakeKeyLparam(VirtualKey:LONGINT; flag :LONGINT):LONGINT;
var
s:String;
Firstbyte:String;
Scancode:LONGINT;
Secondbyte:string;
begin
If flag = WM_KEYDOWN Then
Firstbyte :='00';
If flag = WM_KEYUP Then
Firstbyte := 'C0';
if flag = WM_SYSKEYDOWN then
begin
case VirtualKey of
VK_MENU,VK_LMENU,VK_RMENU:
Firstbyte:=MakeSysKeyDownFirstByte(0);
VK_SHIFT :Firstbyte:=MakeSysKeyDownFirstByte(2);
VK_CONTROL:Firstbyte:=MakeSysKeyDownFirstByte(1);
end;
end;
//获得键的扫描码
Scancode := MapVirtualKey(VirtualKey, 0);
Secondbyte := Strctrls.FormatIntToHexStr(Scancode,2,'0');
s :='$'+Firstbyte + Secondbyte + '0001';
result := strtoint(s);
end;