UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WindowsApplication.cpp File Reference
#include "Windows/WindowsApplication.h"
#include "Null/NullApplication.h"
#include "Containers/StringConv.h"
#include "CoreGlobals.h"
#include "Internationalization/Text.h"
#include "Misc/ConfigCacheIni.h"
#include "Misc/CoreDelegates.h"
#include "Misc/App.h"
#include "Windows/WindowsWindow.h"
#include "Windows/WindowsCursor.h"
#include "Features/IModularFeatures.h"
#include "IInputDeviceModule.h"
#include "IInputDevice.h"
#include "IHapticDevice.h"
#include "HAL/ThreadHeartBeat.h"
#include "Templates/UniquePtr.h"
#include "Windows/WindowsPlatformApplicationMisc.h"
#include "Null/NullPlatformApplicationMisc.h"
#include "Stats/Stats.h"
#include "HAL/IConsoleManager.h"
#include "Tasks/Task.h"
#include "Tasks/Pipe.h"
#include "Containers/LockFreeList.h"
#include "HAL/RunnableThread.h"
#include "Windows/AllowWindowsPlatformTypes.h"
#include <ShlObj.h>
#include <objbase.h>
#include <SetupAPI.h>
#include <devguid.h>
#include <dwmapi.h>
#include <cfgmgr32.h>
#include <windowsx.h>
#include <VersionHelpers.h>
#include "winuser.h"
#include "Windows/HideWindowsPlatformTypes.h"

Classes

struct  UE::WindowsApplication::TouchpadSensitivity::tagTOUCHPAD_PARAMETERS_V0
 
class  UE::WindowsApplication::RawInputThread::FWindowsRawInputRunnable
 

Namespaces

namespace  UE
 
namespace  UE::WindowsApplication
 
namespace  UE::WindowsApplication::TouchpadSensitivity
 
namespace  UE::WindowsApplication::RawInputThread
 
namespace  UE::WindowsInput
 

Macros

#define ADD_WINDOWS_MESSAGE_STRING(WMCode)   Result.Add(WMCode, TEXT(#WMCode))
 
#define ADD_IMN_STRING(IMNCode)   Result.Add(IMNCode, TEXT(#IMNCode))
 
#define ADD_IMR_STRING(IMRCode)   Result.Add(IMRCode, TEXT(#IMRCode))
 
#define MOUSEEVENTF_FROMTOUCH   0xFF515700
 

Typedefs

typedef BOOL(* UE::WindowsApplication::TouchpadSensitivity::SetMaxTouchpadSensitivityProc) (_In_ BOOL enable)
 
typedef enum UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURES UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURES
 
typedef enum UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL
 
typedef struct UE::WindowsApplication::TouchpadSensitivity::tagTOUCHPAD_PARAMETERS_V0 UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_PARAMETERS_V0
 
typedef struct UE::WindowsApplication::TouchpadSensitivity::tagTOUCHPAD_PARAMETERS_V0UE::WindowsApplication::TouchpadSensitivity::PTOUCHPAD_PARAMETERS_V0
 

Enumerations

enum class  UE::WindowsApplication::TouchpadSensitivity::EForceMaxTouchpadSensitivityMode { UE::WindowsApplication::TouchpadSensitivity::NotCached , UE::WindowsApplication::TouchpadSensitivity::DoNothing , UE::WindowsApplication::TouchpadSensitivity::SetTouchpadParameters , UE::WindowsApplication::TouchpadSensitivity::SetMaxTouchpadSensitivity }
 
enum  UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURES { UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURE_NONE = 0x00000000 , UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURE_ENABLE_DISABLE = 0x00000001 , UE::WindowsApplication::TouchpadSensitivity::LEGACY_TOUCHPAD_FEATURE_REVERSE_SCROLL_DIRECTION = 0x00000004 }
 
enum  UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL {
  UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_MOST_SENSITIVE = 0x00000000 , UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_HIGH_SENSITIVITY = 0x00000001 , UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_MEDIUM_SENSITIVITY = 0x00000002 , UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_LOW_SENSITIVITY = 0x00000003 ,
  UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_LEAST_SENSITIVE = 0x00000004 , UE::WindowsApplication::TouchpadSensitivity::TOUCHPAD_SENSITIVITY_LEVEL_NOT_SET = 0x0000000F
}
 

Functions

