我的问题是这样的:一个应用,在主窗体之上可以创建多个属于主窗体的子窗体,在子窗体上有各种控件。我现在想得到子窗体的名柄!!!使用GetActiveWindow()只能得到主窗体的句柄;
使用GetForegroundWindow()只能得到主窗体的句柄;使用GetWindow()可以得到子窗体上控制的句柄,但不是子窗体的;
使用GetForegroundInfo()可以得到子窗体和主窗体的句柄,但都不是子窗体的;请问多位大侠,如何得到子窗体的句柄???

解决方案 »

  1.   

    在你的窗体应用程序中, 假如有一按钮ID: IDC_BTN_TEST, 我们来获取它的句柄.GetDlgItem(IDC_BTN_TEST)  // 这一步就获取了此按钮的CWnd指针, 而在CWnd类里有m_hWnd成员函数, 此成员函数就是你要的子窗体(按钮)的句柄.GetDlgItem(IDC_BTN_TEST)->SetWindowText("OK");  // 这样就设置了此按钮的Text
      

  2.   

    对象调用GetSafeHwnd()函数就可以了
      

  3.   

    我是不是看错题目了?
    sdk?句柄?
    sdk本来就是用句柄来控制的,不知道句柄,怎么放子窗口?
      

  4.   

    或者说,楼主要查找某个窗口上的子窗口?
    FindWindow,EnumWindow
      

  5.   

    楼上各位,我需要SDK的解决方案。GetSafeHwnd()是MFC下的,不能使用。
    EnumChildWindows(),没有这个函数啊!
      

  6.   

    我需要Win32 API的解决方案,不能使用MFC的。
    我有是Windows CE下使用EVC+API编程的。
      

  7.   

    我是通过全局钩子,截获自定义的按键消息,然后给我的应用的Top-level窗体发送一个消息。
      

  8.   

    CE下当然没有EnumChildWindows()那就只能EnumWindow(),GetWindow()自己遍历了
      

  9.   

    保存下来,可是钩子DLL中,不知道某个时候,那个子窗体在顶层啊!
    不可能所有子窗体都发一次吧。
      

  10.   

    我来结贴吧:
    HWND hwndChild = ::GetWindow( m_hWnd, GW_CHILD);  
    while(hwndChild)   
    {   
    SendMessage(WM_XXXXX_MSG,wp,lp);
    hwndChild = ::GetWindow( hwndChild, GW_HWNDNEXT);   
    }  
      

  11.   

    我来结贴吧: 详细补充,在VS2005下刚刚测试成功
    HWND hwndChild = ::GetWindow( m_hWnd, GW_CHILD);  
    while(hwndChild)  
    {  
    SendMessage(WM_XXXXX_MSG,wp,lp);  //这里要修改为SendMessage(hwndChild,WM_XXXXX_MSG,wp,lp);  才能够传递到预定句柄hwndChild = ::GetWindow( hwndChild, GW_HWNDNEXT);  
    }