Windows

當焦點程序禁用它們時如何使用熱鍵?

  • March 8, 2022

我是高級使用者、遊戲開發學生和抽搐流媒體,所以多任務處理對我來說很重要。話雖如此,像 OBS 和 Voice Warrior 這樣的程序需要熱鍵才能有效使用。但是,當某些程序(主要是遊戲)在 Windows 中“集中”時,除了一些例外情況,如窺視和無邊界遊戲外,不可能在該程序之外使用它們。我知道可以通過 regedit 完全禁用焦點,但據我了解,這會極大地增加 CPU 使用率,而我沒有太多餘力。我也聽說 autohotkey 可以解決這個問題,但我還沒有找到合適的腳本來做這件事,我也不精通軟體的語言來編寫腳本來這樣做,是否有人手頭上有可編輯的腳本或其他一些中和此熱鍵禁用的方法?

我發現了兩種使用 AutoIt 而不是 AutoHotkey 的可行方法。

  1. 通過使用“ControlSend”命令,我可以將任何輸入發送到任何正在執行的程序,而不管焦點狀態甚至最小/最大狀態如何(但由於某種原因,當在 AutoHotkey 中使用相同的命令時,這不適用於許多程序,因此我必須使用 AutoIt)。然後,我使用 AutoIt 的內置功能將 .aue 文件轉換為 exe,並將其綁定到 Apex 鍵盤上的宏鍵(我想有一些線上軟體可以重新綁定任何鍵或添加快捷鍵,如果您缺少這些),瞧!我現在可以通過按鍵盤上的 M1 將腳本作為 exe 啟動,通過 ControlSend Windows API 向 OBS 和許多其他熱鍵相關程序發送擊鍵或按鍵,無論它是最小化、最大化、聚焦還是不聚焦,繞過視窗限制。但是,它不適用於較舊的程序(至少那是

這是一個看起來像的例子:

   Opt("WinTitleMatchMode", 2)
ControlSend ( "OBS" , "" , "" , "{F8}")
  1. 要獲得其他軟體,例如 VoiceWarrior,我有一個不完整且不優雅的解決方法。簡而言之:在我說出命令時將其聚焦五秒鐘,然後將其自動返回到後台並使用 Klexen 在 AutoItScript 論壇上製作的“WinPrevious”功能重新聚焦我之前聚焦的程序。

這是一個看起來像的例子:

Opt("WinTitleMatchMode", 2)
Func _WinPrevious($z = 1)
   If $z < 1 Then Return SetError(1, 0, 0) ; Bad parameter
   Local $avList = WinList()
   For $n = 1 to $avList[0][0]
       ; Test for non-blank title, and is visible
       If $avList[$n][0] <> "" And BitAND(WinGetState($avList[$n][1]), 2) Then
           If $z Then 
               $z -= 1
           Else
               WinActivate($avList[$n][1])
               Return 1
           EndIf
       EndIf
   Next
   Return SetError(2, 0, 0) ; z-depth exceeded
EndFunc
WinActivate ( "VoiceWarrior" )
Sleep (5000)
_WinPrevious()

儘管我必須確保在這五秒鐘內按下熱鍵來發出命令。同樣,我將其轉換為 exe 並將其添加到宏中。

希望這可以幫助某人。我知道很多人都在尋找這樣的解決方案。

編輯:如果您有宏,您可以將軟體設置為全域自動執行熱鍵並將其分配給宏,然後只需將熱鍵的按住添加到宏序列中,這樣現在您就可以自動化整個系統了。

引用自:https://gaming.stackexchange.com/questions/396091