THIRD_PARTY_INCLUDES_START THIRD_PARTY_INCLUDES_END DEFINE_LOG_CATEGORY (LogWindowsDesktop)
 
 DECLARE_CYCLE_STAT (TEXT("WindowsApplication Custom Message Handler"), STAT_CustomMessageHandler_ProcessMessage, STATGROUP_Quick)
 
 UE::WindowsApplication::TouchpadSensitivity::DECLARE_LOG_CATEGORY_EXTERN (LogWindowsTouchpad, Display, VeryVerbose)
 
 UE::WindowsApplication::TouchpadSensitivity::DEFINE_LOG_CATEGORY (LogWindowsTouchpad)
 
bool UE::WindowsApplication::TouchpadSensitivity::SetMaxTouchpadSensitivity (bool Enable)
 
bool UE::WindowsApplication::TouchpadSensitivity::TryCacheSetMaxTouchpadSensitivityProc ()
 
void UE::WindowsApplication::TouchpadSensitivity::CacheForceMaxTouchpadSensitivityMode ()
 
EForceMaxTouchpadSensitivityMode UE::WindowsApplication::TouchpadSensitivity::GetForceMaxTouchpadSensitivityMode ()
 
bool UE::WindowsApplication::TouchpadSensitivity::SupportsForceMaxTouchpadSensitivity ()
 
void UE::WindowsApplication::TouchpadSensitivity::GetRegistryStoreIdAndSection (FString &OutStoreId, FString &OutSectionName)
 
void UE::WindowsApplication::TouchpadSensitivity::WriteSavedSensitivityToRegistry (TOUCHPAD_SENSITIVITY_LEVEL SavedSensitivity)
 
void UE::WindowsApplication::TouchpadSensitivity::ReadSavedSensitivityFromRegistry (TOUCHPAD_SENSITIVITY_LEVEL &OutSavedSensitivity, bool &OutbSuccess)
 
void UE::WindowsApplication::TouchpadSensitivity::ClearSavedSensitivityFromRegistry ()
 
FWindowsApplication::EForceMaxTouchpadSensitivityRestorationValues UE::WindowsApplication::TouchpadSensitivity::GetForceMaxTouchpadSensitivityRestorationValue ()
 
void UE::WindowsApplication::TouchpadSensitivity::OnWMSettingChangeSetTouchpadParameters ()
 
void UE::WindowsApplication::TouchpadSensitivity::ApplyForceMaxTouchpadSensitivity ()
 
void UE::WindowsApplication::TouchpadSensitivity::RemoveForceMaxTouchpadSensitivity ()
 
void UE::WindowsApplication::TouchpadSensitivity::RemoveForceMaxTouchpadSensitivityOnErrorShutdown ()
 
void UE::WindowsApplication::TouchpadSensitivity::HandleStartupApp ()
 
void UE::WindowsApplication::TouchpadSensitivity::HandleActivateApp (bool bActivate)
 
void UE::WindowsApplication::TouchpadSensitivity::HandleDestroyApplication ()
 
void UE::WindowsApplication::TouchpadSensitivity::HandleShutDownAfterError ()
 
 UE::WindowsApplication::RawInputThread::DECLARE_LOG_CATEGORY_EXTERN (LogWindowsRawInputThread, Display, VeryVerbose)
 
 UE::WindowsApplication::RawInputThread::DEFINE_LOG_CATEGORY (LogWindowsRawInputThread)
 
bool GetSizeForDevID (const FString &TargetDevID, int32 &Width, int32 &Height, int32 &DPI)
 
LRESULT WindowsApplication_WndProc (HWND hwnd, uint32 msg, WPARAM wParam, LPARAM lParam)
 

Variables

FAutoConsoleVariableRef CVarPreventDuplicateMouseEventsForTouch (TEXT("Slate.PreventDuplicateMouseEventsForTouchForWindows7"), bPreventDuplicateMouseEventsForTouch,)
 
FAutoConsoleVariableRef CVarUsePointerMessagesForTouch (TEXT("WindowsApplication.UsePointerMessagesForTouch"), bUsePointerMessagesForTouch,)
 
FAutoConsoleVariableRef CVarUsePointerMessagesForPen (TEXT("WindowsApplication.UsePointerMessagesForPen"), bUsePointerMessagesForPen,)
 
