Delphi PostMessage 虚拟按键

在论坛上看很多人在问模拟按键的问题,比较好的是用Winio,但这样一是要加载winio.sys,二是基本只支持当前窗口按键,其实使用PostMessage就可以解决大部分游戏的按键模拟,很多人用不了就放弃了,其实关键是参数的构造不对,这个函数PostMessage (MyHwnd, WM_KEYDOWN, key, lParam)中,很多人的用法都是lParam为0,即:
PostMessage (MyHwnd, WM_KEYDOWN, key, 0);
这里lParam的构造应该如下:[具体为什么这么构造,请大家自己到网上看下PostMessage 的说明]
Delphi代码:
一、建立构造函数:
function VKB_param(VirtualKey:Integer;flag:Integer):Integer; //函数名
var
s,Firstbyte,Secondbyte:String;
S_code:Integer;
Begin
if flag=1 then  //按下键
  begin
  Firstbyte :='00'
  end
else                  //弹起键
  begin
  Firstbyte :='C0'
  end;
S_code:= MapVirtualKey(VirtualKey, 0);
Secondbyte:='00'+inttostr(s_code);
Secondbyte:=copy(Secondbyte,Length(Secondbyte)-1,2);
s:='$'+Firstbyte + Secondbyte + '0001';
Result:=strtoint(s);
End;
二、使用按键的方法:
lparam := VKB_param(key, 1);      {按下键}
PostMessage (MyHwnd, WM_KEYDOWN, key, lParam);
lParam := VKB_param(key, 0);      {松开键}
PostMessage (MyHwnd, WM_KEYUP, key, lParam);
三、说明:
key为键值,如1键[不是数字键的1]的值是$31,flag传递的是按键状态,1是按下,0是弹起。
四、多个游戏中通过,只要不封按键精灵的游戏都可以使用?

发表回复

登录... 后才能评论