诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
2.9 KiB

  1. #include "StdAfx.h"
  2. #include "StatisticalUser.h"
  3. #include <tlhelp32.h>
  4. #include <Psapi.h>
  5. #include <strsafe.h>
  6. StatisticalUser::StatisticalUser(void)
  7. {
  8. }
  9. StatisticalUser::~StatisticalUser(void)
  10. {
  11. }
  12. BOOL StatisticalUser::Run(void)
  13. {
  14. PocessInfo mPocess; //当前窗口的进程信息
  15. CList<PocessInfo> ListPocess; //进程列表
  16. //当前操作窗口句柄
  17. HWND hActive = ::GetForegroundWindow();
  18. //取当前进程的所有窗口
  19. CList<HWND> RetListHwnd;
  20. BOOL bRet = GetWindowHwndByPid(mPocess.ProcessID,RetListHwnd);
  21. return TRUE;
  22. }
  23. BOOL StatisticalUser::EnablePriv()
  24. {
  25. HANDLE hToken;
  26. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
  27. {
  28. TOKEN_PRIVILEGES tkp;
  29. LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);//修改进程权限
  30. tkp.PrivilegeCount = 1;
  31. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  32. AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL);//通知系统修改进程权限
  33. return((GetLastError() == ERROR_SUCCESS));
  34. }
  35. return TRUE;
  36. }
  37. //获取权限
  38. BOOL StatisticalUser::GetTokenByName(DWORD &th32ProcessID, CString csPathName)
  39. {
  40. if(csPathName == L"")
  41. {
  42. return FALSE;
  43. }
  44. HANDLE hProcessSnap = NULL;
  45. BOOL bRet = FALSE;
  46. PROCESSENTRY32 pe32 = {0};
  47. hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  48. if (hProcessSnap == INVALID_HANDLE_VALUE)
  49. return (FALSE);
  50. pe32.dwSize = sizeof(PROCESSENTRY32);
  51. if (Process32First(hProcessSnap, &pe32))
  52. {
  53. do
  54. {
  55. CString csTest = pe32.szExeFile;
  56. if (csTest == csPathName)
  57. {
  58. th32ProcessID = pe32.th32ProcessID;
  59. CloseHandle (hProcessSnap);
  60. return (TRUE);
  61. }
  62. }
  63. while (Process32Next(hProcessSnap, &pe32));
  64. bRet = TRUE;
  65. }
  66. else
  67. bRet = FALSE;
  68. CloseHandle (hProcessSnap);
  69. return (FALSE);
  70. }
  71. ////////////由进程ID获取窗口句柄/////
  72. BOOL StatisticalUser::GetWindowHwndByPid(DWORD dwProcessID,CList<HWND>& mList)
  73. {
  74. BOOL bRet = FALSE;
  75. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  76. HWND h = GetTopWindow(0);
  77. while(h)
  78. {
  79. DWORD pid=0;
  80. DWORD dwThreadid=GetWindowThreadProcessId(h,&pid);
  81. if (dwThreadid != 0)
  82. {
  83. if (pid==dwProcessID)
  84. {
  85. if(IsWindow(h) && IsWindowVisible(h))
  86. {
  87. mList.AddTail(h);
  88. bRet = TRUE;
  89. }
  90. }
  91. }
  92. h=GetNextWindow(h,GW_HWNDNEXT);
  93. }
  94. return bRet;
  95. }
  96. //获取进程路径
  97. CString StatisticalUser::GetProcessPath(DWORD idProcess)
  98. {
  99. // 获取进程路径
  100. CString sPath;
  101. // 打开进程句柄
  102. HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,idProcess);
  103. if(NULL!=hProcess)
  104. {
  105. HMODULE hMod;
  106. DWORD cbNeeded;
  107. // 获取路径
  108. if(EnumProcessModules(hProcess, &hMod,sizeof(hMod), &cbNeeded) )
  109. {
  110. DWORD dw=GetModuleFileNameEx(hProcess,hMod,sPath.
  111. GetBuffer(MAX_PATH),MAX_PATH);
  112. sPath.ReleaseBuffer();
  113. }
  114. CloseHandle(hProcess);
  115. }
  116. return(sPath);
  117. }