诸暨麻将添加redis
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

121 líneas
2.6 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::EnablePriv()
  13. {
  14. HANDLE hToken;
  15. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
  16. {
  17. TOKEN_PRIVILEGES tkp;
  18. LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);//修改进程权限
  19. tkp.PrivilegeCount = 1;
  20. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  21. AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL);//通知系统修改进程权限
  22. return((GetLastError() == ERROR_SUCCESS));
  23. }
  24. return TRUE;
  25. }
  26. //获取权限
  27. BOOL StatisticalUser::GetTokenByName(DWORD &th32ProcessID, CString csPathName)
  28. {
  29. if(csPathName == L"")
  30. {
  31. return FALSE;
  32. }
  33. HANDLE hProcessSnap = NULL;
  34. BOOL bRet = FALSE;
  35. PROCESSENTRY32 pe32 = {0};
  36. hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  37. if (hProcessSnap == INVALID_HANDLE_VALUE)
  38. return (FALSE);
  39. pe32.dwSize = sizeof(PROCESSENTRY32);
  40. if (Process32First(hProcessSnap, &pe32))
  41. {
  42. do
  43. {
  44. CString csTest = pe32.szExeFile;
  45. if (csTest == csPathName)
  46. {
  47. th32ProcessID = pe32.th32ProcessID;
  48. CloseHandle (hProcessSnap);
  49. return (TRUE);
  50. }
  51. }
  52. while (Process32Next(hProcessSnap, &pe32));
  53. bRet = TRUE;
  54. }
  55. else
  56. bRet = FALSE;
  57. CloseHandle (hProcessSnap);
  58. return (FALSE);
  59. }
  60. ////////////由进程ID获取窗口句柄/////
  61. BOOL StatisticalUser::GetWindowHwndByPid(DWORD dwProcessID,CList<HWND>& mList)
  62. {
  63. BOOL bRet = FALSE;
  64. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  65. HWND h = GetTopWindow(0);
  66. while(h)
  67. {
  68. DWORD pid=0;
  69. DWORD dwThreadid=GetWindowThreadProcessId(h,&pid);
  70. if (dwThreadid != 0)
  71. {
  72. if (pid==dwProcessID)
  73. {
  74. if(IsWindow(h) && IsWindowVisible(h))
  75. {
  76. mList.AddTail(h);
  77. bRet = TRUE;
  78. }
  79. }
  80. }
  81. h=GetNextWindow(h,GW_HWNDNEXT);
  82. }
  83. return bRet;
  84. }
  85. //获取进程路径
  86. CString StatisticalUser::GetProcessPath(DWORD idProcess)
  87. {
  88. // 获取进程路径
  89. CString sPath;
  90. // 打开进程句柄
  91. HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,idProcess);
  92. if(NULL!=hProcess)
  93. {
  94. HMODULE hMod;
  95. DWORD cbNeeded;
  96. // 获取路径
  97. if(EnumProcessModules(hProcess, &hMod,sizeof(hMod), &cbNeeded) )
  98. {
  99. DWORD dw=GetModuleFileNameEx(hProcess,hMod,sPath.
  100. GetBuffer(MAX_PATH),MAX_PATH);
  101. sPath.ReleaseBuffer();
  102. }
  103. CloseHandle(hProcess);
  104. }
  105. return(sPath);
  106. }