গলিজেয়ারের উত্তরের মন্তব্যে এই মন্তব্য করার মতো সংবাদদাতা আমার কাছে নেই, তবে আমি সেই স্ক্রিপ্টটি ব্যবহার করার চেষ্টা করার সময় লক্ষ্য করেছি যে "ডাউন" কীস্ট্রোকগুলির সাথে একটি সমস্যা রয়েছে যা এটি প্লেলিস্টে হাইলাইটেড গানটিকে নিচে নামিয়ে আনবে would পরিবর্তে মেনুতে নামার পরিবর্তে। আমি কীগুলি ব্যবহার না করে "স্টার" মেনু এন্ট্রিতে মাউস ক্লিক করতে এটি পরিবর্তন করেছি, এটি বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে। আপনি যে উইন্ডোটি ব্যবহার শুরু করেছিলেন তা যদি এটির সাথে সংক্ষিপ্তকরণ শুরু করা হয় তবে এটির পিছনে ফিরে আসার আগে আমি স্পটিফাইটি হ্রাস করার জন্য এটি সম্পাদনা করেছি।
^+*::
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
}