#include "FindPID.h"
struct
DATA
{
unsigned
long
process_id;
HWND
Handle;
};
BOOL
IsMainWindow(
HWND
handle)
{
return
GetWindow(handle, GW_OWNER) == (
HWND
)0 && IsWindowVisible(handle);
}
BOOL
CALLBACK EnumWindowsCallback(
HWND
handle,
LPARAM
lParam)
{
DATA& data = *(DATA*)lParam;
unsigned
long
process_id = 0;
GetWindowThreadProcessId(handle, &process_id);
if
(data.process_id != process_id || !IsMainWindow(handle)) {
return
TRUE;
}
data.Handle = handle;
return
FALSE;
}
HWND
FindMainWindow(unsigned
long
process_id)
{
DATA data;
data.process_id = process_id;
data.Handle = 0;
EnumWindows(EnumWindowsCallback, (
LPARAM
)&data);
return
data.Handle;
}
PROCESSENTRY32 FindProcessname(
const
wchar_t
*name)
{
int
count = 0;
PROCESSENTRY32 c_Process;
c_Process.dwSize =
sizeof
(c_Process);
HANDLE
hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if
(hProcess == INVALID_HANDLE_VALUE)
return
c_Process = {};
bool
bMore = Process32First(hProcess, &c_Process);
while
(bMore)
{
if
(_tcsstr(c_Process.szExeFile, name))
return
c_Process;
bMore = Process32Next(hProcess, &c_Process);
count++;
}
CloseHandle(hProcess);
return
c_Process = {};
}
BOOL
check64ProcessEx(
HANDLE
hProcess)
{
bool
X86 =
false
;
#ifndef _WIN64
X86 = GetProcAddress(GetModuleHandle(TEXT(
"ntdll"
)),
"NtWow64DebuggerCall"
) ==
nullptr
? TRUE : FALSE;
#endif
if
(X86)
return
FALSE;
typedef
BOOL
(WINAPI *ISWOW64PROCESS)(
HANDLE
,
PBOOL
);
ISWOW64PROCESS W64Process;
BOOL
check64 = TRUE;
W64Process = (ISWOW64PROCESS)GetProcAddress(GetModuleHandle(L
"kernel32"
),
"IsWow64Process"
);
if
(W64Process !=
nullptr
)
W64Process(hProcess, &check64);
return
!check64;
}