发布时间:2019-09-10责任编辑:满帅 浏览:1296
在UE4中开发老板键功能,无法使用MFC提供的函数,只能使用WDK进行开发。
实现老板键功能,主要分两部分。
1、窗口的隐藏、显示
2、窗口隐藏后的显示问题
窗口的隐藏/显示代码
//显示窗口
UFUNCTION(BlueprintCallable, Category = "Achievement")
void Show();
//隐藏窗口
UFUNCTION(BlueprintCallable, Category = "Achievement")
void Hide();
void ADragonKillerGameModeBase::Show()
{
#if PLATFORM_WINDOWS
HWND hwnd;
hwnd = FindWindowW(NULL, _T("标题名"));
// printf("Found: %X ", hwnd);
// hwnd = FindWindowW(NULL, _T("DragonKiller (64-bit, PCD3D_SM5)"));
ShowWindow(hwnd, SW_SHOW);
#endif
}
void ADragonKillerGameModeBase::Hide()
{
#if PLATFORM_WINDOWS
HWND hwnd;
hwnd = FindWindowW(NULL, _T("标题名"));
// printf("Found: %X ", hwnd);
// hwnd = FindWindowW(NULL, _T("DragonKiller (64-bit, PCD3D_SM5)"));
ShowWindow(hwnd, SW_HIDE);
#endif
}
窗口隐藏后无法响应按键,需要进行注册表注册后才行
注册表注册代码:
if (RegisterHotKey(
NULL,
1071,
MOD_ALT,
'W')) //0x42 is 'b'
{
UE_LOG(LogTemp, Log, TEXT("Hotkey 'ALT+W' registered, using MOD_NOREPEAT flag "));
}
else
{
UE_LOG(LogTemp, Log, TEXT("Hotkey 'ALT+W' registered failed "));
}
注册后还需要响应快捷键
while (m_bRun)
{
#if PLATFORM_WINDOWS
MSG msg;
while (PeekMessage(&msg, 0, 0, 0, 0x0001) && m_bRun)
{
switch (msg.message)
{
case WM_HOTKEY:
if (msg.wParam == 1071)
{
//逻辑处理代码
}
}
FPlatformProcess::Sleep(0.1f);
}
#endif
响应快捷键代码应放入一个新建线程里
游戏部供稿