C#|MSNメッセンジャーに曲データを送信する

using System;
using System.Runtime.InteropServices;

class SendToIM {
    private const int WM_COPYDATA = 0x004A;
    private const int MAGIC_MUMBER = 1351;

    [StructLayout(LayoutKind.Sequential)]
    private struct COPYDATASTRUCT {
        public int dwData;
        public int cbData;
        public IntPtr lpData;
    }

    [DllImport("user32.dll")]
    private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    private extern static int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, ref COPYDATASTRUCT lParam);

    public static void sendToIM(string applicationName, string title, string artist, int play1Stop0) {
        IntPtr im = FindWindow("MsnMsgrUIManager", null);

        if(im == IntPtr.Zero) return;

        string sendData = applicationName + @"\0Music\0" + play1Stop0.ToString() + @"\0{0} - {1}\0" + title + @"\0" + artist + @"\0\0";

        COPYDATASTRUCT cds;
        cds.dwData = MAGIC_MUMBER;
        cds.cbData = (sendData.Length + 1) * 2;
        cds.lpData = Marshal.StringToHGlobalUni(sendData);
        try {
            SendMessage(im, WM_COPYDATA, IntPtr.Zero, ref cds);
        } finally {
            Marshal.FreeHGlobal(cds.lpData);
        }
    }
}

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください