假设现在有一个别人的软件A,我想用VC写一段代码,类似于按键精灵的工作,自动点击软件A中的某个按钮!
我想先用Findwindow找到该窗口,之后再进行模拟的按键消息! 不知是否可行! 具体是怎么样去模拟这个点击按钮的消息?

解决方案 »

  1.   

    可行。找到窗口,SendMessage到这个窗口
      

  2.   


    //发送命令一
    void CSenderDlg::OnCommand1() 
    {
    //找到接收消息的窗口(窗口名为Receiver)
    CString str="Receiver";
    CWnd *pWnd=CWnd::FindWindow(NULL,str);
    if(pWnd)
    pWnd->SendMessage(WM_COMM,0,0); 
    }
      

  3.   


    可以
    找到编辑框句柄,可以通过spy++得到它的与父窗口关系SendMessage(hWnd,WM_CHAR,_T("Test"),0); 
      

  4.   


    CWnd *pWnd;
    pWnd = CWnd::FindWindow(NULL,"计算器");
    if (pWnd)
        pWnd->SendMessage(WM_KEYDOWN, 50 , 1);我这个试了下貌似不行,50是主键盘上2的虚拟键值! 我这个为什么不能实现在计算器中输入2 ?
      

  5.   

    spy++得到它的与父窗口关系什么意思啊?
      

  6.   

    SendInput
    mouse_event
    keybd_event
    都行
      

  7.   


    CWnd *pWnd;
    pWnd = CWnd::FindWindow(NULL,"计算器");
    if (pWnd)
      pWnd->GetDlgItem(0x193)->SendMessage(WM_CHAR,WPARAM('12'),0);这样怎么不行? 193 是edit的ID
      

  8.   

    HWND hWnd = FindWindow(NULL, _T("计算器"));
    HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
    if(!hWnd)
    {
    cout<<"未找到"<<endl;
    return 0;
    }
    ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));
      

  9.   

    貌似是没有WM_KEYUP 编辑框里谢东西发送WM_CHAR消息
      

  10.   


    有WM_KEYUP 和WM_KEYDOWN消息,你按下一个键就有一个WM_KEYIDOWN,谈起有WM_KEYUP,
      

  11.   

    HWND hWnd = FindWindow(NULL, _T("计算器"));
    HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
    if(!hWnd)
    {
        cout<<"未找到"<<endl;
        return 0;
    }
    ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));这个方法可行,那向按钮发送消息是如何发送的?
    有多个按钮,他们都是Button ,怎么去区分他们?
      

  12.   

    HWND hWnd = FindWindow(NULL, _T("计算器"));
    HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
    if(!hWnd)
    {
        cout<<"未找到"<<endl;
        return 0;
    }
    ::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));可以用
    但是我如果有多个butto,怎么区分他们? 还有就是sendMessage的里面的WM消息要怎么写?
      

  13.   

    找到按钮的父窗口,FindWindow,然后利用FindWindowEx()找到该按钮的HWND
    伪代码:
    HWND hWnd = FindWindow(....);
    if(NULL != hWnd)
    {
     HWND hButton = FindWindowEx(hWnd, ...);
     if(NULL != hButton)
     {
       DWORD nId = GetDlgCtrlID(hButton);
       // 发送BN_CLICKED通知,通过WM_COMMAND消息
       PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hButton);
     }
    }
      

  14.   


    也可以用FindeTopWindow和GetNextWindow获得
    这时候就要用到Spy++了
      

  15.   


    HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd();
    HWND hBtn = FindWindowEx(hWnd,NULL,_T("Button"),_T("7"));
    if(hWnd)
    ::SendMessage(hBtn, WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(291,137));我这段代码有什么问题?
      

  16.   


    HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd(); HWND hBtn1 = FindWindowEx(hWnd,NULL,_T("Button"),_T("7")); if(hWnd)
    {
    DWORD nId = ::GetDlgCtrlID(hBtn1);
    ::SendMessage( hWnd,WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hBtn1);
            }这样搞定了!