方法二 用函数 VOID keybd_event( BYTE bVk, //按键代码,就象omkeydown里的 BYTE bScan, // hardware scan code DWORD dwFlags, // flags specifying various function options DWORD dwExtraInfo // additional data associated with keystroke ); //举个比较完全里例子,打开记事本模拟写字+保存操作 再一个举子: ---------------------------------------------------- //运行windows记事本 winexec('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);//至于按键的 vkcode(正如你需要的方向键),你自己编个工具在form的 onkeydown里得到
下面程序 模拟按下ALT+“下”的操作 应该就是你想要的了procedure TForm1.Button1Click(Sender: TObject);//虚拟按下 begin keybd_event(18, 0, 0, 0);//“ALT”的值 keybd_event(40, 0, 0, 0);//“下”的值 keybd_event(40, 0, KEYEVENTF_KEYUP, 0); keybd_event(18, 0, KEYEVENTF_KEYUP, 0); end;procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;//实际按下 Shift: TShiftState); begin if (Key = 40) and (ssalt in Shift) then showmessage('Message!!'); end;通过上面的例子,你可以发现当直接按Button的时候会发生Message,说明Button模拟了实际的按键操作,因为你点击Button的时候你并没有键盘上的ALT和方向键 这样你可以发现当按下ALT+“下”或者直接按Button的时候都产生一样的效果了//其他的方向键你可以用下面的方法来测试得到值 procedure TForm1.Button2Click(Sender: TObject);//最好在Form的按键中写 begin showmessage(inttostr(VK_UP)); end;好了,该给分了吧:)
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssAlt in Shift) and (key = key_down) then begin showmessage('Alt + down'); end; end;
review了一下才发现人家已经说了这个方法了.........
我的实验好象失败了。我想通过发送“alt+左键头”使当前的IE后退,但没有响应啊?
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssAlt in Shift) and (key = key_down) then begin showmessage('Alt + down'); end; end; 上面有人说的这个方法很常用
postmessage(form1.handle,wm_keydown,vk_down,$20000000)
$20000000是一个32位值,
$20000000;表示在按键的同时有alt
用函数
VOID keybd_event( BYTE bVk, //按键代码,就象omkeydown里的
BYTE bScan, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);
//举个比较完全里例子,打开记事本模拟写字+保存操作
再一个举子:
----------------------------------------------------
//运行windows记事本
winexec('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);//至于按键的 vkcode(正如你需要的方向键),你自己编个工具在form的 onkeydown里得到
模拟按下ALT+“下”的操作
应该就是你想要的了procedure TForm1.Button1Click(Sender: TObject);//虚拟按下
begin
keybd_event(18, 0, 0, 0);//“ALT”的值
keybd_event(40, 0, 0, 0);//“下”的值
keybd_event(40, 0, KEYEVENTF_KEYUP, 0);
keybd_event(18, 0, KEYEVENTF_KEYUP, 0);
end;procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;//实际按下
Shift: TShiftState);
begin
if (Key = 40) and (ssalt in Shift) then
showmessage('Message!!');
end;通过上面的例子,你可以发现当直接按Button的时候会发生Message,说明Button模拟了实际的按键操作,因为你点击Button的时候你并没有键盘上的ALT和方向键
这样你可以发现当按下ALT+“下”或者直接按Button的时候都产生一样的效果了//其他的方向键你可以用下面的方法来测试得到值
procedure TForm1.Button2Click(Sender: TObject);//最好在Form的按键中写
begin
showmessage(inttostr(VK_UP));
end;好了,该给分了吧:)
Shift: TShiftState);
begin
if (ssAlt in Shift) and (key = key_down) then
begin
showmessage('Alt + down');
end;
end;
Shift: TShiftState);
begin
if (ssAlt in Shift) and (key = key_down) then
begin
showmessage('Alt + down');
end;
end;
上面有人说的这个方法很常用
如果要实现的话,可以去注册一个热键,或者用键盘HOOK都可以。我知道要IE“后退”或“前进”可以发送一个消息给它。但我是一定要用ALT+左键头(右键头)来实现的。
用keybd_event来向IE模拟按下ALT+左键头的话,是不能实现的。先给“伟大的伟大”记上50分吧。
比如说第一位所说的激活notepad,然后我想输入一个含有中文的字符串,应该用那个汉书?
谢谢!!
keybd_event(......);如果你要制定浏览器接受这个按键,只要 setfocus就可以了