Added IMNotification

This commit is contained in:
Yoshi Askharoun
2021-11-21 05:40:34 -06:00
parent c8a7279986
commit b116caa78f
2 changed files with 79 additions and 7 deletions
+75 -2
View File
@@ -26,7 +26,7 @@ namespace Microsoft.Zune.Util
}
goto default;
default:
Module.Microsoft_002EZune_002EUtil_002E_003FA0x6d314898_002ENotifyInstantMessenger(AlbumName, ArtistName, TrackTitle, TrackNumber, ZuneMediaId);
NotifyInstantMessenger(AlbumName, ArtistName, TrackTitle, TrackNumber, ZuneMediaId);
break;
case EMediaTypes.eMediaTypeInvalid:
break;
@@ -37,7 +37,80 @@ namespace Microsoft.Zune.Util
{
if (ClientConfiguration.Playback.NotifyIMClient)
{
Module.Microsoft_002EZune_002EUtil_002E_003FA0x6d314898_002EResetInstantMessenger();
ResetInstantMessenger();
}
}
internal unsafe static void NotifyInstantMessenger(string AlbumName, string ArtistName, string TrackTitle, int TrackNumber, Guid ZuneMediaId)
{
string text = string.Format("ZUNE\\0Music\\01\\0{{0}} - {{1}}\\0{0}\\0{1}\\0{2}\\0zune:{{{3}}}\\0", new object[]
{
PrepareStringForBroadcast(TrackTitle),
PrepareStringForBroadcast(ArtistName),
PrepareStringForBroadcast(AlbumName),
ZuneMediaId
});
fixed (char* textPtr = text)
{
ulong dwData = 1351L;
tagCOPYDATASTRUCT tagCOPYDATASTRUCT2 = new()
{
dwData = &dwData,
cbData = (uint)((text.Length + 1) * 2),
lpData = (ushort*)textPtr
};
SendInstantMessengerMessage(&tagCOPYDATASTRUCT2);
}
}
internal unsafe static void SendInstantMessengerMessage(tagCOPYDATASTRUCT* pcds)
{
fixed (char* textPtr = Module.WINDOWCLASS_MsnMsgrUIManager)
{
ushort* @class = (ushort*)textPtr;
ushort* window = null;// (ushort*)(&Module.??_C@_11LOCGONAA@?$AA?$AA@);
HWND* ptr = Module.FindWindowExW(null, null, @class, window);
if (ptr != null)
{
ulong num;
while (Module.SendMessageTimeoutW(ptr, 74U, 0UL, new IntPtr(pcds).ToInt64(), 2U, 300U, &num) != 0)
{
ptr = Module.FindWindowExW(null, ptr, @class, window);
if (ptr == null)
{
return;
}
}
uint lastError = Module.GetLastError();
Module._ZuneShipAssert(1004, 284);
}
}
}
internal static string PrepareStringForBroadcast(string str)
{
if (str != null)
{
str = str.Replace("\\0", "");
str = str.Replace("{", "[");
return str.Replace("}", "]");
}
return str;
}
internal unsafe static void ResetInstantMessenger()
{
string text = "ZUNE\\0Music\\00\\0{0}\\0";
fixed (char* ptr = text)
{
ulong dwData = 1351L;
tagCOPYDATASTRUCT tagCOPYDATASTRUCT2 = new()
{
dwData = &dwData,
cbData = (uint)((text.Length + 1) * 2),
lpData = (ushort*)ptr
};
SendInstantMessengerMessage(&tagCOPYDATASTRUCT2);
}
}
}
+4 -5
View File
@@ -1,12 +1,11 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Microsoft.VisualC;
[StructLayout(LayoutKind.Sequential, Size = 24)]
[MiscellaneousBits(65)]
[DebugInfoInPDB]
[NativeCppClass]
internal struct tagCOPYDATASTRUCT
internal unsafe struct tagCOPYDATASTRUCT
{
private long _003Calignment_0020member_003E;
public ulong* dwData;
public uint cbData;
public void* lpData;
}