LRESULT defwndproc;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_KEYDOWN)
{
switch (wParam)
{
case VK_LEFT:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYDOWN, VK_NUMPAD4, lParam);
break;
case VK_RIGHT:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYDOWN, VK_NUMPAD6, lParam);
break;
case VK_UP:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYDOWN, VK_NUMPAD8, lParam);
break;
case VK_DOWN:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYDOWN, VK_NUMPAD2, lParam);
break;
}
}
if (uMsg == WM_KEYUP)
{
switch (wParam)
{
case VK_LEFT:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYUP, VK_NUMPAD4, lParam);
break;
case VK_RIGHT:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYUP, VK_NUMPAD6, lParam);
break;
case VK_UP:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYUP, VK_NUMPAD8, lParam);
break;
case VK_DOWN:
CallWindowProcA(WNDPROC(defwndproc), hwnd, WM_KEYUP, VK_NUMPAD2, lParam);
break;
}
}
return CallWindowProcA(WNDPROC(defwndproc), hwnd, uMsg, wParam, lParam);
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
defwndproc = SetWindowLongA(FindWindowA(0, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}