#pragma once

#include <Windows.h>

/* A */
typedef BOOL(WINAPI *ADDCLIPBOARDFORMATLISTENER)(_In_ HWND hwnd);

/* C */
typedef BOOL(WINAPI *CLOSECLIPBOARD)(void);

/* G */
typedef HANDLE(WINAPI *GETCLIPBOARDDATA)(_In_ UINT uFormat);
typedef HWND(WINAPI *GETCLIPBOARDOWNER)(void);
typedef HWND(WINAPI *GETFOREGROUNDWINDOW)(void);
typedef DWORD(WINAPI *GETWINDOWTHREADPROCESSID)(_In_      HWND    hWnd, _Out_opt_ LPDWORD lpdwProcessId);
typedef int(WINAPI *GETWINDOWTEXTA)(_In_  HWND   hWnd, _Out_ LPCSTR lpString, _In_  int    nMaxCount);

/* O */
typedef BOOL(WINAPI *OPENCLIPBOARD)(_In_opt_ HWND hWndNewOwner);


typedef struct _VTABLE_USER32
{
	ADDCLIPBOARDFORMATLISTENER fpAddClipboardFormatListener;
	
	CLOSECLIPBOARD fpCloseClipboard;
	
	GETCLIPBOARDDATA fpGetClipboardData;
	GETCLIPBOARDOWNER fpGetClipboardOwner;
	GETFOREGROUNDWINDOW fpGetForegroundWindow;
	GETWINDOWTHREADPROCESSID fpGetWindowThreadProcessId;
	GETWINDOWTEXTA fpGetWindowTextA;

	OPENCLIPBOARD fpOpenClipboard;

} VTABLE_USER32, *PVTABLE_USER32;
