मेरे पास यह टिप्पणी करने के लिए GollyJer के उत्तर पर टिप्पणी करने के लिए नहीं है, लेकिन मैंने उस स्क्रिप्ट का उपयोग करने की कोशिश करते समय ध्यान दिया कि {down} कीस्ट्रोक्स के साथ एक समस्या थी जो किसी भी तरह से इसे हाइलाइट किए गए गीत को प्लेलिस्ट में ले जाएगी। , बजाय मेनू पर नीचे जाने के। मैंने इसे कुंजी का उपयोग करने के बजाय "स्टार" मेनू प्रविष्टि पर माउस क्लिक करने के लिए संशोधित किया, यह काफी अच्छी तरह से काम करता है। इससे पहले कि यह शुरू करने के लिए कम से कम किया गया था, तो मैं आपके द्वारा उपयोग की जा रही खिड़की पर वापस आने से पहले Spotify को छोटा करने के लिए इसे संपादित करता हूं।
^+*::
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
}