Code: Select all
app := "spotify.exe"
CreateClass("Windows.Media.Control.GlobalSystemMediaTransportControlsSessionManager", IGlobalSystemMediaTransportControlsSessionManagerStatics := "{2050c4ee-11a0-57de-aed7-c97c70338245}", GlobalSystemMediaTransportControlsSessionManagerStatics)
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSessionManagerStatics+0)+6*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSessionManagerStatics, "ptr*", GlobalSystemMediaTransportControlsSessionManager) ; GlobalSystemMediaTransportControlsSessionManager.RequestAsync
WaitForAsync(GlobalSystemMediaTransportControlsSessionManager)
return
f11::
title := ""
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSessionManager+0)+7*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSessionManager, "ptr*", GlobalSystemMediaTransportControlsSessionList) ; GlobalSystemMediaTransportControlsSessionManager.GetSessions
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSessionList+0)+7*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSessionList, "int*", count) ; count
loop % count
{
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSessionList+0)+6*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSessionList, "int", A_Index-1, "ptr*", GlobalSystemMediaTransportControlsSession)
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSession+0)+6*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSession, "ptr*", SourceAppUserModelId) ; GlobalSystemMediaTransportControlsSession.get_SourceAppUserModelId
buffer := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", SourceAppUserModelId, "uint*", length, "ptr")
if (StrGet(buffer, "UTF-16") = app)
{
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSession+0)+7*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSession, "ptr*", GlobalSystemMediaTransportControlsSessionMediaProperties) ; GlobalSystemMediaTransportControlsSession.TryGetMediaPropertiesAsync
WaitForAsync(GlobalSystemMediaTransportControlsSessionMediaProperties)
DllCall(NumGet(NumGet(GlobalSystemMediaTransportControlsSessionMediaProperties+0)+6*A_PtrSize), "ptr", GlobalSystemMediaTransportControlsSessionMediaProperties, "ptr*", hTitle) ; GlobalSystemMediaTransportControlsSessionMediaProperties.get_Title
buffer := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", hTitle, "uint*", length, "ptr")
title := StrGet(buffer, "UTF-16")
ObjReleaseClose(GlobalSystemMediaTransportControlsSessionMediaProperties)
ObjReleaseClose(GlobalSystemMediaTransportControlsSession)
break
}
ObjReleaseClose(GlobalSystemMediaTransportControlsSession)
}
ObjReleaseClose(GlobalSystemMediaTransportControlsSessionList)
msgbox % title
return
CreateClass(string, interface := "", ByRef Class := "")
{
CreateHString(string, hString)
if (interface = "")
result := DllCall("Combase.dll\RoActivateInstance", "ptr", hString, "ptr*", Class, "uint")
else
{
VarSetCapacity(GUID, 16)
DllCall("ole32\CLSIDFromString", "wstr", interface, "ptr", &GUID)
result := DllCall("Combase.dll\RoGetActivationFactory", "ptr", hString, "ptr", &GUID, "ptr*", Class, "uint")
}
if (result != 0)
{
if (result = 0x80004002)
msgbox No such interface supported
else if (result = 0x80040154)
msgbox Class not registered
else
msgbox error: %result%
ExitApp
}
DeleteHString(hString)
}
CreateHString(string, ByRef hString)
{
DllCall("Combase.dll\WindowsCreateString", "wstr", string, "uint", StrLen(string), "ptr*", hString)
}
DeleteHString(hString)
{
DllCall("Combase.dll\WindowsDeleteString", "ptr", hString)
}
WaitForAsync(ByRef Object)
{
AsyncInfo := ComObjQuery(Object, IAsyncInfo := "{00000036-0000-0000-C000-000000000046}")
loop
{
DllCall(NumGet(NumGet(AsyncInfo+0)+7*A_PtrSize), "ptr", AsyncInfo, "uint*", status) ; IAsyncInfo.Status
if (status != 0)
{
if (status != 1)
{
DllCall(NumGet(NumGet(AsyncInfo+0)+8*A_PtrSize), "ptr", AsyncInfo, "uint*", ErrorCode) ; IAsyncInfo.ErrorCode
msgbox AsyncInfo status error: %ErrorCode%
ExitApp
}
ObjRelease(AsyncInfo)
break
}
sleep 10
}
DllCall(NumGet(NumGet(Object+0)+8*A_PtrSize), "ptr", Object, "ptr*", ObjectResult) ; GetResults
ObjReleaseClose(Object)
Object := ObjectResult
}
ObjReleaseClose(ByRef Object)
{
if Object
{
if (Close := ComObjQuery(Object, IClosable := "{30D5A829-7FA4-4026-83BB-D75BAE4EA99E}"))
{
DllCall(NumGet(NumGet(Close+0)+6*A_PtrSize), "ptr", Close) ; Close
ObjRelease(Close)
}
ObjRelease(Object)
}
Object := ""
}