FAutoConsoleVariableRef UE::WindowsApplication::TouchpadSensitivity::CVarForceMaxTouchpadSensitivity (TEXT("WindowsApplication.ForceMaxTouchpadSensitivity"), bForceMaxTouchpadSensitivity, TEXT("Force Touchpad sensitivity to maximum in game when the app is active (aka has focus)." " The sensitivity setting can reject touchpad touches while typing on the theory that they are accidental, but that is not a good assumption for games." " The setting defaults to 'Medium'. The 'Most sensitive' setting does not reject any touches, so that is what we want.." " On Windows10 22H2 we force the global system setting to 'Most Sensitive', but do not write that to the registry persistently." " We will set it back when the app loses focus and on exit, but it may not happen in the case of a crash leaving the setting altered until a reboot." " On Window11 24H2 (excepting very early installs of 24H2) a new api SetMaxTouchpadSensitivity exists and we use that." " SetMaxTouchpadSensitivity changes the setting only for this app, so we do not need to handle clean-up." " When the cvar is changed a CVarSinkHandler will attempt to apply or remove max sensitivity."))
 
FAutoConsoleVariableRef UE::WindowsApplication::TouchpadSensitivity::CVarDisableForceMaxTouchpadSensitivity_SetTouchpadParameters (TEXT("WindowsApplication.DisableForceMaxTouchpadSensitivity_SetTouchpadParameters"), bDisableForceMaxTouchpadSensitivity_SetTouchpadParameters,)
 
FAutoConsoleVariableRef UE::WindowsApplication::TouchpadSensitivity::CVarDisableForceMaxTouchpadSensitivity_SetMaxTouchpadSensitivity (TEXT("WindowsApplication.DisableForceMaxTouchpadSensitivity_SetMaxTouchpadSensitivity"), bDisableForceMaxTouchpadSensitivity_SetMaxTouchpadSensitivity,)
 
FAutoConsoleVariableRef UE::WindowsApplication::TouchpadSensitivity::CVarWriteSavedTouchpadSensitivityToRegistry (TEXT("WindowsApplication.WriteSavedTouchpadSensitivityToRegistry"), bWriteSavedTouchpadSensitivityToRegistry,)
 
FAutoConsoleVariableRef UE::WindowsApplication::TouchpadSensitivity::CVarRestoreTouchpadSensitivityFromRegistry (TEXT("WindowsApplication.RestoreTouchpadSensitivityFromRegistry"), bRestoreTouchpadSensitivityFromRegistry,)
 
const UINT UE::WindowsApplication::TouchpadSensitivity::SPI_GETTOUCHPADPARAMETERS = 0x00AE
 
const UINT UE::WindowsApplication::TouchpadSensitivity::SPI_SETTOUCHPADPARAMETERS = 0x00AF
 
FAutoConsoleVariableRef CVarEnableRawInputSimulationOverRDP (TEXT("Slate.EnableRawInputSimulationOverRDP"), EnableRawInputSimulationOverRDP,)
 
FAutoConsoleVariableRef CVarForceRawInputSimulation (TEXT("Slate.ForceRawInputSimulation"), ForceRawInputSimulation,)
 
FAutoConsoleVariableRef CVarEnableWindowMessageProfilerScopes (TEXT("WindowsApplication.EnableWindowMessageProfilerScopes"), bEnableWindowMessageProfilerScopes,)
 
FAutoConsoleVariableRef CVarEnableFirstTouchEvent (TEXT("WindowsApplication.EnableFirstTouchEvent"), bEnableFirstTouchEvent,)
 
FWindowsApplicationWindowsApplication = nullptr
 
constexpr uint32 UE::WindowsApplication::RawInputThread::WM_UE_RAWINPUT_QUIT = WM_APP
 
constexpr uint32 UE::WindowsApplication::RawInputThread::WM_UE_RAWINPUT_REGISTER = WM_APP + 1
 
constexpr uint32 UE::WindowsApplication::RawInputThread::WM_UE_RAWINPUT_UNREGISTER = WM_APP + 2
 
FAutoConsoleVariableRef UE::WindowsApplication::RawInputThread::CVarUseWorkerThreadForRawInput (TEXT("WindowsApplication.UseWorkerThreadForRawInput"), bUseWorkerThreadForRawInput, TEXT("Use a worker thread for raw input messages to remove processing from game thread." " Mice with high polling rates can take multiple milliseconds per frame even on fast CPUs." " When the cvar is changed a CVarSinkHandler will attempt to switch the thread used for handling inputs."))
 

