如果没有打开对话框,如何绑定操作?

如果没有打开对话框,如何绑定操作?

在 VLC 媒体播放器中,如果没有打开对话框(例如首选项对话框),我想绑定kSpace(暂停/播放),如何实现?

答案1

VLC 很烦人,因为对话框没有不同的窗口类。这意味着最简单的方法可能是使用 WinTitle 的窗口标题部分#IfWinActive。您还可以根据窗口大小本身添加其他条件,但这更烦人。

从 AutoHotkey 托盘图标使用 Window Spy 可获得以下效果:

VLC media player
ahk_class Qt5QWindowIcon
ahk_exe vlc.exe

...或者...

Simple Preferences
ahk_class Qt5QWindowIcon
ahk_exe vlc.exe

因此,在这种情况下,您通常有两种选择,在某些情况下,一种会比另一种更容易,这取决于您要做什么:

  1. 在主窗口的标题上触发[松散地]
  2. 在可执行文件上触发并为您不想触发的对话框添加负面排除条件

以下是几个连续的例子:

; this won't work as soon as you play a song and the title changes
#IfWinActive, VLC media player
k::Send {Space}

下一步...这应该基本上可以工作,但有时您将使用与 VLC 不同的程序,其中窗口标题会完全改变,在这种情况下您可能需要仅使用 exe...

SetTitleMatchMode, 2 ; make title match generic
#IfWinActive, VLC media player ahk_exe vlc.exe
k::Send {Space}

接下来...这太开放了,但根本不依赖于窗口标题......

#IfWinActive, ahk_exe vlc.exe
k::Send {Space}

因此,您可以在上面显示的情况的基础上进行构建,并在属于给定 exe 的几乎任何窗口上触发,但排除某些对话框......

#If WinActive("ahk_exe vlc.exe") && !WinActive("Simple Preferences") && !WinActive("whatever... keep adding conditions as needed")
k::Send {Space}

请注意,对于最后一种使用多个条件的情况,我们改用#If而不是,如果你想编写一个热键,除了少数例外,#IfWinActive你也可以使用它#IfWinNotActive

更好/更简单的情况是对于没有相同窗口类的程序,在这种情况下对话框通常具有自己的窗口类,并且可以被 WinTitle 的类部分包含或排除,而只有标题和 exe 来帮助区分您想要包含或排除的内容。

相关内容