| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "pch.h"
- #include "IDPMSDeamon.h"
- IMPLEMENT_DYNCREATE(IDPMSDeamon, CWinThread)
- BEGIN_MESSAGE_MAP(IDPMSDeamon, CWinThread)
- // {{AFX_MSG_MAP(DynamicTaskThread)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- ON_THREAD_MESSAGE(WM_START_IDPMS, OnStartIDPMS)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- IDPMSDeamon::IDPMSDeamon(void)
- {
- }
- IDPMSDeamon::~IDPMSDeamon(void)
- {
- }
- BOOL IDPMSDeamon::InitInstance()
- {
- return TRUE;
- }
- /**************************************************************************************************
- 函 数 名 :OnStartIDPMS
- 功能描述 :启动IDPMS进程
- 输入参数 :略
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void IDPMSDeamon::OnStartIDPMS(WPARAM wParam, LPARAM lParam)
- {
- STARTUPINFO si;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
- PROCESS_INFORMATION pi;
- ZeroMemory(&pi, sizeof(pi));
- BOOL bRet = CreateProcess(g_szIDPMSPath.GetBuffer(), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
- if (!bRet) {
- AfxMessageBox("IDPMS启动失败");
- LOG::E(_T("IDPMS启动失败"));
- return ;
- }
- PROCESS_INFO procwin;
- procwin.dwProcessId = pi.dwProcessId;
- procwin.hWnd = NULL;
- // 等待新进程初始化完毕
- WaitForInputIdle(pi.hProcess, 5000);
- EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
- if (NULL == procwin.hWnd)
- {
- Sleep(200);
- EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
- }
- // 赋值全局量
- g_hIDPMSHWnd = procwin.hWnd; //窗口HWND
- g_dwIDPMSProcessId = procwin.dwProcessId; //进程ID
- ::ShowWindow(g_hIDPMSHWnd, SW_HIDE);
- WaitForSingleObject(pi.hProcess, INFINITE);
-
- return;
- }
|