首页 | 手机 | 笔记本 | 硬件 | MP3 | DC | DV | 品牌机 | 办公 | 网络 | 服务器 | 投影 | 新闻 | 游戏 | 学院 | 下载 | 家园 | 生活
首页 >> 学院 >> 工具软件 >> 工具软件媒体
用Media Player设计个性化媒体播放器
2004-9-22 10:27:00 文/郎锐 出处:天极网

  热键隐藏与呼出

  前面介绍的各种常规功能在Windows Media Player中都已经具备,为了使设计的程序在使用方式上更适合自己,可以根据自己的需求添加一些Windows Media Player原本并不具备的个性化功能。例如,本程序下面将要添加的热键迅速隐藏、呼出功能和可调半透明播放功能都是Windows Media Player所不具备的,而且就笔者这段时间的试用,感觉这两种功能都还是相当实用的。当然,这里要添加的既然是“个性化”功能,那么就应当视读者的个人喜好而决定到底要添加什么功能。笔者此处介绍的目的仅在于抛砖引玉。

  无论是金山影霸还是RealOne Player、Windows Media Player等主流媒体播放软件都没有提供彻底隐藏的功能,通常只能简单的最小化至多不过缩小成任务区中的一个小图标,这样其实根本达不到隐藏的效果,如果暂时离开计算机,他人可以很容易打开当前正在执行的媒体播放程序。这里将要实现的目标是:程序主窗体的隐藏、在任务栏上的隐藏、在Alt+Tab键在程序间切换时的隐藏。这样,程序在实施隐藏后他人将意识不到程序的执行,可以达到非常好的隐身效果。由于隐藏后没有任何窗口供用户交互之用,因此需要添加热键以在程序隐藏后能够将其从后台呼出。

  首先要在程序中注册一个热键,无论该程序在前台还是后台运行,只要用户按下这个热键,程序将立即执行在前、后台间的切换。下面这段代码在程序初始运行时执行,通过对RegisterHotKey()的调用登记用于程序隐藏的热键Ctrl + P(或Ctrl + p)和用于程序呼出的热键Ctrl + Shift + A(或Ctrl + Shift + a):

// 登记热键
HWND hWnd = GetSafeHwnd();
RegisterHotKey(hWnd, 1001, MOD_CONTROL | MOD_SHIFT, 'A');
RegisterHotKey(hWnd, 1002, MOD_CONTROL | MOD_SHIFT, 'a');
RegisterHotKey(hWnd, 1003, MOD_CONTROL, 'P');
RegisterHotKey(hWnd, 1004, MOD_CONTROL, 'p');


  其中,1001、1002等参数是这些热键对应的ID。在程序捕获到热键消息WM_HOTKEY后将通过这些ID来确认按下的是哪个键。ClassWizard并没有对消息WM_HOTKEY进行封装,需要手工添加对该消息的映射及处理。消息处理函数的wParam参数包含有按键的ID,下面是这部分实现代码:

switch(wParam) {
 case 1001:
 case 1002:
 {
  // 呼出程序
  HWND hWnd = GetSafeHwnd();
  LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
  lStyle &= ~WS_POPUP;
  ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);
  ::ShowWindow(m_hWnd, SW_SHOW);
  CWnd::SetForegroundWindow();
  m_Control.play(); // 继续
  break;
 }
 case 1003:
 case 1004:
 {
  // 隐藏程序
  // 隐藏程序
  HWND hWnd = GetSafeHwnd();
  LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
  lStyle |= WS_POPUP;
  ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);
  ::ShowWindow(m_hWnd, SW_HIDE);
  m_Control.pause(); // 暂停
  break;
 }
}


  在进行窗体隐藏处理时,首先通过GetWindowLong()得到当前窗口风格,在此基础上追加WS_POPUP风格并由SetWindowLong()设置,修改后的窗体将具备工具条一样的风格,即不会在任务栏显示窗体,在用Alt+Tab切换窗体时也不会出现。最后再以SW_HIDE调用ShowWindow()函数隐藏程序主窗口即达到彻底隐藏的目的。窗体呼出过程正与之相反:在GetWindowLong()函数得到当前窗口风格后,从中剔除WS_POPUP风格并由SetWindowLong()设置,恢复程序原有的风格,最后再以SW_SHOW调用ShowWindow()函数显示程序主窗体。最后由CWnd类成员函数SetForegroundWindow()将呼出的程序显示到前台。

  需要注意的是,在程序退出前一定要将先前注册的热键注销,由UnregisterHotKey()函数完成:

HWND hWnd = GetSafeHwnd();
UnregisterHotKey(hWnd, 1001);
UnregisterHotKey(hWnd, 1002);



IT产品热门报价
 手机 更多>>
 笔记本 更多>>
 数码产品 更多>>
 电脑硬件 更多>>
热点推荐
·IT江湖牛B事之口水系列
·震撼21款AM2主板横评专题
·冷眼看暑促价格战非万能
·学生购买笔记本全面指导
·快乐支付体验会现场报道
·是明星贪财还是商家无耻?
·QQ2006
·PPlive
·酷狗
·超级转换秀
·明星三缺一
·PPstream
·TOM-Skype
·珊瑚虫QQ 
生意经
看本文的网友还看了:
  • 如何才能观看有DRM认证的教程 2006年8月28日
  • Windows Media Player11使用技巧 2006年7月18日
  • Media Player充当“兼职”图片浏览器 2006年2月1日
  • 给你的WMP加个调速器 2004年11月5日
  • My MPC常见问题解答 2004年10月29日
  • 看本文网友的博客:
    ·很棒小秘书称软件删不掉是用户水平太低
    ·[软件资讯榜]惊爆!央视推出I
    ·网络跨进“娱乐时代”
    ·[软件资讯榜]真正的Web 2
    ·[[软件资讯榜]腾讯QQ2006
    2006 经营许可证编号:浙B2-20040150 粤B2-20050807 广告联系:020-61081800