CProcessManager.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include "event.h"
  3. #define OBJPREFIX LR"(Local\)"
  4. constexpr size_t guidSize = std::size(L"{00000000-0000-0000-0000-000000000000}"); // including the null terminator
  5. constexpr size_t prefixSize = std::size(OBJPREFIX) - 1;
  6. constexpr size_t objNameSize = prefixSize + guidSize;
  7. struct ProcessInfo
  8. {
  9. DWORD processId;
  10. DWORD threadId;
  11. HWND hWndConsole;
  12. };
  13. enum struct State
  14. {
  15. Stop,
  16. Running,
  17. WaitStop
  18. };
  19. class CProcessManager : public SSingleton<CProcessManager>
  20. {
  21. public:
  22. CProcessManager();
  23. ~CProcessManager();
  24. void _UpdateClashCmd();
  25. void SetInsTanCe(HINSTANCE m);
  26. void SetArgs(std::filesystem::path exePath, std::filesystem::path homeDir, std::filesystem::path cconfigFile);
  27. void SetConfigFile(std::filesystem::path configFile);
  28. State IsRunning();
  29. const PROCESS_INFORMATION& GetSubProcessInfo();
  30. const PROCESS_INFORMATION& GetClashProcessInfo();
  31. HWND GetConsoleWindow();
  32. void StartTest();
  33. bool Start();
  34. void Stop();
  35. void SendStopSignal();
  36. int SubProcess(std::wstring_view guid);
  37. private:
  38. State _state = State::Stop;
  39. std::filesystem::path _exePath;
  40. std::filesystem::path _homeDir;
  41. std::filesystem::path _configFile;
  42. std::wstring _ctlAddr, _ctlSecret, _clashCmd;
  43. wil::unique_handle _hJob;
  44. wil::unique_process_information _subProcInfo, _clashProcInfo;
  45. HWND _hWndConsole = nullptr;
  46. wil::unique_handle _hEvent;
  47. HINSTANCE mInstance;
  48. };