UE4添加老板键-新闻详情

UE4添加老板键


发布时间: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        

响应快捷键代码应放入一个新建线程里

游戏部供稿