zoukankan      html  css  js  c++  java
  • 双进程守护

    BOOL C守护者1号Dlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO:  在此添加额外的初始化代码
        // 1.创建守护者线程
        CreateThread(NULL, NULL, ThreadProc1, NULL, 0, NULL);
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void C守护者1号Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    WORD WINAPI  ThreadProc2(
        _In_  LPVOID lpParameter
        )
    {
        STARTUPINFO st = { sizeof(STARTUPINFO) };
        PROCESS_INFORMATION pt = {};
        while (true)
        {
    
            HWND hWnd = ::FindWindow(NULL, L"守护者1号");
            if (hWnd == NULL)
            {//2号需要创建
                CreateProcess(L"D:\Project\Test002\Debug\守护者1号.exe",
                    NULL, NULL, NULL, NULL, NULL,
                    NULL, NULL, &st, &pt);
                WaitForSingleObject(pt.hProcess, -1);
            }
            else
            {// 2号已经打开
                DWORD dwPid = 0;
                GetWindowThreadProcessId(hWnd, &dwPid);
                HANDLE hProc = OpenProcess(SYNCHRONIZE, NULL, dwPid);
                WaitForSingleObject(hProc, -1);
            }
        }
        return 0;
    }
  • 相关阅读:
    python移动文件
    python分割多个分隔符
    pywintypes.com_error: (-2147418111, '被呼叫方拒绝接收呼叫。', None, None)
    MySQL查看和修改字符集的方法
    Django创建超级管理员用户
    P2567.[SCOI2009] windy 数(数位DP)
    920G.List of Integers(莫比乌斯函数+二分)
    916E.Jamie and Tree (倍增LCA+线段树维护DFS序)
    GYM100376F.Circle and Trees(树形DP+倍增LCA)
    GYM100376E.LinearMapReduce(线段树维护矩阵乘法)
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5317250.html
Copyright © 2011-2022 走看看