Почему мой вызов WinGetTitle возвращает пустую строку? - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю сценарий, который приостановит мою музыку, если она играет, когда я блокирую свою рабочую станцию.Я использую spotify, который должен быть простым, чтобы получить его состояние воспроизведения, проверяя заголовок окна.Когда ничего не воспроизводится, его заголовок просто «Spotify», но когда он воспроизводит мультимедиа, заголовок окна меняется на заголовок дорожки, воспроизводимой в данный момент.Я могу увидеть это с помощью Window Spy.

Я попытался найти окно спойтов и прочитать его заголовок, используя WinGetTitle, title, ahk_exe Spotify.exe, который должен записать заголовок в переменную title.Это не работает, title - пустая строка.Однако интригующе это работает, если окно spotify свернуто.

#L::
{
   WinGetTitle, title, ahk_exe Spotify.exe
   if(title != "Spotify")
   {
      Send {Media_Play_Pause}
   }
   DllCall("LockWorkStation")
   return
}

Это в Windows 10. WinGetClass, c, ahk_exe Spotify.exe правильно находит окно, но имя класса Chrome_WidgetWin0, потому что я предполагаю, что приложениенаписано в электрон.Другие электронные приложения, похоже, имеют то же имя класса, просто увеличивая число в конце.

Мне бы хотелось, чтобы был способ подключиться к тому, что использует Windows spotify, чтобы сообщить о своем текущем состоянии воспроизведения, так какWindows 10 распознает его как мультимедийное приложение и добавляет кнопки воспроизведения / паузы на вкладку на панели задач и в оверлее управления громкостью Windows.

Спасибо

1 Ответ

0 голосов
/ 07 февраля 2019

Возможно, существует более одного окна класса "Chrome_WidgetWin0", принадлежащего процессу "Spotify.exe".

Попробуйте это:

#IfWinExist ahk_exe Spotify.exe

    #l::
        WinGet, id, list, ahk_exe  Spotify.exe
        Loop, %id%
        {
            this_ID := id%A_Index%
            WinGetTitle, title, ahk_id %this_ID%
            If (title = "")
                continue
            If (title != "Spotify")
            {
                Send {Media_Play_Pause}
                    break
            }   
        }
        DllCall("LockWorkStation")
    return

#IfWinExist

РЕДАКТИРОВАТЬ: выяснить, является ли онодействительно работает, запустите этот тест:

#IfWinExist ahk_exe Spotify.exe

    #q:: ; Win+Q
        WinGet, id, list, ahk_exe  Spotify.exe
        Loop, %id%
        {
            this_ID := id%A_Index%
            WinGetTitle, title, ahk_id %this_ID%
            ; MsgBox, "%title%"
            If (title = "")
                continue
            MsgBox, "%title%"
            If (title != "Spotify")
            {
                Send {Media_Play_Pause}
                    break
            }   
        }
    return

#IfWinExist
...