Macro Definition Documentation

◆ ADD_IMN_STRING

#define ADD_IMN_STRING (   IMNCode)    Result.Add(IMNCode, TEXT(#IMNCode))

◆ ADD_IMR_STRING

#define ADD_IMR_STRING (   IMRCode)    Result.Add(IMRCode, TEXT(#IMRCode))

◆ ADD_WINDOWS_MESSAGE_STRING

#define ADD_WINDOWS_MESSAGE_STRING (   WMCode)    Result.Add(WMCode, TEXT(#WMCode))

◆ MOUSEEVENTF_FROMTOUCH

#define MOUSEEVENTF_FROMTOUCH   0xFF515700

Function Documentation

◆ DECLARE_CYCLE_STAT()

DECLARE_CYCLE_STAT ( TEXT("WindowsApplication Custom Message Handler" ,
STAT_CustomMessageHandler_ProcessMessage  ,
STATGROUP_Quick   
)

◆ DEFINE_LOG_CATEGORY()

◆ GetSizeForDevID()

bool GetSizeForDevID ( const FString &  TargetDevID,
int32 Width,
int32 Height,
int32 DPI 
)
inline

Locate registry record for the given display device ID and extract native size information

Parameters
TargetDevID- Name of taret device @praam OutWidth - Reference to output variable for monitor native width @praam OutHeight - Reference to output variable for monitor native height
Returns
TRUE if data was extracted successfully, FALSE otherwise

◆ WindowsApplication_WndProc()

LRESULT WindowsApplication_WndProc ( HWND  hwnd,
uint32  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Variable Documentation

◆ CVarEnableFirstTouchEvent

FAutoConsoleVariableRef CVarEnableFirstTouchEvent(TEXT("WindowsApplication.EnableFirstTouchEvent"), bEnableFirstTouchEvent,) ( TEXT("WindowsApplication.EnableFirstTouchEvent")  ,
bEnableFirstTouchEvent   
)

◆ CVarEnableRawInputSimulationOverRDP

FAutoConsoleVariableRef CVarEnableRawInputSimulationOverRDP(TEXT("Slate.EnableRawInputSimulationOverRDP"), EnableRawInputSimulationOverRDP,) ( TEXT("Slate.EnableRawInputSimulationOverRDP")  ,
EnableRawInputSimulationOverRDP   
)

◆ CVarEnableWindowMessageProfilerScopes

FAutoConsoleVariableRef CVarEnableWindowMessageProfilerScopes(TEXT("WindowsApplication.EnableWindowMessageProfilerScopes"), bEnableWindowMessageProfilerScopes,) ( TEXT("WindowsApplication.EnableWindowMessageProfilerScopes")  ,
bEnableWindowMessageProfilerScopes   
)

◆ CVarForceRawInputSimulation

FAutoConsoleVariableRef CVarForceRawInputSimulation(TEXT("Slate.ForceRawInputSimulation"), ForceRawInputSimulation,) ( TEXT("Slate.ForceRawInputSimulation")  ,
ForceRawInputSimulation   
)

◆ CVarPreventDuplicateMouseEventsForTouch

FAutoConsoleVariableRef CVarPreventDuplicateMouseEventsForTouch(TEXT("Slate.PreventDuplicateMouseEventsForTouchForWindows7"), bPreventDuplicateMouseEventsForTouch,) ( TEXT("Slate.PreventDuplicateMouseEventsForTouchForWindows7")  ,
bPreventDuplicateMouseEventsForTouch   
)

◆ CVarUsePointerMessagesForPen

FAutoConsoleVariableRef CVarUsePointerMessagesForPen(TEXT("WindowsApplication.UsePointerMessagesForPen"), bUsePointerMessagesForPen,) ( TEXT("WindowsApplication.UsePointerMessagesForPen")  ,
bUsePointerMessagesForPen   
)

◆ CVarUsePointerMessagesForTouch

FAutoConsoleVariableRef CVarUsePointerMessagesForTouch(TEXT("WindowsApplication.UsePointerMessagesForTouch"), bUsePointerMessagesForTouch,) ( TEXT("WindowsApplication.UsePointerMessagesForTouch")  ,
bUsePointerMessagesForTouch   
)

◆ WindowsApplication

FWindowsApplication* WindowsApplication = nullptr