欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

UU'S T&T

TIPS AND TROUBLESHOOTS FOR WINDOWS

公告

  • 本Blog站点上的任何言论仅代表个人观点,与其所在的公司没有任何关系。本Blog站点的内容是按原样提供的,作者与其公司并不对其提供任何种类的担保。此外还否认所有暗示的保证,包括但不局限于在任何试销性或某一特定用途的适用性方面的暗示保证。由于本站内容的使用或性能表现带来的全部风险将由使用者自己承担。任何由于使用或无法使用本站内容而带来的损失(包括但不局限于商业利润、业务中断、业务信息或其他财产上的损失),即使在 本站作者曾经被提醒可能出现这些损失的情况下,本站 及其作者或涉及内容创建的任何其他人等对任何上述的损失概不负责。
    ·本BLOG的内容均属技术交流之用,本人对所发表的文章、图片、随笔保留一切权利。
    如文章、图片、随笔转载请注明:
    作者姓名:尤扬
    文章来源URL:
    http://blogs.itecn.net/blogs/youyang
    同时请通过EMAIL通知本人:
    youyang1983◎hotmail.com
    ·如果通过EMAIL与我联系,并最终解决的问题,我将发表于本BLOG进行技术分享,如果涉及隐私或有特殊要求请于EMAIL中说明!
    本人联系方式:
    MSN ID:youyang1983◎hotmail.com(常用)
    QQ ID:85836514
    EMAIL:v-yayou@microsoft.com
    ·技术就是无条件共享


    2005年7月 Microsoft MVP for Windows-Shell\User
    2006年7月 Microsoft MVP for Windows-Shell\User
    2007年7月 Microsoft MVP for Windows-Shell\User

Microsoft

朋友的网站

MSN Live Messenger的“正在收听的内容”如何自定义?

WMP和MSN Live Messenger配合着让其他联系人看到自己的“正在收听的内容”这个功能,相信大家都用过。我一直想把自己想说的话加进取,这样就可以滚动了。

怎么实现呢?

其实用到的是这个WM_COPYDATA

贴一段C#的代码,大家可以加到自己的项目中:

Win32.cs

using System; using System.Runtime.InteropServices; namespace MSN.Win32 { /// <summary> /// Win32API提供交互 /// </summary> public class Win32API { public const int WM_COMMAND = 0x111; public const short WM_COPYDATA = 74; public struct COPYDATASTRUCT { public int dwData; public int cbData; public int lpData; } /// <summary> /// 获得指定对象的内存地址 /// </summary> /// <param name="e">对象</param> /// <returns>内存地址</returns> public static int GetObjectMemoryAddress(object e) { GCHandle GC = GCHandle.Alloc(e,GCHandleType.Pinned); int gc = GC.AddrOfPinnedObject().ToInt32(); GC.Free(); return gc; } public static int ChangeMSNSong(bool enable, string message,string category) { int iHandle=0; int iReturn=-1; string msnMsg="\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0}\\0" + message + "\\0\\0\\0\\0\0"; //Find the MSN iHandle=Win32API.FindWindow("MsnMsgrUIManager",string.Empty); Win32API.COPYDATASTRUCT copydatastruct = new MSN.Win32.Win32API.COPYDATASTRUCT(); copydatastruct.dwData=0x0547; copydatastruct.cbData=msnMsg.Length * 2; copydatastruct.lpData=Win32API.GetObjectMemoryAddress(msnMsg); if(iHandle>0) iReturn = Win32API.SendMessage(iHandle,Win32API.WM_COPYDATA,0,Win32API.GetObjectMemoryAddress(copydatastruct)); return iReturn; } public enum MSN_CATAGROY { Games, Music } public Win32API() { } [DllImport("User32.dll")] public static extern int FindWindow(string strClassName, string strWindowName); [DllImport("User32.dll")] public static extern int FindWindowEx(int hwndParent, int hwndChildAfter, string strClassName, string strWindowName); [DllImport("User32.dll")] public static extern Int32 SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter [MarshalAs(UnmanagedType.LPStr)] string lParam); // second message parameter [DllImport("User32.dll")] public static extern Int32 SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter int lParam); // second message parameter } }

调用的时候直接用这个方式:

Win32API.ChangeMSNSong(true, ((DataSource)this.dataGrid1.DataSource).Tables[0].Rows[i]["信息"].ToString(), ((DataSource)this.dataGrid1.DataSource).Tables[0].Rows[i]["类别"].ToString());
Posted: 2006年6月21日 21:12 作者 youyang

评论

Flash 说:

如果我想要改變 MSN 的大頭貼,
要怎麼做?
用 SendMessage() 可以做的到嗎?
還是要改成另外的方法?
# 七月 14, 2006 10:05
禁止匿名发表评论