Guest User

pstools.h

a guest
Feb 18th, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifndef PSTOOLS_H_INCLUDED
  2. #define PSTOOLS_H_INCLUDED
  3.  
  4. #include <iostream>
  5. #include <string>
  6. #include <windows.h>
  7. #include <tlhelp32.h>
  8. #include <psapi.h>
  9.  
  10.  
  11. struct handle_data
  12. {
  13.         unsigned long processId;
  14.         HWND hBestHandle;
  15. };
  16. BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam);
  17. BOOL IsMainWindow(HWND handle);
  18.  
  19.  
  20. class ProcessTools
  21. {
  22.     HANDLE hSnap;
  23.     PROCESSENTRY32 pe;
  24.  
  25. public:
  26.     ProcessTools()
  27.     {
  28.         hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  29.         if(hSnap != INVALID_HANDLE_VALUE)
  30.         {
  31.             ZeroMemory(&pe, sizeof(PROCESSENTRY32));
  32.             pe.dwSize = sizeof(PROCESSENTRY32);
  33.         }
  34.     }
  35.     ~ProcessTools()
  36.     {
  37.         CloseHandle(hSnap);
  38.     }
  39.     HANDLE OpenProcess(LPCSTR lpcsName, DWORD dwAccess)
  40.     {
  41.         if(Process32First(hSnap, &pe))
  42.         {
  43.             do
  44.             {
  45.                 if(!lstrcmpi(pe.szExeFile, lpcsName))
  46.                 {
  47.                     return ::OpenProcess(dwAccess, NULL, pe.th32ProcessID);
  48.                 }
  49.             } while (Process32Next(hSnap, &pe));
  50.         }
  51.         return 0;
  52.     }
  53.     DWORD GetProcessId(LPCSTR lpcsName)
  54.     {
  55.         if(Process32First(hSnap, &pe))
  56.         {
  57.             do
  58.             {
  59.                 if(!lstrcmpi(pe.szExeFile, lpcsName))
  60.                 {
  61.                     return pe.th32ProcessID;
  62.                 }
  63.             } while (Process32Next(hSnap, &pe));
  64.         }
  65.         return 0;
  66.     }
  67.     DWORD GetProcessId(LPCSTR lpcsClassName, LPCSTR lpcsWindowName)
  68.     {
  69.         DWORD* lpdwProcessId = NULL;
  70.  
  71.         HWND hWnd = FindWindow(lpcsClassName, lpcsWindowName);
  72.         if(hWnd != INVALID_HANDLE_VALUE)
  73.         {
  74.             GetWindowThreadProcessId(hWnd, lpdwProcessId);
  75.         }
  76.         return 0;
  77.     }
  78.     HWND FindWindowByPid(unsigned long processId)
  79.     {
  80.         handle_data data;
  81.         data.processId = processId;
  82.         data.hBestHandle = 0;
  83.  
  84.         EnumWindows(EnumWindowsCallback, (LPARAM)&data);
  85.         return data.hBestHandle;
  86.     }
  87.     void GetWindowTitle(int processId, LPTSTR lpString, int nMaxCount)
  88.     {
  89.         HWND hWnd = FindWindowByPid(processId);
  90.         GetWindowText(hWnd, lpString, nMaxCount);
  91.         //GetWindowText(FindWindowByPid(processId), lpString, nMaxCount);
  92.     }
  93.     DWORD GetProcessBaseAddress(DWORD processId)
  94.     {
  95.         MODULEENTRY32 me32 = { sizeof( MODULEENTRY32 ) };
  96.         HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, processId);
  97.  
  98.         if (hSnapshot == INVALID_HANDLE_VALUE)
  99.             return 0;
  100.  
  101.         if (Module32First(hSnapshot, &me32))
  102.         {
  103.             CloseHandle( hSnapshot );
  104.             return (DWORD)me32.modBaseAddr;
  105.         }
  106.  
  107.         CloseHandle(hSnapshot);
  108.         return 0;
  109.     }
  110.     DWORD GetModuleBase(HANDLE hProc, std::string &sModuleName)
  111.     {
  112.        HMODULE *hModules;
  113.        char szBuf[256];
  114.        DWORD cModules;
  115.        DWORD dwBase = -1;
  116.        //------
  117.  
  118.        EnumProcessModules(hProc, hModules, 0, &cModules);
  119.        hModules = new HMODULE[cModules/sizeof(HMODULE)];
  120.  
  121.        if(EnumProcessModules(hProc, hModules, cModules/sizeof(HMODULE), &cModules)) {
  122.           for(int i = 0; i < cModules/sizeof(HMODULE); i++) {
  123.              if(GetModuleBaseName(hProc, hModules[i], szBuf, sizeof(szBuf))) {
  124.                 if(sModuleName.compare(szBuf) == 0) {
  125.                    dwBase = (DWORD)hModules[i];
  126.                    break;
  127.                 }
  128.              }
  129.           }
  130.        }
  131.        delete[] hModules;
  132.  
  133.        return dwBase;
  134.     }
  135. };
  136.  
  137. #endif // PSTOOLS_H_INCLUDED
Add Comment
Please, Sign In to add comment