脚本的由来:玩这个游戏的时候我发现玩电脑有一个痛点, 一局二十分钟Q键基本需要一直按着,而游戏内有没有按住改为切换的选项于是就和AI制作了这个脚本
按 Q
键切换语音激活状态(模拟按下/释放语音键{屏幕底部居中显示状态提示T_T
=开^_^
=关})
按 F2
键启用/禁用整个脚本(ON/OFF
=脚本开关)
使用系统音效(Speech On/Off.wav)提供操作反馈。
#NoEnv
SendMode Input
#InstallKeybdHook
#SingleInstance force
; ==============================================
; 配置部分 - 可根据需要修改这些参数
; ==============================================
; 设置语音激活键 (默认是 Q 键)
VoiceKey := "q"
; 设置脚本总开关的热键 (默认是 F2 键)
ToggleKey := "F2"
; ==============================================
; 全局变量定义
; ==============================================
; 脚本总开关状态 (true = 启用, false = 禁用)
ScriptEnabled := true
; 语音激活状态 (true = 激活中, false = 未激活)
VoiceActive := false
; 用于跟踪所有创建的状态提示框数量
global StatusGUICount := 0
; 显示初始状态提示
ShowStatusMessage("ON", 1500)
; ==============================================
; 主功能热键 - Q键切换语音激活状态
; ==============================================
$q::
{
global VoiceActive, ScriptEnabled
; 如果脚本被禁用,直接发送普通Q键
if (!ScriptEnabled) {
Send {q}
return
}
; 切换语音激活状态
VoiceActive := !VoiceActive
if (VoiceActive) {
; 激活语音 - 按下语音键
Send {Blind}{%VoiceKey% down}
ShowStatusMessage("T_T", 1500) ; 显示激活状态表情
SoundPlay, %A_WinDir%\Media\Speech On.wav ; 播放激活提示音
} else {
; 关闭语音 - 释放语音键
Send {Blind}{%VoiceKey% up}
ShowStatusMessage("^_^", 1500) ; 显示关闭状态表情
SoundPlay, %A_WinDir%\Media\Speech Off.wav; 播放关闭提示音
}
}
return
; ==============================================
; 脚本总开关热键 - F2键切换脚本启用/禁用状态
; ==============================================
F2::
{
global ScriptEnabled, VoiceActive
; 如果禁用脚本时语音处于激活状态,先释放语音键
if (ScriptEnabled && VoiceActive) {
Send {%VoiceKey% up}
VoiceActive := false
ShowStatusMessage("^_^", 500) ; 确保状态显示正确
}
; 切换脚本总开关状态
ScriptEnabled := !ScriptEnabled
if (ScriptEnabled) {
ShowStatusMessage("ON", 1500) ; 显示启用状态
SoundPlay, %A_WinDir%\Media\Speech On.wav ; 播放启用提示音
} else {
ShowStatusMessage("OFF", 1500) ; 显示禁用状态
SoundPlay, %A_WinDir%\Media\Speech Off.wav ; 播放禁用提示音
}
}
return
; ==============================================
; 状态提示显示函数
; 功能: 在屏幕底部居中显示状态提示信息
; 参数: message - 要显示的信息; duration - 显示时长(毫秒)
; ==============================================
ShowStatusMessage(message, duration) {
global StatusGUICount
; 先关闭所有现有提示框
CloseAllStatusMessages()
Sleep 10 ; 给系统一点时间处理销毁操作
; 递增计数器并创建唯一命名的GUI
StatusGUICount++
guiName := "StatusGUI" StatusGUICount
; 创建GUI窗口 - 配置为置顶、无标题栏、点击穿透
Gui, %guiName%:New, +AlwaysOnTop +ToolWindow -Caption +E0x20 +LastFound
Gui, %guiName%:Color, 333333 ; 深灰色背景(将被设为透明)
; 设置字体样式:白色、加粗、20号大小、Segoe UI字体
Gui, %guiName%:Font, s20 cWhite bold Quality=4, Segoe UI
; 添加文本并设置居中显示
Gui, %guiName%:Add, Text, Center w200, %message%
; 调整GUI大小以适应内容
Gui, %guiName%:Show, Hide ; 先隐藏显示以计算大小
Gui, %guiName%: +LastFound
WinGetPos,,, GuiWidth, GuiHeight ; 获取实际宽度和高度
; 计算位置(屏幕底部居中,距离底部50像素)
xPos := (A_ScreenWidth - GuiWidth) // 2
yPos := (A_ScreenHeight - GuiHeight - 50)
; 在计算好的位置显示GUI
Gui, %guiName%:Show, NoActivate x%xPos% y%yPos%
; 将背景色设置为透明(只显示文字)
WinSet, TransColor, 333333
; 设置定时关闭
SetTimer, CloseStatusMessage, % -duration
}
; ==============================================
; 关闭所有状态提示框的函数
; ==============================================
CloseAllStatusMessages() {
global StatusGUICount
Loop % StatusGUICount {
guiName := "StatusGUI" A_Index
Gui, %guiName%:Destroy
}
StatusGUICount := 0
}
; ==============================================
; 关闭提示框的定时器回调函数
; ==============================================
CloseStatusMessage:
CloseAllStatusMessages()
return
D-Class Comms.ahk
1145
复制