desktop.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #ifdef _WIN32
  3. #include <vector>
  4. #include "util/system.h"
  5. #include "util/process.h"
  6. #include "base/define.h"
  7. namespace ylib
  8. {
  9. /*********************************************************************************
  10. * Class:桌面
  11. *********************************************************************************/
  12. class desktop
  13. {
  14. public:
  15. desktop(const std::string& name,bool create_new,bool destory = true);
  16. desktop(size_t handle,bool destory = true);
  17. ~desktop();
  18. //显示桌面
  19. bool show();
  20. //执行程序
  21. bool exec(const std::string& filepath, const std::string& path = "");
  22. //置为本桌面
  23. void current();
  24. //关闭所有创建进程
  25. void destoryAllProcesses(bool subproc = true);
  26. //取句柄
  27. size_t handle();
  28. //取桌面句柄
  29. size_t winhandle();
  30. private:
  31. //结束子进程
  32. void desktorySubProcesses(const std::list<ylib::process::proc_info>& list, size_t pid);
  33. private:
  34. // 桌面句柄
  35. size_t m_desktop;
  36. // 桌面名称
  37. std::string m_name;
  38. // 执行程序句柄
  39. std::vector<size_t> m_exec_hds;
  40. // 销毁句柄
  41. bool m_destory;
  42. public:
  43. /*************************************[ 公开静态函数 ]******************************************/
  44. struct DesktopInfo
  45. {
  46. DesktopInfo()
  47. {
  48. handle = 0;
  49. }
  50. std::string name;
  51. size_t handle;
  52. };
  53. //取所有桌面
  54. static std::vector<DesktopInfo> all(const std::string& winsta);
  55. //取当前桌面
  56. static size_t get_current();
  57. //显示桌面
  58. static void show(size_t handle);
  59. //名称取桌面
  60. static size_t get_desktop(const std::string& name);
  61. //关闭桌面
  62. static bool close(size_t desktop);
  63. };
  64. }
  65. #endif