LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (uMsg == WM_SETTEXT && playerName && lstrcmpW(reinterpret_cast<LPCWSTR>(lParam), playerName) != 0) {
return TRUE;
}
return reinterpret_cast<WNDPROC>(wndProcOriginalHandler)(hwnd, uMsg, wParam, lParam);
}
BOOL CALLBACK WndCallback(HWND hwnd, LPARAM lparam) {
DWORD pid;
GetWindowThreadProcessId(hwnd, &pid);
if (pid == static_cast<DWORD>(lparam)) {
if (!wndProcOriginalHandler) {
wndProcOriginalHandler = reinterpret_cast<LPVOID>(GetWindowLong(hwnd, GWL_WNDPROC));
if (!SetWindowLong(hwnd, GWL_WNDPROC, reinterpret_cast<LONG>(&WndProc))) {
OutputDebugStringA("failed to change window proc handler");
::ExitProcess(0);
}
}
pHwnd = hwnd;
if (SetWindowTextW(hwnd, playerName) == FALSE) {
OutputDebugStringA("failed to change window text");
}
return FALSE;
}
return TRUE;
}