DELPHI程序怎么实现与游戏中的NPC对话

DELPHI程序如何实现与游戏中的NPC对话
一直在玩大航海台服,最近对挂起了兴趣,想做个自动造船,后台模拟鼠标一切正常,但是在模拟键盘时出了点问题,就是在向游戏输入“TAB”或“回车”以及方向键的时候都没反应,无论是用sendmessage还是postmessage都不行。
游戏中直接操作是可以通过TAB键来切换屏幕上的NPC的,切到要对话的NPC按回车就可以对话,我的目的是想通过模拟输入TAB键来找到NPC,再按回车键与NPC对话。

精简后代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  hw:HWND;
begin
  hw:=findwindow(nil,'大航海時代 Online');  
  if hw<>0 then
  begin
  sendmessage(hw,WM_LBUTTONDOWN,MK_LBUTTON,makelparam(637,417)); //在游戏屏幕的这个坐标点鼠标左键
  sendmessage(hw,WM_LBUTTONUP,MK_LBUTTON,makelparam(637,417));
  postmessage(hw,WM_keydown,$1B,0); //输入TAB键
  sleep(1000);
  postmessage(hw,WM_keydown,$0D,0); //输入回车
  end;
end;

代码运行后可以通过,模拟鼠标输入正常,可是点击按钮游戏中没反应,postmessage换成sendmessage也不行,感觉有点像在记事本中少一个寻找子窗口的findwindowex的语句一样,但是用SPY++无法看到游戏中有子窗口,所以没法加findwindowex查找句柄。

请求高手能帮忙怎么样才能找到游戏中的NPC,或者如何能将键盘模拟到游戏中去。

------解决方案--------------------
LZ查一下directxinput
------解决方案--------------------
你先试试 按键精灵是否可以模拟键盘按键


找CALL 是在反汇编中,找到这个地址

(不管你按什么键,最终要执行的是一段代码/函数)

找到这个函数地址调用就行了. 很难找.



另外 USB 的鼠标和键盘 有可能导致失败

//

再另外. 按键精灵据说有驱动级的 钩子 , 可以使用