Jakieś poprawki w Spotify za pomocą skrótu klawiaturowego do „gwiazdkowania” utworów?


20

Jestem subskrybentem Spotify i obsesyjnym maniakiem produktywności.

Jedną z rzeczy, która mnie naprawdę denerwuje, jest to, że nie ma skrótu klawiaturowego do „gwiazdkowania” ścieżki (tj. Dodawania ścieżki do ulubionych). Lubię pozostawić włączone radio Spotify podczas pracy i co jakiś czas muszę tabulować i kliknąć prawym przyciskiem myszy utwór, a następnie wybrać „Gwiazdkę” za każdym razem, gdy słyszę piosenkę, którą naprawdę lubię.

Czy są jakieś poprawki / wtyczki Spotify, które pozwolą mi „gwiazdkować” utwory za pomocą skrótu klawiaturowego?


Czy używasz programu Windows Media Player?
Diogo,

Nie, tylko Spotify
Eddy,

Odpowiedzi:


3

Jasne, użyj AutoHotkey !

Po zainstalowaniu umieść to w pliku AutoHotkey.ahk:

#*::
WinWait, Spotify, 
IfWinNotActive, Spotify, , WinActivate, Spotify, 
WinWaitActive, Spotify, 
MouseClick, left,  79,  90
Sleep, 100
MouseClick, left,  256,  152
Sleep, 100
return

Dodaje to klawisz skrótu Win + Asterisk, który oznaczy odtwarzany utwór.

Możesz być także zainteresowany innymi skrótami Spotify do AutoHotkey.


1
Problem polega na tym, że spotify ma również tę samą lokalizację po kliknięciu, aby ODSTAWIĆ ślad. więc musisz być ostrożny, jeśli nie oznaczyłeś gwiazdką utworu metodą ahk
ms. mann

2

Wypróbowałem inny skrót Autohotkey i nie działał on dla mnie (po prostu przełączyłem się na spotify i kliknąłem dwa martwe punkty). Wymyśliłem następujące, które działają, o ile wybrano opcję „Duża teraz odtwarzana grafika”:

CoordMode, Mouse, Relative
;star currently playing
+^l::
SpotifyWinHeight = 1050 ;set to 1080 - 30 for small taskbar size, just in case WinGetPos doesn't work for some reason
WinGetActiveTitle, CurWindow
WinActivate Spotify
WinWaitActive Spotify
WinGetPos,  ,  ,  , SpotifyWinHeight, Spotify
;          X  Y  W  H, we don't care about anything but height
RightClickTarget := SpotifyWinHeight - 250
ContextMenuTarget := RightClickTarget + 110
MouseMove, 100, %RightClickTarget%
Click Right
Sleep, 50
MouseMove, 180, %ContextMenuTarget%
Sleep, 50
Click
WinActivate %CurWindow%
return

Wykonuje następujące czynności:

  • Przechowuje aktualnie aktywne okno
  • Aktywuje Spotify
  • Oblicza przesunięcia kliknięcia okładki albumu względem okna Spotify
  • Oznaczaj gwiazdką to, co aktualnie gra (za pomocą grafiki klikniętej prawym przyciskiem myszy, kliknij gwiazdkę lewym przyciskiem myszy)
  • Przywraca wcześniej aktywne okno

Nie jest idealny (prawdopodobnie nie będzie szczęśliwy, jeśli z jakiegoś powodu zauważysz, że wieszasz się głównie z ekranu po prawej stronie), ale w większości przypadków wykonuje to zadanie.


To jest świetne! Dzięki. Ulepszeniem byłoby przeczytanie ostatniego elementu menu kontekstowego, aby zobaczyć, czy on czyta Unstar, a jeśli tak, nie klikaj go. Jeśli dojdę do tego, wrócę i opublikuję.
GollyJer,

2

Oznaczanie gwiazdką nie jest już rzeczą.

Przejdź tutaj, aby uzyskać zaktualizowane pytania i odpowiedzi.


Stara odpowiedź poniżej tutaj ...

Oto kolejne rozwiązanie AutoHotkey . Istnieją liberalne komentarze. Ponadto dokumentacja i fora AutoHotkey są świetnymi miejscami do nauki w razie potrzeby.

