#include "StdAfx.h" #include "StatisticalUser.h" #include #include #include StatisticalUser::StatisticalUser(void) { } StatisticalUser::~StatisticalUser(void) { } BOOL StatisticalUser::Run(void) { PocessInfo mPocess; //当前窗口的进程信息 CList ListPocess; //进程列表 //当前操作窗口句柄 HWND hActive = ::GetForegroundWindow(); //取当前进程的所有窗口 CList RetListHwnd; BOOL bRet = GetWindowHwndByPid(mPocess.ProcessID,RetListHwnd); return TRUE; } BOOL StatisticalUser::EnablePriv() { HANDLE hToken; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { TOKEN_PRIVILEGES tkp; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);//修改进程权限 tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL);//通知系统修改进程权限 return((GetLastError() == ERROR_SUCCESS)); } return TRUE; } //获取权限 BOOL StatisticalUser::GetTokenByName(DWORD &th32ProcessID, CString csPathName) { if(csPathName == L"") { return FALSE; } HANDLE hProcessSnap = NULL; BOOL bRet = FALSE; PROCESSENTRY32 pe32 = {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return (FALSE); pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32)) { do { CString csTest = pe32.szExeFile; if (csTest == csPathName) { th32ProcessID = pe32.th32ProcessID; CloseHandle (hProcessSnap); return (TRUE); } } while (Process32Next(hProcessSnap, &pe32)); bRet = TRUE; } else bRet = FALSE; CloseHandle (hProcessSnap); return (FALSE); } ////////////由进程ID获取窗口句柄///// BOOL StatisticalUser::GetWindowHwndByPid(DWORD dwProcessID,CList& mList) { BOOL bRet = FALSE; AFX_MANAGE_STATE(AfxGetStaticModuleState()); HWND h = GetTopWindow(0); while(h) { DWORD pid=0; DWORD dwThreadid=GetWindowThreadProcessId(h,&pid); if (dwThreadid != 0) { if (pid==dwProcessID) { if(IsWindow(h) && IsWindowVisible(h)) { mList.AddTail(h); bRet = TRUE; } } } h=GetNextWindow(h,GW_HWNDNEXT); } return bRet; } //获取进程路径 CString StatisticalUser::GetProcessPath(DWORD idProcess) { // 获取进程路径 CString sPath; // 打开进程句柄 HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,idProcess); if(NULL!=hProcess) { HMODULE hMod; DWORD cbNeeded; // 获取路径 if(EnumProcessModules(hProcess, &hMod,sizeof(hMod), &cbNeeded) ) { DWORD dw=GetModuleFileNameEx(hProcess,hMod,sPath. GetBuffer(MAX_PATH),MAX_PATH); sPath.ReleaseBuffer(); } CloseHandle(hProcess); } return(sPath); }