UtilProcess.cpp
上传用户:lbr_007
上传日期:2019-05-31
资源大小:282k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include <UtilProcess.h>
  3. UtilProcess::UtilProcess(void)
  4. {
  5. InitProcess();
  6. }
  7. UtilProcess::~UtilProcess(void)
  8. {
  9. CloseProcessHandle();
  10. CloseThreadHandle();
  11. }
  12. void UtilProcess::Initialize(void)
  13. {
  14. CloseProcessHandle();
  15. CloseThreadHandle();
  16. InitProcess();
  17. }
  18. void UtilProcess::CloseProcessHandle(void)
  19. {
  20. CloseHandle(m_piProcessB.hProcess);
  21. }
  22. void UtilProcess::CloseThreadHandle(void)
  23. {
  24. CloseHandle(m_piProcessB.hThread);
  25. }
  26. bool UtilProcess::CreateProcess(const char * app_path, const char * cmdline,
  27.    bool showWindow)
  28. {
  29. STARTUPINFO si;
  30. SECURITY_ATTRIBUTES saProcess, saThread;
  31. ZeroMemory(&si, sizeof(si));
  32. si.cb = sizeof(si);
  33. saProcess.nLength = sizeof(saProcess);
  34. saProcess.lpSecurityDescriptor = NULL;
  35. saProcess.bInheritHandle = TRUE;
  36. saThread.nLength = sizeof(saThread);
  37. saThread.lpSecurityDescriptor = NULL;
  38. saThread.bInheritHandle = FALSE;
  39. //
  40. // set the flag that says that we want to use the show/hide setting
  41. //
  42. si.dwFlags |= STARTF_USESHOWWINDOW;
  43. si.wShowWindow = showWindow ? SW_SHOW : SW_HIDE;
  44. m_app_path = app_path ? app_path : "";
  45. m_cmdline = cmdline ? cmdline : "";
  46. bool result = ::CreateProcess(m_app_path.c_str(),
  47. (char *)m_cmdline.c_str(),&saProcess, &saThread, FALSE, 0,
  48. NULL, NULL, &si, &m_piProcessB);
  49. return result;
  50. }
  51. bool UtilProcess::IsCreated(void)const
  52. {
  53. return (m_piProcessB.hProcess ? true : false);
  54. }
  55. bool UtilProcess::IsRunning(void)
  56. {
  57. int result = IsCreated();
  58. if (result)
  59. {
  60. DWORD status;
  61. int code = GetExitCodeProcess(m_piProcessB.hProcess,&status);
  62. if (status != STILL_ACTIVE)
  63. {
  64. result = 0;
  65. }
  66. }
  67. return result;
  68. }
  69. INT32 UtilProcess::Terminate(void)
  70. {
  71. int result = IsRunning();
  72. if (result)
  73. {
  74. DWORD status = 1;
  75. int code = TerminateProcess(m_piProcessB.hProcess, status);
  76. if (code == 0)
  77. {
  78. result = 0;
  79. }
  80. }
  81. return result;
  82. }