Naciśnięcie Control + Shift + * spowoduje oznaczenie aktywnego utworu.
Kluczową cechą tego skryptu jest sprawdzenie, czy utwór jest już oznaczony gwiazdką, a jeśli tak, to pozostawia go w spokoju.

^+*::
spotify = ahk_class SpotifyMainWindow
IfWinExist, %spotify%
{
;Store active window and mouse position.
WinGetActiveTitle, activeWindow
MouseGetPos x, y, winID

;Activate Spotify.
WinActivate %spotify%
WinWaitActive %spotify%

;Right click near the song title in the "Now Playing" box.
WinGetPos,  ,  ,  , spotifyHeight, %spotify%
MouseClick, Right, 100, spotifyHeight - 70, 1, 0

;Get the contents of the context menu.
WinWait, ahk_class #32768
SendMessage, 0x1E1      ; MN_GETHMENU
allContextMenuInfo := ErrorLevel

;The "Star" command is the 5th menu item.
;If the song is Unstarred the text is Star, and vice versa. But sometimes some wierd characters are included.
;The only reliable way I found is to check if the first letter is S.
menuText_StarUnstar := GetContextMenuItemText(allContextMenuInfo, 5)
StringGetPos, positionOfS, menuText_StarUnstar, S

;If S is the first letter, star the song.
notStarred := (%positionOfS% = 0)
If notStarred {
    ;Arrow down to the Star menu item and press enter.
    Send {Down}{Down}{Down}{Down}{Down}{Enter}
} Else {
    ;Just close the context menu.
    Send {Escape}
}

;Restore original window and mouse position.
WinActivate ahk_id %winID%
MouseMove %x%, %y%
}

Return

;Conext menu helper function.
GetContextMenuItemText(hMenu, nPos)
{
length := DllCall("GetMenuString"
        , "UInt", hMenu
        , "UInt", nPos
        , "UInt", 0 ; NULL
        , "Int", 0  ; Get length
        , "UInt", 0x0400)   ; MF_BYPOSITION
    VarSetCapacity(lpString, length + 1)
    length := DllCall("GetMenuString"
        , "UInt", hMenu
        , "UInt", nPos
        , "Str", lpString
        , "Int", length + 1
        , "UInt", 0x0400)
return lpString
}

To już nie działa. Zobacz moje rozwiązanie.
tig

0

Nie mam przedstawiciela, który umieściłby to w komentarzu do odpowiedzi GollyJera, ale zauważyłem, że podczas próby użycia tego skryptu wystąpił problem z naciśnięciami klawiszy {down}, które w jakiś sposób spowodowałyby przesunięcie podświetlonej piosenki na liście odtwarzania w dół , zamiast poruszać się w dół po menu. Zmodyfikowałem go tak, aby klikać myszą pozycję menu „Gwiazda” zamiast używać klawiszy, wydaje się, że działa całkiem dobrze. Zredagowałem go również, aby zminimalizować Spotify, zanim wróci do okna, którego używasz, jeśli na początku został zminimalizowany.

^+*::
spotify = ahk_class SpotifyMainWindow
IfWinExist, %spotify%
{
WinGet, MMX, MinMax, %spotify%
;Store active window and mouse position.
WinGetActiveTitle, activeWindow
MouseGetPos x, y, winID

;Activate Spotify.
WinActivate %spotify%
WinWaitActive %spotify%

;Right click near the song title in the "Now Playing" box.
WinGetPos,  ,  ,  , spotifyHeight, %spotify%
MouseClick, Right, 100, spotifyHeight - 70, 1, 0

;Get the contents of the context menu.
WinWait, ahk_class #32768
SendMessage, 0x1E1      ; MN_GETHMENU
allContextMenuInfo := ErrorLevel

;The "Star" command is the 5th menu item.
;If the song is Unstarred the text is Star, and vice versa. But sometimes some wierd characters are included.
;The only reliable way I found is to check if the first letter is S.
menuText_StarUnstar := GetContextMenuItemText(allContextMenuInfo, 5)
StringGetPos, positionOfS, menuText_StarUnstar, S

;If S is the first letter, star the song.
notStarred := (%positionOfS% = 0)
If notStarred {
    ;Arrow down to the Star menu item and press enter.
    MouseClick, Left, 20, -120, 1, 0,, R
} Else {
    ;Just close the context menu.
    Send {Escape}
}

;Restore original window and mouse position.
IfEqual MMX, -1, WinMinimize, %spotify%
WinActivate ahk_id %winID%
MouseMove %x%, %y%
}

