VB - Windows Live Messenger "Now Playing"

By , 4/8/2008
(1 ratings)
This class allows you to send a string to Windows Live Messenger to let other users see what you are just listening, like Windows Media Player.
Translate to C#
Imports System.Runtime.InteropServices

Public Class MSNStatusMessage
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
        ByVal hWnd1 As Integer, _
        ByVal hWnd2 As Integer, _
        ByVal lpsz1 As String, _
        ByVal lpsz2 As String) _
    As Integer

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
        ByVal Hwnd As Integer, _
        ByVal wMsg As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) _
    As Integer

    Private Const WM_COPYDATA As Short = 74

    Private Structure COPYDATASTRUCT
        Public dwData As Integer
        Public cbData As Integer
        Public lpData As Integer
    End Structure

    Public Enum EnumCategory As Integer
        Music = 0
        Games = 1
        Office = 2
    End Enum

    Public Shared Sub SendStatusMessage(ByVal Enable As Boolean, ByVal Category As EnumCategory, Optional ByVal Message As String = "")
        Dim Data As COPYDATASTRUCT
        Dim Buffer As String = "\0" & Category.ToString + "\0" & IIf(Enable, "1", "0") & "\0{0}\0" & Message & "\0\0\0\0" & Chr(0) & ""
        Dim Handle As Integer = 0

        Data.dwData = 1351
        Data.lpData = VarPtr(Buffer)
        Data.cbData = Buffer.Length * 2

        Handle = FindWindowEx(0, Handle, "MsnMsgrUIManager", Nothing)

        If Handle > 0 Then
            SendMessage(Handle, WM_COPYDATA, 0, VarPtr(Data))
        End If
    End Sub

    Private Shared Function VarPtr(ByVal e As Object) As Integer
        Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
        Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32
        GC.Free()
        Return GC2
    End Function
End Class

Tagged with msn, wlm, api.

3 Comments

By Scottcohen, 2/25/2009
I have a question for you, what can I use to include a second part.
Currently, when I use this snippet, it changes my Now Playing string to "Message - ".

When I change the buffer to:
[code=VB.NET]Dim Buffer As String = "\0" & Category.ToString + "\0" & IIf(Enable, "1", "0") & "\0{0}\0" & Message & "\0" & Message2 & "\0" & Chr(0) & ""[/code]
The following happens:
- In the main contacts screen, it displays perfectly ("Message - Message2")
- In the chat screen, it ONLY displays the first (without a dash!) ("Message")

Do you know how I can change the buffer, so that it changes the string in the main contacts screen AND in the chat screen?

Many thanks!
By Scottcohen, 2/25/2009
You can mail me:
mikesmith13321
[AT]
gmail
[DOT]
com
By Scottcohen, 2/25/2009
Already solved it: change {0} to {0} - {1}
 

Log in, to comment!

Related Snippets