使用ShellExecute或ShellExecuteEx打开一个应用程序,好像能获得HINSTANCE,
本来用HINSTANCE是可以获得窗口句柄的,不过不成功,不知道哪里出错了,请教!

解决方案 »

  1.   

    还是用findwindow 或 enumwindow
      

  2.   

    使用ShellExecuteEx打开一个应用程序可以得到,在SHELLEXECUTEINFO结构中的HANDLE hProcess;成员;
    MSDN的解释:
    hProcess 
    Handle to the newly started application. This member is set on return and is always NULL if fMask is not set to SEE_MASK_NOCLOSEPROCESS.
      

  3.   

    用CreateProcess创建一个进程后用OpenProcess可以获得该进程句柄。
      

  4.   

    instance怎么得到hwnd?我一直都用findwindow,不过自己觉得enumwindow更好
      

  5.   

    static CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );
    HWND FindWindow(
      LPCTSTR lpClassName,  // pointer to class name
      LPCTSTR lpWindowName  // pointer to window name
    );
     
    根据窗口类名和窗口名
      

  6.   

    用CreateProcess能控制得最彻底!
      

  7.   

    在只知道程序路径的情况下,是无法使用findwindow和enumwindow,
    如何"用CreateProcess创建一个进程后用OpenProcess可以获得该进程句柄。"
    贴个例子好吗?
      

  8.   

    CreateProcess不是已经返回了该进程的句柄了吗?为什么还要OpenProcess
      

  9.   

    楼上的说得对!  
     STARTUPINFO si;
        PROCESS_INFORMATION pi;    ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
        char path[50]="d:\\myexe.ext";
        BOOL nRet =CreateProcess(NULL,path,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS, NULL,NULL, &si,&pi);
        HANDLE hProcess = pi.hProcess;//这句柄了。