#include "LOGIC/Lgc_Func_Button.h" #include "LOGIC/Lgc_Core.h" #include #include #include #include namespace { QString Lgc_Func_Button_Func_GetUsageShortText(quint16 Usage) { switch (Usage) { case 0x0056: return QStringLiteral("-"); case 0x0057: return QStringLiteral("+"); case 0x0059: return QStringLiteral("1"); case 0x005A: return QStringLiteral("2"); case 0x005B: return QStringLiteral("3"); case 0x005C: return QStringLiteral("4"); case 0x005D: return QStringLiteral("5"); case 0x005E: return QStringLiteral("6"); case 0x005F: return QStringLiteral("7"); case 0x0060: return QStringLiteral("8"); case 0x0061: return QStringLiteral("9"); case 0x0062: return QStringLiteral("0"); default: return Mid_Func_GetKeyboardUsageText(Usage); } } WORD Lgc_Func_Button_Func_GetWindowsVirtualKey(quint16 Usage) { switch (Usage) { case 0x0056: return VK_SUBTRACT; case 0x0057: return VK_ADD; case 0x0059: return VK_NUMPAD1; case 0x005A: return VK_NUMPAD2; case 0x005B: return VK_NUMPAD3; case 0x005C: return VK_NUMPAD4; case 0x005D: return VK_NUMPAD5; case 0x005E: return VK_NUMPAD6; case 0x005F: return VK_NUMPAD7; case 0x0060: return VK_NUMPAD8; case 0x0061: return VK_NUMPAD9; case 0x0062: return VK_NUMPAD0; default: return 0; } } bool Lgc_Func_Button_Func_SendUnicodeText(const QString& Text) { if (Text.isEmpty()) { return false; } QVector InputList; InputList.reserve(Text.size() * 2); for (QChar Character : Text) { INPUT InputDown = {}; InputDown.type = INPUT_KEYBOARD; InputDown.ki.wScan = Character.unicode(); InputDown.ki.dwFlags = KEYEVENTF_UNICODE; InputList.append(InputDown); INPUT InputUp = InputDown; InputUp.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP; InputList.append(InputUp); } return SendInput(static_cast(InputList.size()), InputList.data(), sizeof(INPUT)) == static_cast(InputList.size()); } void Lgc_Func_Button_Func_RunMacroText(Lgc_Core_Struct_State* p_State, QString* p_TextStatus) { const QString Text = p_State->FunctionButtonConfig.MacroText.trimmed(); if (Text.isEmpty()) { *p_TextStatus = QStringLiteral("功能键 0 未配置输出文本。"); return; } *p_TextStatus = Lgc_Func_Button_Func_SendUnicodeText(Text) ? QStringLiteral("功能键 0 已输出文本:%1").arg(Text) : QStringLiteral("功能键 0 输出文本失败。"); } void Lgc_Func_Button_Func_RunSwapKey(Lgc_Core_Struct_State* p_State, QString* p_TextStatus) { const quint16 UsageLeft = p_State->FunctionButtonConfig.SwapUsageLeft; const quint16 UsageRight = p_State->FunctionButtonConfig.SwapUsageRight; if ((UsageLeft == 0) || (UsageRight == 0) || (UsageLeft == UsageRight)) { *p_TextStatus = QStringLiteral("功能键 1 的交换配置无效。"); return; } if (!Lgc_Core_Func_SetSwapMode(p_State, UsageLeft, UsageRight, !p_State->IsSwapModeOn)) { *p_TextStatus = QStringLiteral("功能键 1 切换按键交换失败。"); return; } *p_TextStatus = p_State->IsSwapModeOn ? QStringLiteral("功能键 1 已开启按键交换:%1 <-> %2") .arg(Lgc_Func_Button_Func_GetUsageShortText(UsageLeft)) .arg(Lgc_Func_Button_Func_GetUsageShortText(UsageRight)) : QStringLiteral("功能键 1 已关闭按键交换:%1 <-> %2") .arg(Lgc_Func_Button_Func_GetUsageShortText(UsageLeft)) .arg(Lgc_Func_Button_Func_GetUsageShortText(UsageRight)); } void Lgc_Func_Button_Func_RunOpenWebsite(Lgc_Core_Struct_State* p_State, QString* p_TextStatus) { const QString UrlText = p_State->FunctionButtonConfig.WebsiteUrl.trimmed(); const QUrl Url = QUrl::fromUserInput(UrlText); if (UrlText.isEmpty() || !Url.isValid() || Url.isEmpty()) { *p_TextStatus = QStringLiteral("功能键 2 的网址配置无效。"); return; } *p_TextStatus = QDesktopServices::openUrl(Url) ? QStringLiteral("功能键 2 已打开网址:%1").arg(Url.toString()) : QStringLiteral("功能键 2 打开网址失败。"); } } // namespace bool Lgc_Func_Button_Func_SendUsageToWindows(quint16 Usage, bool IsPressed) { const WORD VirtualKey = Lgc_Func_Button_Func_GetWindowsVirtualKey(Usage); if (VirtualKey == 0) { return false; } INPUT InputData = {}; InputData.type = INPUT_KEYBOARD; InputData.ki.wVk = VirtualKey; if (!IsPressed) { InputData.ki.dwFlags = KEYEVENTF_KEYUP; } return SendInput(1, &InputData, sizeof(INPUT)) == 1; } bool Lgc_Func_Button_Func_HandlePressedUsage( Lgc_Core_Struct_State* p_State, quint16 Usage, QString* p_TextStatus) { p_TextStatus->clear(); switch (Usage) { case 0x0062: Lgc_Func_Button_Func_RunMacroText(p_State, p_TextStatus); return true; case 0x0059: Lgc_Func_Button_Func_RunSwapKey(p_State, p_TextStatus); return true; case 0x005A: Lgc_Func_Button_Func_RunOpenWebsite(p_State, p_TextStatus); return true; case 0x0056: case 0x0057: case 0x005B: case 0x005C: case 0x005D: case 0x005E: case 0x005F: case 0x0060: case 0x0061: *p_TextStatus = QStringLiteral("功能键 %1 还没有绑定具体功能。") .arg(Lgc_Func_Button_Func_GetUsageShortText(Usage)); return true; default: return false; } }