Return

;Context menu helper function.
GetContextMenuItemText(hMenu, nPos)
{
length := DllCall("GetMenuString"
        , "UInt", hMenu
        , "UInt", nPos
        , "UInt", 0 ; NULL
        , "Int", 0  ; Get length
        , "UInt", 0x0400)   ; MF_BYPOSITION
    VarSetCapacity(lpString, length + 1)
    length := DllCall("GetMenuString"
        , "UInt", hMenu
        , "UInt", nPos
        , "Str", lpString
        , "Int", length + 1
        , "UInt", 0x0400)
return lpString
}


0

Rozwiązania, które polegają na tym, że polecenie „Gwiazdka” już nie działa ... nie ma już polecenia Gwiazda, ale „Oznaczone gwiazdką” to elementy folderu, do których można dodać elementy. Ten skrypt to robi.

; Spotify "Star Song"
^+*::
spotify = ahk_class SpotifyMainWindow
IfWinExist, %spotify%
{
;Store active window and mouse position.
WinGetActiveTitle, activeWindow
MouseGetPos x, y, winID

;Activate Spotify.
WinActivate %spotify%
WinWaitActive %spotify%

;Right click near the song title in the "Now Playing" box.
WinGetPos,  ,  ,  , spotifyHeight, %spotify%
MouseClick, Right, 100, spotifyHeight - 70, 1, 0

;Open Add To... sub-menu
Send {A}

;The "Starred" command is the 2nd menu item. If the song is Starred it will be disabled.
Send {Down}{Enter}

;Restore original window and mouse position.
WinActivate ahk_id %winID%
MouseMove %x%, %y%
}

Return

0

Spotify nie ma już „gwiazdy” i wydaje mi się, że nie mogę już odzyskać zawartości menu kontekstowego, więc ta metoda sprawdza kolor piksela w menu kontekstowym i używa klawiszy strzałek do wyboru. Działa, jeśli jest zmaksymalizowany, zminimalizowany i jeśli okładka albumu jest duża lub mała.

^+*::
{
    spotify = ahk_class SpotifyMainWindow
    IfWinExist, %spotify% 
    {
        ;Store active window and mouse position.
        WinGet, MMX, MinMax, %spotify%
        WinGetActiveTitle, activeWindow
        MouseGetPos x, y, winID

        ;Activate Spotify.
        WinActivate %spotify%
        WinWaitActive %spotify%

        ;Get maximised status
        WinGet, isMaximised, MinMax

        ;Clear any context menus
        Send {Escape down}{Escape up}

        ;Right click near the song title in the "Now Playing" box.
        WinGetPos,  ,  ,  , spotifyHeight, %spotify%
        MouseClick, Right, 44, spotifyHeight - (isMaximised = 1 ? 75 : 66), 1, 0
        sleep 200
        MouseMove 10,0, ,R
        sleep 200

        ; Determine if the song is already added to your library or not
        ; Look at left edge of the 'S' in Save to Your Library
        ; or the 'R' in Remove from Your Library
        ; 0x282828 is the background color of the menu
        ; if the background color is not present then the song is not in your library
        PixelGetColor, pixelColor, 91, spotifyHeight - (isMaximised = 1 ? 129 : 119)
        if (pixelColor = 0x282828) {
            ;Move up to 'Save to Your Library' and hit enter
            loop, 1 {
                Send {Up down}
                sleep 50
                Send {Up up}
                sleep 50
            }
            Send {Enter down}
            sleep 50
            Send {Enter up}
            sleep 50
        } else {
            ; Already added, so close context menu
            Send {Escape down}
            sleep 50
            Send {Escape up}
            Sleep 50
        }

        ;Restore original window and mouse position.
        IfEqual MMX, -1, WinMinimize, %spotify%
        WinActivate ahk_id %winID%
        MouseMove %x%, %y%

    }
    Return
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.