我用ShellExecute打开了一个外部程序,该程序像Winamp一样有多个窗体,请问我怎么样才能找到主窗体的操作句柄,并且将键盘的输入焦点始终定在主窗体上?
问题解决立即给分,请大家帮帮忙,谢谢!!!

解决方案 »

  1.   

    不是所有的程序都象delphi一样有主窗口这个概念的。。建议阅读一下VCL的forms unit。看看delphi是怎么实现的。
      

  2.   

    findwindow('目标主窗口的标题');
      

  3.   

    Winexec(Pchar('mspaint.exe'),SW_NORMAL);
      SendMessage(FindWindow(nil,'未命名 - 画图'),WM_SETFOCUS,0,0);
      

  4.   

    我用ShellExecute打开外部程序之后,在findwindow中无论是用窗体类还是窗体的标题,我都无法获得窗体的句柄,返回值总是零,我在findwindow返回值为0的时候也调用getlasterror函数查看出错消息,结果是函数执行成功,是不是用findwindow根本就不可能找到呢,有没有什么其他方法可以找到呀?
      

  5.   

    to:gyf(NetSwimer)
    枚举窗口该怎么做?我没有做过这样的程序,所以有点茫然,请指教一下,谢谢!!
      

  6.   

    >>>>我用ShellExecute打开外部程序之后,在findwindow中无论是用窗体类还是窗体的标题,我都无法获得窗体的句柄,返回值总是零不应该啊,你是不是把findwindow的参数搞混了?!或者ShellExecute后sleep一下在findwindow试试看。
      

  7.   

    to:xixuemao(蓝白色的忧伤)
    参数肯定没有搞混,而且我在ShellExecute函数之后,我是用while循环来查找窗体的,可是程序执行到这里就进入无限循环了,执行了十几分钟都找不到,郁闷呐!!!!!
      

  8.   

    还有就是用spy++看到的这个窗体的类名很奇怪,他是“Afx:400000:b:10011:6:xxxxxxx”,其中xxxxxxx每次打开都不同,我以前没有见过这样的类名,不知道谁可以告诉我这究竟是什么类名呀
      

  9.   

    转:
    mfc程序的类名是系统自动取的,它有这么两种形式1.Afx:%x:%x
    2.Afx:%x:%x:%x:%x:%x每个%x依次代表了该窗口类WNDCLASS属性中的以下几个属性
    WNDCLASS.hInstance 
    WNDCLASS.style 
    WNDCLASS.hCursor 
    WNDCLASS.hbrBackground 
    WNDCLASS.hIcon 第1种形式表示hCursor,hbrBackground和hIcon属性都为Null所以要获得这种窗口的句柄恐怕就要先获得其所在程序的进程或线程句柄,然后再枚举子窗口