15,466
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI GetModuleFileNameEx(
__in HANDLE hProcess,
__in HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize
);
#include <iostream>
#include <windows.h>
#include <TLHELP32.H>
using namespace std;
typedef DWORD (__stdcall* PFGetModuleFileNameEx)(HANDLE hProcess,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize);
PFGetModuleFileNameEx GetModuleFileNameEx;
DWORD GetQQProcessId()
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return -1;
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
if (Process32First(hSnapshot, &pe))
{
do
{
if (lstrcmpi(pe.szExeFile, TEXT("qq.exe")) == 0)
{
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
} while(Process32Next(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
return -1;
}
BOOL GetQQProcessPath(LPSTR pszPath, DWORD dwSize)
{
DWORD dwProcessId = GetQQProcessId();
if (dwProcessId == -1)
{
cout << "can't find qq process id" << endl;
return FALSE;
}
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
if (hProcess == NULL)
{
cout << "can't get qq process path" << endl;
return FALSE;
}
HMODULE hPsapi = LoadLibrary(TEXT("psapi.dll"));
if (hPsapi == NULL)
{
cout << "LoadLibrary failed " << endl;
CloseHandle(hProcess);
return FALSE;
}
GetModuleFileNameEx = (PFGetModuleFileNameEx)GetProcAddress(hPsapi, "GetModuleFileNameExA");
if (GetModuleFileNameEx == NULL)
{
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return FALSE;
}
GetModuleFileNameEx(hProcess, NULL, pszPath, dwSize);
cout << pszPath << endl;
CloseHandle(hProcess);
FreeLibrary(hPsapi);
return TRUE;
}
int main(void)
{
CHAR szPath[MAX_PATH] = { 0 };
GetQQProcessPath(szPath, MAX_PATH);
return 0;
}