Winamp 有一个选项,就是:在 Windows 任务栏卷动歌曲标题
打开任务管理器,可以看到 Winamp 的窗口标题是不停变换来达到卷动效果的。但是,当我取得 Winamp 的主窗口:
HWND hwndWinamp = FindWindow("Winamp v1.x",NULL); //这是Winamp官方提供的方法
却发现这个窗口的标题是不变的!并且即使调用 SetWindowText() 对主窗口及任务栏的标题均无任何影响。
再在 Spy++ 中看,Winamp 的标题确实是不变的,而改变的只是一个名为 tooltips_class32 的窗口,也就是说,实际的 Winamp 主窗口并没有在任务栏中显示,显示的只是一个“替代品”。但为什么对这个替代品的操作(例如对它点右键,选最小化、移动等)均对 Winamp 主窗口有效?
另外,如果不选 在 Windows 任务栏卷动歌曲标题,虽然那个 tooltips_class32 还在,但如果对 Winamp SetWindowText(),则无论主窗口还是任务栏(tooltips_class32)的标题都改变。以上这些,是怎样实现的?我想了半天也没头绪,望哪位大侠帮我解决!

解决方案 »

  1.   

    窗口标题可以自己绘制, 所以可以和实际的WindowText的不一样
      

  2.   

    窗口标题可以自己绘制, 所以可以和实际的WindowText的不一样
      

  3.   

    就是楼上说的原因。
    Winamp、金山影霸等很多程序都是自绘窗口,所以和标准的不一样。
      

  4.   

    主窗口标题是变的,spy++可以看到。
      

  5.   

    不好意思,可能是我没说清
    是用 GetWindowText() 的得到的 和 任务栏 中显示的不一样,窗口中显示的标题是 Skin 中画的,这我知道
    另,To papaya_stone(^_^)shentong(^_^) 
    spy++ 中看 类名为 Winamp v1.x 的窗口(这是 Winamp 主窗口)标题是不变的!当然如果一首歌放完了换下一首,就会变了
      

  6.   

    又有新的发现
    当 Winamp 主窗口最小化之后,在 Spy++ 中也无法看见那个标题栏在卷动的窗口,而只能在任务管理器中看见!
      

  7.   

    HWND hwndWinamp = FindWindow("Winamp v1.x",NULL); 
    前一项是类名当然不会改变的,窗口标题随时都可以设置,添加的
    winamp也没有所谓的替代的窗口,不过是这个窗口是自画的
    通过区域的定制来控制点击的效果
      

  8.   

    To SoLike(是我)
    转发消息?不大懂。
    转发消息就可以改变任务栏标题?
      

  9.   

    yeah,SoLike(是我) 说的有可能。
      

  10.   

    也可能是这样,它根本就没有将标题显示出来,而只是用另外一个控件来显示你所看到的标题不就可以理解了吗,至于消息转化,当特定的地方(可能是小窗口)被单击时向主窗口发一个WM_SYSCOMMAND不久搞定了吗
      

  11.   

    刚刚用spy查看消息
    他每隔一些时间就发送wm_settext在wm_settext之前去掉ws_caption风格,之后再加上.总共有两个timer
      

  12.   

    楼上各位说得跳跃性太强了,还是不大懂,简单的说吧,
    就是如何使 GetWindowText() 得到的窗口标题 与 任务栏中显示的窗口标题 不一样
    最好有具体的实现过程。还有,我用 Spy++ 跟踪过,好像并没有 WM_TIMER 事件产生(或许可能是直接定义了定时响应函数从而不会发生 WM_TIMER?)。
      

  13.   

    昨天回家看了下(公司电脑没装Winamp), 没你说的这种情况啊.
    在Spy++, 任务栏, 任务管理器中的文字都在变动.
    当然如果你想看到Spy++中的变动, 必须不停的按Refresh按钮, 你再看看
      

  14.   

    to 楼上的
    在我机子(Winxp)是这样的情况:
    任务栏, 任务管理器中的文字都在变动. Spy++ 里变的是一个类名为 tooltips_class32 的窗口,主窗口("Winamp v1.x") 并不变。而且如果 Winamp 最小化了,那么连 tooltips_class32 也没了,在 SP++ 中看不到任何标题在变的窗口!
      

  15.   

    你看到的主窗口("Winamp v1.x")是主窗口的类名, 在General里的Window Caption才是主窗口的标题
      

  16.   

    不好意思,是我想复杂了。
    实际上任务栏标题是 SetWindowText() 设置的。
    而用 GetWindowText() 得到的是 Winamp 响应 WM_GETTEXT 是设定的,因此不受 SetWindowText() 影响。