修改msn個人訊息

修改msn個人訊息

突然聽到有人想要做個功能,
就是要在執行他的程式的時候,
msn上的個人訊息要改為”我現在正在使用 xxx ”或是”我現在正在玩 xxx ”

msn本身的功能就已經有個[顯示我正在收聽的歌曲資訊]
而現在很多音樂播放軟體也都”支援”msn這樣的功能.

所以稍微google一下,果然有一堆相關的網頁.

大致上的做法如下(使用C#).

下面這片段直接貼到你的class中

[DllImport("user32", EntryPoint = "SendMessageA")]
        private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);

        [DllImport("user32", EntryPoint = "FindWindowExA")]
        private static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
        private const short WM_COPYDATA = 74;
        public struct COPYDATASTRUCT
        {
            public int dwData;
            public int cbData;
            public int lpData;
        }

        public COPYDATASTRUCT data;
        public int VarPtr(object e)
        {
            GCHandle GC = GCHandle.Alloc(e, GCHandleType.Pinned);
            int gc = GC.AddrOfPinnedObject().ToInt32();
            GC.Free();
            return gc;
        }
        private void SendMSNMessage(bool enable, string category, string message)
        {
            string buffer = "\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0}\\0" + message + "\\0\\0\\0\\0\0";
            int handle = 0;

            data.dwData = 0x0547;
            data.lpData = VarPtr(buffer);
            data.cbData = buffer.Length * 2;

            handle = FindWindowEx(0, handle, "MsnMsgrUIManager", null);
            if (handle > 0)
                SendMessage(handle, WM_COPYDATA, 0, VarPtr(data));
        }

但要記得開頭的using要加

using System.Runtime.InteropServices;

而在你的程式中要使用的話就是呼叫SendMSNMessage的函數.如下:

SendMSNMessage(true,this.comboBox1.Text, this.textBox1.Text);

第一個參數 : 設定msn是否要顯示該段訊息,或是只顯示msn中的設定訊息.

第二個參數 : 顯示訊息的圖片,目前似乎只有三個(Office,Games,Music),顯示歌曲資訊就是使用Music

例圖 :

Office : msnpsn01

Games :  msnpsn02

Music :   msnpsn03

第三個參數 : 要顯示的訊息.

 

範例下載 :

原始碼 : MsnPersonalMsgChange-src.zip

執行檔 : MsnPersonalMsgChange-bin.zip

 

參考網址:

C#, Change your personal message automaticly

MSN Floating Personal Message

DotBlogs 的標籤:,,,