有一个应用程序(不是我写的),其中有一个功能是只要按下键盘的PgUp和PgDn键就可以显示上一个数据或下一个数据。
  我现在想写一个程序模似PgDn键让那个应用程序显示下一个数据。
 我用sendmessage(HWndCalculator,wm_CLOSE,0,0)能关闭这个应用程序.如下
procedure TForm1.Button1Click(Sender: TObject);
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := FindWindow(nil,'广发广州一 - 广发网上股票交易分析系统 V3.55'); // close the exist Calculator
if HWndCalculator <> 0 then
sendmessage(HWndCalculator,wm_keydown,22,0);//pagedown
end;
end.
但是我用SendMessage(HWndCalculator,WM_KEYDOWN,VK_NEXT,0)应用程序却没有反应。如下
procedure TForm1.Button1Click(Sender: TObject);
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := FindWindow(nil,'广发广州一 - 广发网上股票交易分析系统 V3.55'); // close the exist Calculator
if HWndCalculator <> 0 then
sendmessage(HWndCalculator,wm_keydown,vk_next,0);//pagedown
end;
end.请问如何解决这个问题

解决方案 »

  1.   

    VK_NEXT需要经过Windows 的TranlateMessage()转换后在进行DispatchMessage()的,而SendMessage函数是直接调用窗口的处理函数的。所以发VK_NEXT到窗口的处理函数不行。需要使用PostMessage(HWndCalculator,wm_keydown,vk_next,0);就可以了。行的话记得给分。
      

  2.   

    WM_KEYDOWN 
    WM_KEYUP
    发两次试试
      

  3.   

    这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
    HWndCalculator : HWnd;
    begin
    // find the exist calculator window
    HWndCalculator := FindWindow(nil,'广发广州一 - 广发网上股票交易分析系统 V3.55'); // close the exist Calculator
    if HWndCalculator <> 0 then
    begin
    PostMessage(HWndCalculator,wm_keyup,vk_next,0);
    PostMessage(HWndCalculator,wm_keydown,vk_next,0);//pagedown
    PostMessage(HWndCalculator,wm_keydown,vk_next,0);
    PostMessage(HWndCalculator,wm_keyup,vk_next,0);
    PostMessage(HWndCalculator,wm_keyup,vk_next,0);end;
    也不行........
    苦.
    英雄!帮一忙
      

  4.   

    你怎么发这么多呀
    PostMessage(HWndCalculator,wm_keydown,vk_next,0);
    PostMessage(HWndCalculator,wm_keyup,vk_next,0);
    就行了,  另外接收这个键是不是这个窗口的子窗口(子控件)呀
      

  5.   

    你接受消息的子控件是一个什么控件?
    还有就是,这个控件有没有自己的处理VK_NEXT键被按下的消息处理函数(其实应该说是WM_KEYDOWN消息处理函数)。如果没有,当然不会有反应
      

  6.   

    PostMessage(HWnd,wm_keydown,vk_next,0);
    PostMessage(HWnd,wm_keyup,vk_next,0);
    直接发给父窗口应该就可!!