加键盘触发键 F9 绕过鼠标键检测异常; 钩子安装状态/事件计数加入诊断
This commit is contained in:
parent
2c44ebb9e8
commit
cc517ca182
|
|
@ -87,8 +87,8 @@ void CFramework::AimAll()
|
||||||
if (g.g_AimDrawFov)
|
if (g.g_AimDrawFov)
|
||||||
ImGui::GetBackgroundDrawList()->AddCircle(ToImVec2(Center), g.g_AimFov, AimFovColor, 64);
|
ImGui::GetBackgroundDrawList()->AddCircle(ToImVec2(Center), g.g_AimFov, AimFovColor, 64);
|
||||||
|
|
||||||
// 発動キー (既存 Config: 右クリック / 左クリック)
|
// 発動キー (右クリック / 左クリック / 键盘触发键 F9)
|
||||||
if (!IsKeyDown(g.g_AimKey0) && !IsKeyDown(g.g_AimKey1))
|
if (!IsKeyDown(g.g_AimKey0) && !IsKeyDown(g.g_AimKey1) && !IsKeyDown(g.g_AimKey2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// カメラ位置 (ローカル頭部を優先、無ければ origin)
|
// カメラ位置 (ローカル頭部を優先、無ければ origin)
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,8 @@ void CFramework::RenderMenu()
|
||||||
ImGui::Text("扫描 : %d 实体 / %d 血量 / %d 跳过", m_diagTotal, m_diagHealth, m_diagSkipped);
|
ImGui::Text("扫描 : %d 实体 / %d 血量 / %d 跳过", m_diagTotal, m_diagHealth, m_diagSkipped);
|
||||||
ImGui::Text("目标 : %s (距 %0.fpx)", m_diagBestAddr ? "锁定" : "无", m_diagBestDist);
|
ImGui::Text("目标 : %s (距 %0.fpx)", m_diagBestAddr ? "锁定" : "无", m_diagBestDist);
|
||||||
{
|
{
|
||||||
ImGui::Text("按键 : %s", (IsKeyDown(g.g_AimKey0) || IsKeyDown(g.g_AimKey1)) ? "按住" : "---");
|
bool k2 = (GetAsyncKeyState(g.g_AimKey2) & 0x8000) != 0;
|
||||||
|
ImGui::Text("按键 : %s (右键/左键/F9)", (IsKeyDown(g.g_AimKey0) || IsKeyDown(g.g_AimKey1) || k2) ? "按住" : "---");
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
|
|
|
||||||
|
|
@ -31,16 +31,18 @@ void CFramework::RenderInfo()
|
||||||
StringEx(ImVec2(8.f, 24.f), ImColor(1.f, 1.f, 0.f, 1.f), ImGui::GetFontSize(), diag);
|
StringEx(ImVec2(8.f, 24.f), ImColor(1.f, 1.f, 0.f, 1.f), ImGui::GetFontSize(), diag);
|
||||||
|
|
||||||
// --- 自瞄实时状态 (关菜单也能看) ---
|
// --- 自瞄实时状态 (关菜单也能看) ---
|
||||||
// Aim = 自瞄开关; M = 方式(MEM内存/MOU鼠标); Key = 触发键是否按住
|
// Aim = 自瞄开关; M = 方式(MEM内存/MOU鼠标); Key = 触发键是否按住(含F9)
|
||||||
// Tgt = 是否锁定目标; d = 目标离屏幕中心距离px
|
// Tgt = 是否锁定目标; d = 目标离屏幕中心距离px; Hook/Btn = 鼠标钩子状态
|
||||||
char aim[192]{};
|
char aim[192]{};
|
||||||
snprintf(aim, sizeof(aim),
|
snprintf(aim, sizeof(aim),
|
||||||
"Aim:%s M:%s Key:%s Tgt:%s d=%.0fpx",
|
"Aim:%s M:%s Key:%s Tgt:%s d=%.0fpx Hook:%s Btn:%lu",
|
||||||
g.g_Aim ? "ON" : "OFF",
|
g.g_Aim ? "ON" : "OFF",
|
||||||
g.g_AimMethod == 0 ? "MEM" : "MOU",
|
g.g_AimMethod == 0 ? "MEM" : "MOU",
|
||||||
(IsKeyDown(g.g_AimKey0) || IsKeyDown(g.g_AimKey1)) ? "HOLD" : "--",
|
(IsKeyDown(g.g_AimKey0) || IsKeyDown(g.g_AimKey1) || IsKeyDown(g.g_AimKey2)) ? "HOLD" : "--",
|
||||||
m_diagBestAddr ? "LOCK" : "NONE",
|
m_diagBestAddr ? "LOCK" : "NONE",
|
||||||
m_diagBestDist);
|
m_diagBestDist,
|
||||||
|
IsMouseHookInstalled() ? "OK" : "FAIL",
|
||||||
|
GetMouseHookCount());
|
||||||
StringEx(ImVec2(8.f, 42.f), ImColor(1.f, 0.f, 0.f, 1.f), ImGui::GetFontSize(), aim);
|
StringEx(ImVec2(8.f, 42.f), ImColor(1.f, 0.f, 0.f, 1.f), ImGui::GetFontSize(), aim);
|
||||||
|
|
||||||
// Crosshair
|
// Crosshair
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ struct Globals
|
||||||
int g_MenuKey = VK_INSERT;
|
int g_MenuKey = VK_INSERT;
|
||||||
int g_AimKey0 = VK_RBUTTON;
|
int g_AimKey0 = VK_RBUTTON;
|
||||||
int g_AimKey1 = VK_LBUTTON;
|
int g_AimKey1 = VK_LBUTTON;
|
||||||
|
int g_AimKey2 = VK_F9; // 键盘触发键 (鼠标键检测异常时的替代, 按住触发)
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Globals g;
|
extern Globals g;
|
||||||
|
|
@ -4,6 +4,7 @@ namespace
|
||||||
{
|
{
|
||||||
volatile bool g_mouseL = false; // 左键按下状态 (低级钩子捕获)
|
volatile bool g_mouseL = false; // 左键按下状态 (低级钩子捕获)
|
||||||
volatile bool g_mouseR = false; // 右键按下状态
|
volatile bool g_mouseR = false; // 右键按下状态
|
||||||
|
volatile unsigned long g_mouseEvents = 0; // 钩子捕获事件计数 (诊断用)
|
||||||
HHOOK g_mouseHook = nullptr;
|
HHOOK g_mouseHook = nullptr;
|
||||||
|
|
||||||
// 低级鼠标钩子回调: 在安装线程的消息循环中触发 (OverlayLoop 的 PeekMessage)
|
// 低级鼠标钩子回调: 在安装线程的消息循环中触发 (OverlayLoop 的 PeekMessage)
|
||||||
|
|
@ -11,6 +12,7 @@ namespace
|
||||||
{
|
{
|
||||||
if (nCode >= 0)
|
if (nCode >= 0)
|
||||||
{
|
{
|
||||||
|
g_mouseEvents++;
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
case WM_LBUTTONDOWN: g_mouseL = true; break;
|
case WM_LBUTTONDOWN: g_mouseL = true; break;
|
||||||
|
|
@ -38,6 +40,16 @@ void RemoveInputHook()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsMouseHookInstalled()
|
||||||
|
{
|
||||||
|
return g_mouseHook != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long GetMouseHookCount()
|
||||||
|
{
|
||||||
|
return g_mouseEvents;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsKeyDown(int vk)
|
bool IsKeyDown(int vk)
|
||||||
{
|
{
|
||||||
// 鼠标键: 钩子状态优先, GetAsyncKeyState 兜底
|
// 鼠标键: 钩子状态优先, GetAsyncKeyState 兜底
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,10 @@
|
||||||
// 问题: GetAsyncKeyState 在管理员权限/整合包环境下检测不到鼠标按键(左/右键)
|
// 问题: GetAsyncKeyState 在管理员权限/整合包环境下检测不到鼠标按键(左/右键)
|
||||||
// 方案: WH_MOUSE_LL 低级钩子全局捕获鼠标按下/释放, IsKeyDown 优先读钩子状态
|
// 方案: WH_MOUSE_LL 低级钩子全局捕获鼠标按下/释放, IsKeyDown 优先读钩子状态
|
||||||
// 键盘键仍然走 GetAsyncKeyState (菜单 INSERT 切换已验证有效)
|
// 键盘键仍然走 GetAsyncKeyState (菜单 INSERT 切换已验证有效)
|
||||||
|
// 若钩子仍无效, 用键盘触发键 (g_AimKey2, 默认 F9) 绕开鼠标键检测
|
||||||
|
|
||||||
bool IsKeyDown(int vk);
|
bool IsKeyDown(int vk);
|
||||||
void InstallInputHook();
|
void InstallInputHook();
|
||||||
void RemoveInputHook();
|
void RemoveInputHook();
|
||||||
|
bool IsMouseHookInstalled(); // 钩子是否安装成功 (诊断用)
|
||||||
|
unsigned long GetMouseHookCount(); // 钩子捕获事件数 (诊断用)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue