goldberg_emulator/overlay_experimental/Windows_Hook.h
Nemirtingas 5b0306dccc Moved window hooks to its own class
Every class has a job. Overlay is to show an overlay not to hook windows functions.
Hook_Manager's job is to manage hooks and should not contain a reference to the overlay. (It should not contains any reference to directX or OpenGL either but I'll see that later... Maybe)
This makes the overlay code much cleaner and "could" be used in Linux as well.
2019-08-18 16:22:07 +02:00

46 lines
1.1 KiB
C++

#ifndef __INCLUDED_WINDOWS_HOOK_H__
#define __INCLUDED_WINDOWS_HOOK_H__
#include "Base_Hook.h"
#ifndef NO_OVERLAY
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#include <Windows.h>
class Windows_Hook : public Base_Hook
{
public:
//static constexpr const char* DLL_NAME = "user32.dll";
private:
// Variables
bool initialized;
HWND _game_hwnd;
WNDPROC _game_wndproc;
// Functions
Windows_Hook();
virtual ~Windows_Hook();
// Hook to Windows window messages
decltype(GetRawInputBuffer)* GetRawInputBuffer;
decltype(GetRawInputData)* GetRawInputData;
static LRESULT CALLBACK HookWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static UINT WINAPI MyGetRawInputBuffer(PRAWINPUT pData, PUINT pcbSize, UINT cbSizeHeader);
static UINT WINAPI MyGetRawInputData(HRAWINPUT hRawInput, UINT uiCommand, LPVOID pData, PUINT pcbSize, UINT cbSizeHeader);
public:
bool start_hook();
void resetRenderState();
void prepareForOverlay(HWND);
HWND GetGameHwnd() const;
WNDPROC GetGameWndProc() const;
static Windows_Hook& Inst();
};
#endif//NO_OVERLAY
#endif//__INCLUDED_WINDOWS_HOOK_H__