请问如media player这样的播放器如何在播放的时候改变msn messenger的个人信息?
还有千千静听,酷狗都可以在播放的时候,改变msn的个人信息,改为音乐的歌名等,请问这是怎么做到的 ??
我找不到这方面的资料,哪个有传份这方面的资料我看看吧,[email protected],200分!

解决方案 »

  1.   

    楼主抱歉啊,我是近来请教个问题的,麻烦楼主帮我看看吧
    我用RTP实时传输协议,利用UDP取得视频服务器压缩后传到我客户端的数据,无论是用xvid还是ffmpeg压缩和解压mpeg4编码格式的数据,几秒钟的录像都会被存为几十分钟的avi文件,我保存的是压缩的数据,是#define YUY2_BUFFER_SIZE (720*576*2)大小的而不是解压后的RGB格式的#define RGB_BUFFER_SIZE (720*576*3)大小,难道是关键帧的问题吗?我把视频服务器传过来每一帧的保存都是用关键帧作为保存的,而且我也不知道该如何判断关键帧,刚我试过了,把他们都作为非关键帧来保存,还是保存成时间延长了的录像,楼主给看看吧
      

  2.   

    如果能做到修改个人信息的话,那么MSN应该是有提供程序开发接口的,我想在微软的网站上应该可以找到一些信息:http://tech.msn.com/howto/
      

  3.   

    参考foobar是如何发送给MSN的http://www.clarenceho.net:8123/blog/articles/2008/09/17/msn-now-playing-plugin-for-foobar2000-0-9-5-version-0-5
      

  4.   

    我看了foobar的做法,他是直接发WM_COPYDATA过去的,这个我用msn9.0,不奏效,不知道其他版本的MSN怎么样?hWnd = NULL;
        while (hWnd = FindWindowEx(NULL, hWnd, MSN_CLASS_NAME, NULL))
        {
            CON_DEBUG(text);
            SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)&cd);
        }
      

  5.   

    good
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  6.   

    估计有自定义的接口吧,找个牛人把MSN拿来逆向一下……
      

  7.   

    Give you a function,easy for use.http://blog.csdn.net/HackerJLY/archive/2009/03/27/4030629.aspx//Defination :
    //static bool SetWindowsMessengerPersonalInfo(LPCSTR lpszMsg,int iMsgType = NULL);
    bool CPrjWindowsMessengerTestDlg::SetWindowsMessengerPersonalInfo(LPCSTR lpszMsg, int iMsgType)
    {
    // TODO: Add your control notification handler code here
    HWND hWndMSN = NULL;
    COPYDATASTRUCT cds; char sz[1000];
    char szMsg[1000];
    wchar_t wszMsg[1000];
    //====================================================================== hWndMSN = FindWindowEx(NULL, hWndMSN, "MsnMsgrUIManager", NULL);

    if(NULL != hWndMSN)
    {
    //--------------------------------------------------------------
    strcpy(sz,lpszMsg);

    cds.dwData = 0x0547; //--------------------------------------------------------------
    if(0 == iMsgType)
    {
    sprintf(szMsg, "\\0Music\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    else if(1 == iMsgType)
    {
    sprintf(szMsg, "\\0Games\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    else
    {
    sprintf(szMsg, "\\0Office\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    //--------------------------------------------------------------

    int iLen = MultiByteToWideChar(CP_ACP, 0, szMsg, -1, NULL, NULL);

    MultiByteToWideChar(CP_ACP, 0, szMsg, -1, wszMsg, iLen);
    //--------------------------------------------------------------
    cds.lpData = wszMsg;

    cds.cbData = (wcslen(wszMsg)+1)*2;

    ::SendMessage(hWndMSN, WM_COPYDATA, NULL, (LPARAM)&cds);

    return true;
    }
    else
    {
    return false;
    }}//Invoke Samplevoid CPrjWindowsMessengerTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    SetWindowsMessengerPersonalInfo("Jackie's Mailer"); CDialog::OnLButtonDblClk(nFlags, point);
    }
      

  8.   

    我记得是COM接口,查询MSN的接口就可以.
      

  9.   

    foobar就是采用11楼的做法,但我在MSN9.0下试过了,不可以,我用了酷狗,他的是可以的,不知道他是怎么做的
    如果是COM的方式 不知道需要那些接口?还有这些接口如何使用?
      

  10.   

    可以了,是我没把MSN的“显示正在播放的内容”这个菜单勾上,谢谢oyljerry和HackerJLY
    其实这个代码以前我试了很多次了,没成功才来问,原来代码是对的,是自己的问题...
    我还想问的是,怎么通过代码自动让,MSN个人信息里的哪个“显示正在播放的内容”这个菜单勾上呢?
      

  11.   

    使用media player的activex插件
    进行开发,比较简单而且速度很快的!!!
      

  12.   

    没研究过。
    至于菜单勾上那个,要是像楼上说的是com找资料把。
    还有其他方法。找到msn配置信息所在位置,把那个“显示正在播放的内容”的选项设置为“真”。
    还有就是像游戏外挂似的,注入进程直接call,msn函数。这个有很大的局限性,不同版本的函数位置很可能是不一样的。
      

  13.   

    正解如下,修改了一下,可以支持多实例
    http://blog.csdn.net/HackerJLY/archive/2009/03/27/4030629.aspx 
    //Defination :
    //static bool SetWindowsMessengerPersonalInfo(LPCSTR lpszMsg,int iMsgType = NULL);
    bool CStaticPubFunc::SetWindowsMessengerPersonalInfo(LPCSTR lpszMsg, int iMsgType)
    {
    // TODO: Add your control notification handler code here
    HWND hWndMSN = NULL;
    COPYDATASTRUCT cds; char sz[1000];
    char szMsg[1000];
    wchar_t wszMsg[1000];
    //======================================================================
    while(1)
    {
    hWndMSN = FindWindowEx(NULL, hWndMSN, "MsnMsgrUIManager", NULL);

    if(NULL != hWndMSN)
    {
    //--------------------------------------------------------------
    strcpy(sz,lpszMsg);

    cds.dwData = 0x0547; //--------------------------------------------------------------
    if(0 == iMsgType)
    {
    sprintf(szMsg, "\\0Music\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    else if(1 == iMsgType)
    {
    sprintf(szMsg, "\\0Games\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    else
    {
    sprintf(szMsg, "\\0Office\\01\\0{0}\\0%s\\0\\0\\0\\0", sz);
    }
    //--------------------------------------------------------------

    int iLen = MultiByteToWideChar(CP_ACP, 0, szMsg, -1, NULL, NULL);

    MultiByteToWideChar(CP_ACP, 0, szMsg, -1, wszMsg, iLen);
    //--------------------------------------------------------------
    cds.lpData = wszMsg;

    cds.cbData = (wcslen(wszMsg)+1)*2;

    ::SendMessage(hWndMSN, WM_COPYDATA, NULL, (LPARAM)&cds);

    }
    else
    {
    break;
    }
    } return true;
    }//Invoke Samplevoid CPrjWindowsMessengerTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    SetWindowsMessengerPersonalInfo("Jackie's Mailer"); CDialog::OnLButtonDblClk(nFlags, point);
    }
      

  14.   

    那如果是MSN8或更高版本(也就是Windows Live Messenger)呢?这个版本目前流行.我试过
    hWndMSN = FindWindowEx(NULL, hWndMSN, "Windows Live Messenger", NULL);
    是可以找到窗口句柄的,但按照MSN7的协议格式好象没效果