如何发送键盘输入控制另一程序?(100分)

  • 主题发起人 主题发起人 wuyi
  • 开始时间 开始时间
W

wuyi

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序启动了另一个程序,我想在程序中模拟键盘输入alt,E,这些与菜单
控制有关的按键, 但一直试不好, 请各位帮帮忙!

sendMessage(hCurrentWindow, WM_SYSKEYDOWN, VK_MENU, $20380001);
sendMessage(hCurrentWindow, WM_SYSKEYUP, VK_MENU, $20380001);
sendMessage(hCurrentWindow, WM_KEYDOWN, $45,$10120001 );
sendMessage(hCurrentWindow, WM_KEYUP, $45, $d0120001);

现在前面两行的代码是起作用的,后面的两行不起作用,不知什么原因?
 
keybd_event( VK_MENU, MapVirtualKey( VK_MENU, 0 ), 0 , 0 ); // Alt down
keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), 0 , 0 ); // down arrow key down
keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), KEYEVENTF_KEYUP , 0 ); // down arrow key up
keybd_event( VK_MENU, MapVirtualKey( VK_MENU, 0 ), KEYEVENTF_KEYUP , 0 ); // Alt key up
 
看看这个控件
使用方法
^ = control
! = shift
& = alt

要发alt+e只需sendkey1.keys='{&e}';
sendkey1.execute;
例子:
procedure TForm1.Button1Click(Sender: TObject);
var a:TSendkey;
begin
a:=tsendkey.Create(self);
a.Keys:='{&e}';
a.TitleText:='Delphi 5';
a.execute;
end;
 
下面是控件代码:
//

// Usage:
//
// example to send a sum to windows calculator
//
// Sendkey1.Keys:= '22/7=';
// SendKey1.TitleText:= 'Calc'; <---- some text from the title
// SendKey1.execute; if TitleText is '' then
// the keys would go to the window
// or with focus.
// Sendkey1.Keys:= '22[divide]7='; <---- key name between [ and ]
// SendKey1.TitleText:= 'ulate'; <---- part of the window title
// SendKey1.execute;
//
//
// SendKey1.Keys:= '{^[f4]}'; <---- { group of keys } Ctrl F4
// SendKey1.Titletext:= 'Calculator';
// SendKey1.execute;
//
// { = group start
// } = group end
// [ = start keyname
// ] = end keyname
// ^ = control in group
// ! = shift in group
// & = alt in group
//
// [control][f4] same as {^[f4]}
//
//
//
 
实在贴不上去了,我给你发过去吧。
 
hi,www:
这几天一直连不上.前些天已收到你的控件,但安装后没提示安装上,而且多试
几次就死机了,不知它是用于什么版本的,你自己安装成功过吗?
 
改为:
sendMessage(hCurrentWindow, WM_SYSKEYDOWN, $45, $20380001);
// sendMessage(hCurrentWindow, WM_KEYDOWN, $45,$10120001 );
// sendMessage(hCurrentWindow, WM_KEYUP, $45, $10120001);
sendMessage(hCurrentWindow, WM_SYSKEYUP, $45, $20380001);


:-)
 
menxin 为什么是这样呢?
 
www给我发一个吧!!
niping_nibo@263.net
谢谢!!!
 
www给我发一个吧!!
thtfsyh@263.net
谢谢!!!
 
www给我发一个吧!!
LiuJiGuangLiu@Yahoo.com.cn
 
怎么,我的办法不灵吗?
 
mengxin 大虾,我对win api函数了解不多。你写的那摸多美圆是干什麽用的?:)
 
多人接受答案了。
 
why??

美元只不过是进制表示符而已。

:-)
 
后退
顶部