想做一个程序实现以下功能:在其它的程序中进行粘贴时,首先对剪贴板的内容进行判断,把其中适合的粘贴进去,不适合的就不粘贴。如:先定义一个热键CTRL+ALT+A ,然后另外有一个程序有3个编辑框,这时剪贴板的内容为123456789,当该程序的第一个编辑框获得焦点时,按热键,则第一个编辑框粘贴进123,第二个编辑框粘贴进456,第三个编辑框粘贴进789。方案:要先取得程序窗口的句柄,再获得第一个编辑框的id,然后取剪贴板的内容粘贴前3个数123粘贴到第一个编辑框,再获取第一个编辑框的next,粘贴456,再取next,粘贴789。问题:1 . 如何取这个程序的窗口的句柄(这个程序是别人的,而且不是固定的一个程序);
      2 . 如果挨个取编辑框的id。这个方案不知可行否,各位有什么更好的方案?

解决方案 »

  1.   

    1 . 如何取这个程序的窗口的句柄(这个程序是别人的,而且不是固定的一个程序);
    FindWindow2 . 如果挨个取编辑框的id。
    GetWindow(parent_handle, GW_CHILD);
    GetWindow(current_handle, GW_HWNDNEXT);
    or
    EnumWindowsProc
      

  2.   

    1.FindWindow
    2.EnumChildWindows具体用法请参考msdn
      

  3.   

    有个问题,FindWindow的参数是类名和窗口名,但别人的程序是不同的,不能固定是哪个类名和窗口名。能不能在按下热键时,取当时获得编辑框焦点的窗口句柄或编辑框的id?
      

  4.   

    在你的程序中先定义一个热键,用按下后就用:HWND GetForegroundWindow(VOID);函数得到当前程序的窗口,再自己用EnumChildWindows枚举窗口中的编辑框控件,最后把剪贴板中内容按实际情况不同发给各个控件。
      

  5.   

    试了一下,不行啊,GetForegroundWindow获得的是本程序的窗口句柄,而虽然FindWindow可以获得其它程序的,但要指定窗口名,不够灵活。
      

  6.   

    GetForegroundWindow函数得到是本程序的窗口,这只能说明你的当前活动程序窗口就是本程序窗口,这点自己看MSDN就知道了。
      

  7.   

    又试了一下,GetForegroundWindow可以获得另一个程序的窗口指针了。请问一下,如何获得这个其它程序的窗口的当前光标所在的编辑框的指针或id 呢?谢谢。
      

  8.   

    用GetFocus()获得的编辑框指针一使用程序就出错关闭了。 CWnd *pWnd = GetForegroundWindow();
     CWnd* pp = pWnd->GetFocus();
     CString str;
     pp->GetWindowText(str);//在这句出错
      

  9.   

    CWnd::GetFocus  
    static CWnd* PASCAL GetFocus( );Return ValueA pointer to the window that has the current focus, or NULL if there is no focus window. 
    显而易见,这时pp是NULL
      

  10.   

    GetFocus不是你这样用的,举例:
    CWnd *temp=GetFocus();
    CString str;
    if(temp)
    {
    temp->GetWindowText(str);
    AfxMessageBox(str);
    }
    else
    AfxMessageBox("Have no focus!");
      

  11.   

    为什么每次pp都是NULL呢,是不是GetFocus();不能用在其它程序的窗口?