我用GetProcessId(HANDLE _handle)取得了一个进程的有效句柄,现在我想用它来获取这个进程的窗体句柄甚至于窗体上的文本输入框(CEdit)的窗体句柄,请问朋友们WindowsAPI能实现我这个愿望吗?如果可行的话,该怎样作呢?(特别是其中一些天书一样的参数)盼朋友们一吐为快!

解决方案 »

  1.   

    通过进程handle无法直接获取窗口句柄吧
    只能通过枚举所有的窗口,然后将窗口句柄与进程句柄比较。
    不过有的进程有很多窗口。楼下继续。
      

  2.   

    是啊,枚举窗体,但是:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)原型中的两个参数我到哪儿去弄呢?而且,从这个函数原型来看,我好象没有得到枚举出来的窗体句柄,又怎么“将窗口句柄与进程句柄比较。”呢?盼老师们一吐为快,指点迷津!
      

  3.   

    (WNDENUMPROC lpEnumFunc,LPARAM lParam)
    第一个参数是你自己写的回调函数,就是枚举每个窗体后都会调用你的函数
    第二个参数是你要传给自己回调函数的参数BOOL   CALLBACK   EnumProc(HWND   hWnd,LPARAM   LParam)   
     {   
              //add   your   code   
              //如果你不需要继续再对后面的窗口做枚举,   
              //返回FALSE,   否则,必需返回TRUE。   
      }
      

  4.   

    BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)
    你的先定义一个函数,这个函数的外观见WNDENUMPROC,第一个参数就是你的函数的指针。第二个参数你可以随便传一个东西,它会原封不动的传给你的函数,但是由于回调函数必须为静态或者全局函数,所以这里我一般给this过去。
      

  5.   

    调用Enum时,操作系统就开始执行,每找到一个窗口,就会调用你的函数一次,你就要在你的函数里判断是否你要找的窗口了。
      

  6.   

    我用的VC7.1,
    在 BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)中,除了传递一个NULL,什么也传递不过去,总是报错“什么什么不能转换成LPARAM!”气死我了。依样画葫芦:BOOL   CALLBACK  EnumProc(HWND   hWnd,LPARAM   LParam),其中那个LPARAM参数什么都收不到,郁闷啊!自信以前用MFC写过不少程序,一遇到API就头大,求老师们救我...   
      

  7.   

    BOOL CALLBACK EnumWindowsProc(
      HWND hwnd,      // handle to parent window
      LPARAM lParam   // application-defined value
    )
    {
    TCHAR szText[128];
    if( GetWindowText(hwnd, szText, 128) )
    {
    if( strcmp( szText, _T("你要找的窗口的标题")) ==0 )//DownloadFlash
    {
    //找到了,进行你的操作
    return TRUE;
    }
    }
    return TRUE;
    }