zoukankan      html  css  js  c++  java
  • 创建进程后得到该进程的主窗口句柄

      http://blog.csdn.net/starlee/article/details/4861174/

     最近抽空用VC写了一个小应用程序。主要功能就是创建进程,并到该进程的主窗口句柄,然后再给该窗口发消息。下面把代码共享给大家。

     

    [cpp] view plain copy
    1. HWND CreateMyProcess()  
    2. {  
    3.     // 进程启动信息  
    4.     STARTUPINFO si;  
    5.     memset(&si, 0, sizeof(STARTUPINFO));  
    6.     si.cb = sizeof(STARTUPINFO);  
    7.     si.dwFlags = STARTF_USESHOWWINDOW;  
    8.     si.wShowWindow = SW_SHOW;  
    9.   
    10.     // 进程信息  
    11.     PROCESS_INFORMATION pi;  
    12.       
    13.     // 创建进程  
    14.     // 第二个参数是要启动的应用程序路径名,比如:C:/Test.exe  
    15.     if (CreateProcess(NULL, "应用程序路径名", NULL, NULL, false, 0, NULL, NULL, &si, &pi))  
    16.     {  
    17.         ProcessWindow procwin;  
    18.         procwin.dwProcessId = pi.dwProcessId;  
    19.         procwin.hwndWindow = NULL;  
    20.   
    21.         // 等待新进程初始化完毕  
    22.         WaitForInputIdle(pi.hProcess, 5000);  
    23.   
    24.         // 查找主窗口  
    25.         EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);  
    26.           
    27.         return procwin.hwndWindow  
    28.     }  
    29. }  
       

     

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

     

     

    [cpp] view plain copy
    1. struct ProcessWindow  
    2. {  
    3.     DWORD dwProcessId;  
    4.     HWND hwndWindow;  
    5. };  

     

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

    [cpp] view plain copy
    1. // 查找进程主窗口的回调函数  
    2. BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)  
    3. {  
    4.     ProcessWindow *pProcessWindow = (ProcessWindow *)lParam;  
    5.   
    6.     DWORD dwProcessId;  
    7.     GetWindowThreadProcessId(hWnd, &dwProcessId);  
    8.   
    9.     // 判断是否是指定进程的主窗口  
    10.     if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL)  
    11.     {  
    12.         pProcessWindow->hwndWindow = hWnd;  
    13.   
    14.         return FALSE;  
    15.     }  
    16.   
    17.     return TRUE;  
    18. }  
      

  • 相关阅读:
    zabbix
    amoeba 读写分离
    部署MySQL-主从异步复制
    MySQL 基本操作
    mysql 完整备份和恢复
    正则匹配表达式各个符文表达的意义
    Include和require的区别
    nosql和Mysql的区别
    Git与SVN的区别
    mongodb与mysql区别
  • 原文地址:https://www.cnblogs.com/nafio/p/9137224.html
Copyright © 2011-2022 走看看