翻译《The Old New Thing》- Taxes: Detecting session state changes, such as a locked workstation

Taxes: Detecting session state changes, such as a locked workstation - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20060104-50/?p=32783

Raymond Chen 2006年01月04日


开发成本:检测会话状态变化,如锁定的计算机工作站

        在开发过程中,另一个需要考虑的技术挑战是如何与快速用户切换和终端服务友好地协作。当工作站被锁定或用户会话断开时,您应该停止非关键的定时器,减少后台活动,并总体上使程序进入一种休眠状态。如果您已经采用了仅在窗口可见时才进行重绘的策略,那么您将自动获得这些好处,因为锁定的工作站和断开的会话不会发送重绘消息。

        如果您还有其他需要在用户锁定计算机或断开连接时减少或停止的活动,您可以注册以在状态变化时接收通知。了解这些状态变化也很重要,这样您就可以知道您的显示是本地的还是远程的。正如我们上次讨论的,通过远程桌面连接进行绘图比在本地显示上要慢得多,因为所有的位图都需要通过网络传输到远程桌面客户端。

        由于锁定计算机和断开会话会取消使用视觉反馈来指示程序状态的能力,我们将使用声音反馈。从我们的新测试程序开始,并进行以下修改:

#include <wtsapi32.h>
LRESULT RootWindow::OnCreate()
{
    WTSRegisterSessionNotification(m_hwnd, NOTIFY_FOR_THIS_SESSION);
    return 0;
}
LRESULT RootWindow::HandleMessage(
                          UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg) {
    // ...
    case WM_WTSSESSION_CHANGE:
      switch (wParam) {
      case WTS_CONSOLE_DISCONNECT:
      case WTS_REMOTE_DISCONNECT:
      case WTS_SESSION_LOCK:
      case WTS_SESSION_LOGOFF:
        Beep(440, 250); break;
      case WTS_CONSOLE_CONNECT:
      case WTS_REMOTE_CONNECT:
      case WTS_SESSION_UNLOCK:
      case WTS_SESSION_LOGON:
        Beep(880, 250); break;
      }
      break;
    // ...
    }
}

        在这个程序中,我们在创建主窗口时注册了会话通知,并在窗口处理程序中监听会话变化消息。如果我们检测到“离开”消息,我们会发出一个低沉的哔声;如果我们检测到“回来”消息,我们会发出一个高音的哔声。

        运行这个程序,然后锁定工作站或使用快速用户切换切换用户。您应该会听到一个低沉的哔声(尽管如果您执行的操作有系统声音,您可能需要仔细听,因为低沉的哔声会与该声音混合)。当您切换回来时,您应该会听到一个高音的哔声。

        当然,一个实际的应用程序会通过启动或停止其后台任务来响应这些通知。这个程序的目的仅仅是为了演示如何首先获取这些通知。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x0007

可不可奖励我吃只毛嘴鸡 馋😋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值