您的位置:首页 > 其它

创建进程后得到该进程的主窗口句柄

2016-12-05 16:27 357 查看
  http://blog.csdn.net/starlee/article/details/4861174/
 最近抽空用VC写了一个小应用程序。主要功能就是创建进程,并到该进程的主窗口句柄,然后再给该窗口发消息。下面把代码共享给大家。
 

[cpp] view
plain copy

HWND CreateMyProcess()  

{  

    // 进程启动信息  

    STARTUPINFO si;  

    memset(&si, 0, sizeof(STARTUPINFO));  

    si.cb = sizeof(STARTUPINFO);  

    si.dwFlags = STARTF_USESHOWWINDOW;  

    si.wShowWindow = SW_SHOW;  

  

    // 进程信息  

    PROCESS_INFORMATION pi;  

      

    // 创建进程  

    // 第二个参数是要启动的应用程序路径名,比如:C:/Test.exe  

    if (CreateProcess(NULL, "应用程序路径名", NULL, NULL, false, 0, NULL, NULL, &si, &pi))  

    {  

        ProcessWindow procwin;  

        procwin.dwProcessId = pi.dwProcessId;  

        procwin.hwndWindow = NULL;  

  

        // 等待新进程初始化完毕  

        WaitForInputIdle(pi.hProcess, 5000);  

  

        // 查找主窗口  

        EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);  

          

        return procwin.hwndWindow  

    }  

}  

   

 
    上面代码中用到了一个自定义的结构ProcessWindow。该结构只含有两个成员,当做参数来传入进程ID和传出主窗口句柄。
 
 

[cpp] view
plain copy

struct ProcessWindow  

{  

    DWORD dwProcessId;  

    HWND hwndWindow;  

};  

 
    其实,查找指定进程的主窗口的功能是由下面这个回调函数来实现的。

[cpp] view
plain copy

// 查找进程主窗口的回调函数  

BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)  

{  

    ProcessWindow *pProcessWindow = (ProcessWindow *)lParam;  

  

    DWORD dwProcessId;  

    GetWindowThreadProcessId(hWnd, &dwProcessId);  

  

    // 判断是否是指定进程的主窗口  

    if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL)  

    {  

        pProcessWindow->hwndWindow = hWnd;  

  

        return FALSE;  

    }  

  

    return TRUE;  

}  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