mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
Added IMNotification
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user