再把这个问题解释一下
举例说吧
A程序在运行时启动了B程序,并且得到了B程序的应用程序句柄,但是我想在A程序中获得B程序主窗口的句柄,以便在A程序中对B程序的主窗口进行控制。 

解决方案 »

  1.   

    GetWindow(Application.Handle, GW_HWNDPREV)
      

  2.   

    提一点自己的看法。在一个程序中取得另一个程序的主窗口句柄,我理解的意思是这样的,比如我现在知道"记事本"的进程句柄而要得到"记事本"这个主窗口.不知楼主是不是这样一个意思。
    如果是,没有直接的方法。一个进程和窗口本身是一对多的关系。反过来却是可以的。呵呵。
    但我们可以通过变通的方法来取得。先取得进程ID,再通过对现有窗口的枚举(EnumWindows),在回调中通过GetWindowThreadProcessId取得每个窗口的ID,且判断这个窗口的父是不是桌面。如果满足这两个条件,可以认为是主窗口这种方法也有区限性,比如。delphi程序的主窗口一般应该是application
    当然,我还没试最简单的方法是FindWindow,但这样做死了不爽如果两种程序都是自己写,那可以通过自定义消息来处理。
      

  3.   

    TO:black_fox(black_fox) 
    其实还是那个问题,你告诉我控制IE的方法,呵呵,老调重弹。我用shellexecute启动一个IE实例窗口以后就要确定这个窗口的句柄以便对这个窗口进行控制。按你先前告诉我的方法的话,如果在此之前有IE窗口打开,那么这个程序就会控制别的IE窗口而不是程序打开的那个,我现在就是想解决这个问题。
      

  4.   


    TO xyk_king(挥霍寂寞) :我不知道你是要写怎样的一个东西。呵呵。
    按照你这个思想,我觉得可以用CreateProcess来启动IE实例.通过enumthreadwindows来对主线程的窗口进行枚举。
      

  5.   

    非常同意  black_fox(black_fox) 的思路!!!
      

  6.   

    GetWindow(Application.Handle, GW_HWNDPREV)
    Delphi的Application的Handle与MainForm的Handle是不同的。而且按其内部机制用上述语句应可得到MainForm的Handle