如何虚拟按下键盘上的“ALT+S”???(100分)

  • 主题发起人 主题发起人 atonreg
  • 开始时间 开始时间
A

atonreg

Unregistered / Unconfirmed
GUEST, unregistred user!
比如按下“CTRL+回车键”可以这样写:
keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_RETURN,0,0,0);

但没有VK_ALT,按下“ALT+S”应该怎么写呢???
 
可以请使用borland安装光盘中的Info/Extras/Sendkey/sndkey32.pas的源代码,
自己看吧;此Sendkeys是模范VB中的Sendkeys函数
或者用SendMessage或PostdMessage

SendMessage(handle, WM_CHAR, aChar, aKeyData)
aChar = "A"
aKeyData = 32位
1-15位表示发送几遍,
16-23表示ALT、CTRL、NUM、CAPS等(具体何值忘了),
24位表示是左ALT、CTRL还是右ALT、CTRL(通常为0),
25-28位保留
30位表示上一个键的状态KEY DOWN OR UP,1为发送前的DWON状态,0为UP
31位表示:0表示键开始按下,1为开始释放。
从要求看:aKeyData为: 0000 0000 xxxx xxxx 0000 0000
其中xxxx xxxx放CTRL的扫描码,具体忘了,请自己查一下。
 
//但没有VK_ALT
哈哈,其实就是 VK_Menu
不信你试试看^_^
于是:
keybd_event(VK_Menu, MapVirtualKey(VK_Menu, 0), 0, 0);
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), 0, 0);
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Menu, MapVirtualKey(VK_Menu, 0), KEYEVENTF_KEYUP, 0);
即可
 
用keyDwon事件!
if (ssAlt in shift) and (key = $53) then
begin
进行处理;
end;
 
接受答案了.
 
后退
顶部