//再来一组,参考如下代码 procedure PostKeyEx( mHandle: THandle; //窗体句柄 mKey: Word; //键盘值 mShift: TShiftState; //组合键 mSpecialKey: Boolean //专用键 ); var vKeyboardState: TKeyboardState; vOldKeyboardState: TKeyboardState; lParam: LongInt; Begin if not IsWindow(mHandle) then Exit; lparam := MakeLong(0, MapVirtualKey(mKey, 0)); if mSpecialKey then lParam := lParam or $1000000; GetKeyboardState(vOldKeyboardState); FillChar(vKeyboardState, Sizeof(TKeyboardState), 0); if ssShift in mShift then vKeyboardState[VK_SHIFT] := $80; if ssAlt in mShift then begin vKeyboardState[VK_MENU] := $80; lparam := lparam or $20000000; end; if ssCtrl in mShift then vKeyboardState[VK_CONTROL] := $80; if ssLeft in mShift then vKeyboardState[VK_LBUTTON] := $80; If ssRight In mShift then vKeyboardState[VK_RBUTTON] := $80; If ssMiddle In mShift then vKeyboardState[VK_MBUTTON] := $80; SetKeyboardState(vKeyboardState); if ssAlt in mShift then begin PostMessage(mHandle, WM_SYSKEYDOWN, mKey, lParam); PostMessage(mHandle, WM_SYSKEYUP, mKey, lParam or Integer($C0000000)); end else begin PostMessage(mHandle, WM_KEYDOWN, mKey, lParam); PostMessage(mHandle, WM_KEYUP, mKey, lParam or Integer($C0000000)); end; Application.ProcessMessages; SetKeyboardState(vOldKeyboardState); end; { PostKeyEx }procedure TForm1.Button1Click(Sender: TObject); begin PostKeyEx(Edit1.Handle, Ord('C'), [ssCtrl], True); end;
procedure TForm1.Button1Click(Sender: TObject); beginwinexec('notepad',1); //把记事本窗口激活 setforegroundwindow(findwindow(nil,'无标题-记事本'));//模拟输入 'abc' keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟 alt + F 打开文件菜单 keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟输入 按 s 保存 keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); end;
模拟 ctrl + C 打开文件菜单 keybd_event(VK_CONTROL,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or 0,0); keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
sendmessage(handle,wm_keydown,vk_control,0);
这个是发送ctrl键,而我不知道怎么发送ctrl+c键..
procedure PostKeyEx(
mHandle: THandle; //窗体句柄
mKey: Word; //键盘值
mShift: TShiftState; //组合键
mSpecialKey: Boolean //专用键
);
var
vKeyboardState: TKeyboardState;
vOldKeyboardState: TKeyboardState;
lParam: LongInt;
Begin
if not IsWindow(mHandle) then Exit;
lparam := MakeLong(0, MapVirtualKey(mKey, 0));
if mSpecialKey then lParam := lParam or $1000000;
GetKeyboardState(vOldKeyboardState);
FillChar(vKeyboardState, Sizeof(TKeyboardState), 0);
if ssShift in mShift then vKeyboardState[VK_SHIFT] := $80;
if ssAlt in mShift then
begin
vKeyboardState[VK_MENU] := $80;
lparam := lparam or $20000000;
end;
if ssCtrl in mShift then vKeyboardState[VK_CONTROL] := $80;
if ssLeft in mShift then vKeyboardState[VK_LBUTTON] := $80;
If ssRight In mShift then vKeyboardState[VK_RBUTTON] := $80;
If ssMiddle In mShift then vKeyboardState[VK_MBUTTON] := $80;
SetKeyboardState(vKeyboardState);
if ssAlt in mShift then
begin
PostMessage(mHandle, WM_SYSKEYDOWN, mKey, lParam);
PostMessage(mHandle, WM_SYSKEYUP, mKey, lParam or Integer($C0000000));
end else
begin
PostMessage(mHandle, WM_KEYDOWN, mKey, lParam);
PostMessage(mHandle, WM_KEYUP, mKey, lParam or Integer($C0000000));
end;
Application.ProcessMessages;
SetKeyboardState(vOldKeyboardState);
end; { PostKeyEx }procedure TForm1.Button1Click(Sender: TObject);
begin
PostKeyEx(Edit1.Handle, Ord('C'), [ssCtrl], True);
end;
beginwinexec('notepad',1);
//把记事本窗口激活
setforegroundwindow(findwindow(nil,'无标题-记事本'));//模拟输入 'abc'
keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟 alt + F 打开文件菜单
keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟输入 按 s 保存
keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
keybd_event(VK_CONTROL,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or 0,0);
keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
给分,谢谢,真的很谢谢...昨天我忙到今天早上都没解决,现在收到你的答案,谢谢了...