h:=findwindow(nil,'计算器');
sendmessage(h,wm_keydown,vk_f1,0);
不管用,还有别的办法吗?

解决方案 »

  1.   

    試試:
    SetFocus(h);
    sendmessage(h,wm_keydown,vk_f1,0);
    sendmessage(h,wm_keyup,vk_f1,0);
      

  2.   

    cgh93829(power)
     还是没有效果,你试过吗?
      

  3.   

    procedure form.KeyDown(Sender: TObject);
    begin
        if key=vk_F1 then    
         //需要的事件
    end;
      

  4.   

    procedure form.KeyDown(Sender: TObject);
    begin
        if key=vk_F1 then    
         ShellExecute(handle,nil,'help.chm',nil,nil,sw_shownormal);
    end;
      

  5.   

    hWND_FORM:=findwindow(nil,'计算器');
    PostMessage (hWND_FORM, WM_KEYDOWN, VK_F1, 0)
      

  6.   

    journay(梦回唐朝) ,试过无效
      

  7.   

    keydown events:
      if key=VK_F1 then 
      begin 
         ...
      end;
      

  8.   

    journay(梦回唐朝) ,不行,我没用错吧
    var
      h,hWND_FORM:THandle;
    begin
      h:=findwindow(nil,'计算器');
      //hWND_FORM:=findwindowex(0,0,nil,'计算器');  也试过
      hWND_FORM:=findwindowex(h,0,nil,'计算器');
      PostMessage (hWND_FORM, WM_KEYDOWN, VK_F1, 0);
      PostMessage (hWND_FORM, WM_KEYUP, VK_F1, 0);
      

  9.   

    我试过了,确实不行,等我查查!下面是个记事本的可以,你参考一下!
    procedure TForm1.Button2Click(Sender: TObject);
    var
      wnd: Hwnd;
      s: string;
      i: integer;
    begin
      wnd := FindWindow('notepad', nil);
      if wnd<>0 then
      begin
        wnd := FindWindowEx(wnd,0,'Edit',nil);
        PostMessage(wnd, WM_KEYDOWN, VK_F1, 0);
        PostMessage(wnd, WM_KEYUP, VK_F1, 0);
      end
      else ShowMessage('notepad not find');
    end;
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      wnd: Hwnd;
      s: string;
      i: integer;
    begin
      wnd := FindWindow( nil,'计算器');
      if wnd<>0 then
      begin
         SHOWWINDOW(WND,SW_SHOW);
         keybd_event(vk_f1,0,KEYEVENTF_EXTENDEDKEY,0);
         keybd_event(vk_f1,0,KEYEVENTF_KEYUP,0);
      end
      else ShowMessage('计算器 not find');
    end;
      

  11.   

    不能用keybd_event,它只对当前活动窗口有效
      

  12.   

    模拟按键
    H := FindWindow(nil,'计算器')
    PostMessage(H, WM_KEYDOWN, VK_F1, 0);
      

  13.   

    wellwelcome(那一剑的风情) ,请仔细看完
      

  14.   

    不是有SHOWWINDOW(WND,SW_SHOW);吗?
    你可以变通一下,比如窗口大小变得很小等等
      

  15.   

    journay(梦回唐朝) ,你的意思是让我把计算器的窗口变的很小?
    SHOWWINDOW(WND,SW_SHOW);似乎无效,setforegroundwindow(wnd);还可以
    keybd_event只对活动窗口有效
      

  16.   

    journay(梦回唐朝)大哥说得很对了阿