首页 > 解决方案 > AHK 循环 CPU 使用率过高

问题描述

我正在运行一个自动大写句子的第一个字符的 Autohotkey 脚本(例如在 Texstudio 或 Chrome 中)。脚本(特别是我猜的循环)有时会占用 30-40% 的 CPU。因此,我想知道是否有可能优化代码(可能不使用循环?)以减少 CPU 使用率。提前致谢。这是代码:

#SingleInstance force
#NoEnv
SetBatchLines -1

Loop {
if WinActive("ahk_exe texstudio.exe") or WinActive("ahk_exe chrome.exe")
Input key, I L1 M V,{Esc}{BS}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Tab}
StringUpper key, key

If InStr(ErrorLevel,"EndKey")

state =

Else If InStr(".!?",key)

state = 1

Else If InStr("`t `n",key) {

If state = 1

state = 2

} Else {

If state = 2

Send {BS}{%key%}

state =

}

}

Return 

标签: loopscpuautohotkey

解决方案


由于周期, SetTimer消耗的 CPU 少得多。

#SingleInstance force
#NoEnv
#Persistent
; SetBatchLines -1

; create a group of the programs in which you want auto-capitalize
GroupAdd, auto_capitalize_group, ahk_exe texstudio.exe
GroupAdd, auto_capitalize_group, ahk_exe chrome.exe

SetTimer, auto_capitalize, 300 ; check every 300 ms
Return 

auto_capitalize: 
if !WinActive("ahk_group auto_capitalize_group")
    return  ; do nothing
; otherwise:
Input key, I L1 M V,{Esc}{BS}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Tab}
StringUpper key, key
If InStr(ErrorLevel,"EndKey")
    state =
Else If InStr(".!?",key)
    state = 1
Else If InStr("`t `n",key) 
{
    If state = 1
        state = 2
} 
Else 
{
    If state = 2
        Send {BS}{%key%}
    state =
}
Return

推荐阅读