IDPMSDeamon.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "pch.h"
  2. #include "IDPMSDeamon.h"
  3. IMPLEMENT_DYNCREATE(IDPMSDeamon, CWinThread)
  4. BEGIN_MESSAGE_MAP(IDPMSDeamon, CWinThread)
  5. // {{AFX_MSG_MAP(DynamicTaskThread)
  6. // NOTE - the ClassWizard will add and remove mapping macros here.
  7. ON_THREAD_MESSAGE(WM_START_IDPMS, OnStartIDPMS)
  8. //}}AFX_MSG_MAP
  9. END_MESSAGE_MAP()
  10. IDPMSDeamon::IDPMSDeamon(void)
  11. {
  12. }
  13. IDPMSDeamon::~IDPMSDeamon(void)
  14. {
  15. }
  16. BOOL IDPMSDeamon::InitInstance()
  17. {
  18. return TRUE;
  19. }
  20. /**************************************************************************************************
  21. 函 数 名 :OnStartIDPMS
  22. 功能描述 :启动IDPMS进程
  23. 输入参数 :略
  24. 输出参数 :无
  25. 返 回 值 :void
  26. **************************************************************************************************/
  27. void IDPMSDeamon::OnStartIDPMS(WPARAM wParam, LPARAM lParam)
  28. {
  29. STARTUPINFO si;
  30. ZeroMemory(&si, sizeof(si));
  31. si.cb = sizeof(si);
  32. si.dwFlags = STARTF_USESHOWWINDOW;
  33. si.wShowWindow = SW_HIDE;
  34. PROCESS_INFORMATION pi;
  35. ZeroMemory(&pi, sizeof(pi));
  36. BOOL bRet = CreateProcess(g_szIDPMSPath.GetBuffer(), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
  37. if (!bRet) {
  38. AfxMessageBox("IDPMS启动失败");
  39. LOG::E(_T("IDPMS启动失败"));
  40. return ;
  41. }
  42. PROCESS_INFO procwin;
  43. procwin.dwProcessId = pi.dwProcessId;
  44. procwin.hWnd = NULL;
  45. // 等待新进程初始化完毕
  46. WaitForInputIdle(pi.hProcess, 5000);
  47. EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
  48. if (NULL == procwin.hWnd)
  49. {
  50. Sleep(200);
  51. EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);
  52. }
  53. // 赋值全局量
  54. g_hIDPMSHWnd = procwin.hWnd; //窗口HWND
  55. g_dwIDPMSProcessId = procwin.dwProcessId; //进程ID
  56. ::ShowWindow(g_hIDPMSHWnd, SW_HIDE);
  57. WaitForSingleObject(pi.hProcess, INFINITE);
  58. return;
  59. }