Files
PowerToys/src/modules/keyboardmanager/KeyboardManagerEngineLibrary/KeyboardManager.h
2021-05-10 10:39:54 +02:00

60 lines
1.9 KiB
C++

#pragma once
#include <common/hooks/LowlevelKeyboardEvent.h>
#include <common/utils/EventWaiter.h>
#include <keyboardmanager/common/Input.h>
#include "State.h"
class KeyboardManager
{
public:
// Constructor
KeyboardManager();
~KeyboardManager()
{
if (editorIsRunningEvent)
{
CloseHandle(editorIsRunningEvent);
}
}
void StartLowlevelKeyboardHook();
void StopLowlevelKeyboardHook();
private:
// Contains the non localized module name
std::wstring moduleName = KeyboardManagerConstants::ModuleName;
// Low level hook handles
static HHOOK hookHandle;
// Required for Unhook in old versions of Windows
static HHOOK hookHandleCopy;
// Static pointer to the current KeyboardManager object required for accessing the HandleKeyboardHookEvent function in the hook procedure
// Only global or static variables can be accessed in a hook procedure CALLBACK
static KeyboardManager* keyboardManagerObjectPtr;
// Variable which stores all the state information to be shared between the UI and back-end
State state;
// Object of class which implements InputInterface. Required for calling library functions while enabling testing
KeyboardManagerInput::Input inputHandler;
// Auto reset event for waiting for settings changes. The event is signaled when settings are changed
EventWaiter settingsEventWaiter;
std::atomic_bool loadingSettings = false;
HANDLE editorIsRunningEvent = nullptr;
// Hook procedure definition
static LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);
// Load settings from the file.
void LoadSettings();
// Function called by the hook procedure to handle the events. This is the starting point function for remapping
intptr_t HandleKeyboardHookEvent(LowlevelKeyboardEvent* data) noexcept;
};