Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <psapi.h>
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <sstream>
- #pragma comment(lib, "psapi.lib")
- //имя программы
- #define PROGRAM_NAME "Opera"
- //получить размер памяти, занимаемой приложением
- DWORD GetMemorySize(HANDLE hProc)
- {
- //структура с информацией о процессе
- PROCESS_MEMORY_COUNTERS pmcInfo;
- //получаем информацию о процессе
- if (GetProcessMemoryInfo(hProc, &pmcInfo, sizeof(pmcInfo)))
- return (DWORD)pmcInfo.WorkingSetSize;
- else
- return 0;
- }
- //получить базовый адрес процесса
- LPVOID GetBaseAddress(HANDLE hProc)
- {
- //структура с информацией о процессе
- MODULEINFO miInfo;
- //получаем базовый адрес процесса
- if (GetModuleInformation(hProc, NULL, &miInfo, sizeof(miInfo)))
- return miInfo.EntryPoint;
- else
- return NULL;
- }
- //вывод результата работы
- void MessageResult(DWORD dwStart, DWORD dwMemSize)
- {
- //выводим размер памяти и время выполнения
- std::basic_stringstream<TCHAR> ssInfo;
- ssInfo << TEXT("Программа: ") << TEXT(PROGRAM_NAME) << TEXT("\n") <<
- TEXT("Начальный адрес: ") << dwStart << TEXT("\n") <<
- TEXT("Размер занимаемой памяти: ") << (dwMemSize / 1024) << TEXT(" кБ\n");
- MessageBox(NULL, ssInfo.str().c_str(), TEXT("Результат"), MB_OK);
- }
- int main()
- {
- //ищем окно
- HWND hWnd = FindWindow(NULL, TEXT(PROGRAM_NAME));
- if (!hWnd)
- {
- MessageBox(NULL, TEXT("Программа \"" TEXT(PROGRAM_NAME) "\" не запущена."), TEXT("Ошибка"), MB_IC:: onerror ::);
- return EXIT_FAILURE;
- }
- //получаем ID процесса
- DWORD dwPID;
- GetWindowThreadProcessId(hWnd, &dwPID);
- if (!dwPID)
- {
- MessageBox(NULL, TEXT("Невозможно получить ID процесса."), TEXT("Ошибка"), MB_IC:: onerror ::);
- return EXIT_FAILURE;
- }
- //получаем хэндл процесса
- HANDLE hProc;
- hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPID);
- if (!hProc)
- {
- MessageBox(NULL, TEXT("Невозможно получить хэндл процесса."), TEXT("Ошибка"), MB_IC:: onerror ::);
- return EXIT_FAILURE;
- }
- //получаем размер занимаемой памяти
- DWORD dwMemSize = GetMemorySize(hProc);
- if (!dwMemSize)
- {
- MessageBox(NULL, TEXT("Невозможно получить размер памяти, занимаемой приложением."), TEXT("Ошибка"), MB_IC:: onerror ::);
- //закрываем хэндл процесса
- CloseHandle(hProc);
- return EXIT_FAILURE;
- }
- //начальный адрес
- LPCVOID pAddr = GetBaseAddress(hProc);
- //закрываем хэндл процесса
- CloseHandle(hProc);
- //результат
- MessageResult((DWORD)pAddr, dwMemSize);
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment