Skip to content

Commit d7cf8ce

Browse files
committed
彻底修复版本逻辑
1 parent b562dc9 commit d7cf8ce

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/Snap.Hutao.Remastered.Native/HutaoNative.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,25 @@ HRESULT __stdcall HutaoNative::IsCurrentWindowsVersionSupported(BOOL* isSupporte
161161
AssertNonNullAndReturn(isSupported);
162162

163163
HutaoPrivateWindowsVersion winver;
164-
GetWindowsVersion(&winver);
164+
GetWindowsVersion(&winver);
165165

166-
if (winver.major > 10 || winver.minor > 0 || winver.build > 19045 || winver.revision >= 5371)
166+
const DWORD targetMajor = 10;
167+
const DWORD targetMinor = 0;
168+
const DWORD targetBuild = 19045;
169+
const DWORD targetRevision = 5371;
170+
171+
if (winver.major > targetMajor ||
172+
(winver.major == targetMajor && winver.minor > targetMinor) ||
173+
(winver.major == targetMajor && winver.minor == targetMinor && winver.build > targetBuild) ||
174+
(winver.major == targetMajor && winver.minor == targetMinor && winver.build == targetBuild && winver.revision >= targetRevision))
175+
{
176+
*isSupported = TRUE;
177+
}
178+
else
167179
{
168-
*isSupported = TRUE;
169-
return S_OK;
180+
*isSupported = FALSE;
170181
}
171182

172-
*isSupported = FALSE;
173183
return S_OK;
174184
}
175185

src/Snap.Hutao.Remastered.Native/HutaoNativeInputLowLevelKeyboardSource.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,25 @@
11
#include "pch.h"
22
#include "HutaoNativeInputLowLevelKeyboardSource.h"
33

4-
// 全局变量来存储钩子句柄和回调函数
54
static HHOOK g_keyboardHook = nullptr;
65
static void* g_callback = nullptr;
76

8-
// 键盘钩子过程函数
97
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
108
{
119
if (nCode >= 0 && g_callback != nullptr)
1210
{
13-
// 调用回调函数
14-
// 回调函数签名:BOOL (*callback)(uint, KBDLLHOOKSTRUCT*)
1511
typedef BOOL (CALLBACK* KeyboardCallback)(uint, KBDLLHOOKSTRUCT*);
1612
KeyboardCallback callback = reinterpret_cast<KeyboardCallback>(g_callback);
1713

1814
KBDLLHOOKSTRUCT* pKeyboardStruct = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam);
1915
uint message = static_cast<uint>(wParam);
2016

21-
// 调用回调,如果返回TRUE表示已处理,停止传递
2217
if (callback && callback(message, pKeyboardStruct))
2318
{
24-
return 1; // 阻止消息传递
19+
return 1;
2520
}
2621
}
2722

28-
// 继续传递消息
2923
return CallNextHookEx(g_keyboardHook, nCode, wParam, lParam);
3024
}
3125

@@ -36,17 +30,14 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Attach(intptr_t callba
3630
return E_INVALIDARG;
3731
}
3832

39-
// 如果已经安装了钩子,先移除
4033
if (g_keyboardHook != nullptr)
4134
{
4235
UnhookWindowsHookEx(g_keyboardHook);
4336
g_keyboardHook = nullptr;
4437
}
4538

46-
// 保存回调函数
4739
g_callback = reinterpret_cast<void*>(callback);
4840

49-
// 安装低级键盘钩子
5041
g_keyboardHook = SetWindowsHookExW(
5142
WH_KEYBOARD_LL,
5243
LowLevelKeyboardProc,
@@ -66,7 +57,6 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Attach(intptr_t callba
6657

6758
HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Detach(intptr_t callback) noexcept
6859
{
69-
// 验证回调函数是否匹配
7060
if (reinterpret_cast<void*>(callback) != g_callback)
7161
{
7262
return E_INVALIDARG;
@@ -80,6 +70,5 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Detach(intptr_t callba
8070
return S_OK;
8171
}
8272

83-
// 如果没有钩子,返回成功(已经处于分离状态)
8473
return S_OK;
8574
}

0 commit comments

Comments
 (0)