XP下关于快速切换用户功能的相关编程

不知道大家注意到没有,Windows XP新增加了一个快速切换用户的功能。它可以让您在不注销的情况下在用户之间进行切换,而且每个用户有自己独立的配置文件和桌面。也就是说当您切换到另外一个用户(即用另外一个账号登陆)时,以前的那个用户运行的所有程序都还是在运行的,并没有退出来。这就给我们的开发带来了新的问题。比如您的应用程序提供的功能在多个用户同时运行时发生错误,您必须为应用程序添加代码以检测该情形并作出相应的反应。

1、检测是否有用户正在运行该应用程序

我们平时都使用互斥体的方法来实现只有一个实例运行,而且在使用CreateMutex()生成互斥体是使用默认的方式,即互斥体的作用范围不是全局的,只能在一个Session里起作用,而对于切换用户下存在多个Session是不起作用的,因而也就检测不到已经在运行的实例。解决的方法很简单,在使用CreateMutex()时,在互斥体的名字前加上"Global"关键字即可。

m_hMutexAppRunning = CreateMutex(NULL, FALSE, "Global\\EsXPSwitchUserApp");

2、监测用户现在是否在切换用户有的时候,我们需要检测用户做切换用户操作的这个行为,以便让我们的程序能够做出相应的处理。例如,我们需要在结束活动用户会话运行状态时释放某些资源,而在其再次进入活动会话状态时重新获得该资源。还好Microsoft提供了让我们的程序接收会话通知消息的方法。我们可以通过调用 WTSRegisterSessionNotification 函数进行注册以接收WM_WTSSESSION_CHANGE 消息。

这些消息主要有:

WTS_CONSOLE_CONNECT

WTS_CONSOLE_DISCONNECT

WTS_REMOTE_CONNECT

WTS_REMOTE_DISCONNECT

WTS_SESSION_LOGON

WTS_SESSION_LOGOFF

WTS_SESSION_LOCK

WTS_SESSION_UNLOCK

在wParam中包含了这些消息类型,而lParam包含的是发生变化的Session的SessionID.

switch(message)
{
  case WM_WTSSESSION_CHANGE:
  {
switch(wParam)
   {
   case WTS_CONSOLE_CONNECT:
   MessageBox("WTS_CONSOLE_CONNECT", "Esmile", MB_OK );
   break;
   case WTS_CONSOLE_DISCONNECT:
   MessageBox("WTS_CONSOLE_DISCONNECT",
    "Esmile", MB_OK );
   break;
   case WTS_SESSION_LOCK:
   MessageBox("WTS_SESSION_LOCK",
    "Esmile", MB_OK );
   break;
   case WTS_SESSION_UNLOCK:
   MessageBox("WTS_SESSION_UNLOCK",
    "Esmile", MB_OK );
   break;
   case WTS_SESSION_LOGOFF:
   MessageBox("WTS_SESSION_LOGOFF",
    "Esmile", MB_OK );
   break;
   case WTS_SESSION_LOGON:
   MessageBox("WTS_SESSION_LOGON",
    "Esmile", MB_OK );
   break;
   default:
   break;
   }
}
  break;
default:
  break;
}

这样,我们就可以处理我们感兴趣的消息了,从而达到我们的目的.

3、注意事项

每一个对 WTSRegisterSessionNotification 的调用应与一个对 WTSUnRegisterSessionNotification 的调用匹配,

即在程序退出时要释放这个通知注册信息。

WTSRegisterSessionNotification 和 WTSUnRegisterSessionNotification 需要头文件Wtsapi32.h以及

Wtsapi32.lib。另外在包含 windows.h 的语句之前添加以下 #define 语句

#define _WIN32_WINNT 0x0501

文章附带的源代码在win2000pro下编译通过,程序只能在Window XP下运行,因为非XP系统没有WTSAPI32.dll。

任何问题希望能与大家共同探讨!

本文配套源码

时间: 2024-10-03 10:20:36

XP下关于快速切换用户功能的相关编程的相关文章

win7系统下如何快速切换程序窗口的方法

  现在我们使用电脑,经常会同时打开多个窗口,以供我们更加方便的操作电脑,但是窗口一多的话,切换起来就不太方便了,经常需要等待缩略图显示之后,点击相应的窗口才能进行切换,或者是直接使用快捷键来操作,虽然这对于用户来说已经很方便了,但是还有更加方便的操作方法.其实我们可以将程序按钮合并,直接鼠标点击合并按钮就可以切换窗口了,无需等待缩略图的出现.下面小编就来为大家系统的介绍Win7迅速切换程序窗口的操作过程 在Win7中,任务栏相同程序按钮合并是默认设置.用鼠标切换这类程序时需要等略缩图显示之后,

实现Win7系统快速一键切换用户的bat脚本_DOS/BAT

我们在使用电脑时,偶尔会需要比较频繁地切换用户的情况,虽然按下"Win+L"的切换过程并不算复杂,但是热键+点击"切换用户"按钮+输入密码,这一系列动作下来,前后也需要用上七八秒的时间.其实,只需要通过简单的一个批处理功能,就可以实现在一键切换系统用户的功能,BAT实现如下: 复制代码 代码如下: ::批处理实现Win7一键切换用户 ::以下代码可自动触发Win7 "UAC",既可自动判断当前用户是否为管理员运行,如果不是会 ::弹出"

win7 vs2013发布的网站 传到xp下测试 有些功能没有呢

问题描述 win7vs2013发布的网站在win7下测试没问题,可传到xp下测试发现有个别功能没有了请问是咋回事?大家有没有遇到这种情况的请帮助! 解决方案 解决方案二:另外vs2013生成网站和发布网站有何区别?

IE10快速翻页功能让浏览更高效

浏览网页时常会遇到这样的情况,一篇文章被分成几页或十几页来显示, 于是每看完一页都要找到"下一页"按钮来翻页,十分麻烦.Modern触控版IE10浏览器的快速翻页功能,让你无需费心寻找按钮,一键即可直接跳转到下一页,非常的方便. 一键快速翻页(Alt + →) 将鼠标移动至网页中线右侧,单击隐藏的前进按钮(或使用快捷键Alt + →),即可快速跳转到下一页. 触屏操作 用手指从屏幕右边向左边滑动,即可跳转到下一页. 如果你无法在Modern触控版IE10下使用快速翻页功能,这个可能是这

请教XP 下IPSEC问题 望高手指点

问题描述 想在两台主机间编程来实现IPsec加密通信,不需要IKE交换密钥,直接在程序中自己去定义SA和SP像linux下的IPsec-toos中的setkey实现的功能,但是在XP下我根本找不到这样的编程接口在vista和win7中有WFP(http://msdn.microsoft.com/en-us/library/aa364938(v=VS.85).aspx).我看了一下基本能够满足需求,但在XP中不知道有没有类似的编程接口,因为XP内核是支持IPsec的但我没有找到相关的编程资料.难道

怎样在xp系统下用批处理文件快速修改用户密码

对于一些资深的windows xp系统用户,可能会多多少少对startup scripts有所了解,startup scripts也就是Windows XP启动脚本,它是计算机开启时,在登录屏幕出现之前系统将会运行的批处理文件,类似于Windows 9×和DOS中的自动执行批处理文件autoexec.bat的功能.一般情况下用户们是很少也不需要用到startup scripts,可是如果遇到需要置换windows xp系统用户密码,我们可以利用它编写批处理文件对用户密码进行重新设置.下面小编就带

XP系统几招实现用户切换

XP系统中允许设置多用户来提高用户们之间的安全性,所以在日常使用某台电脑时常常需要用到用户切换功能,今天小编将指导大家如何进行用户切换. 使用"注销"菜单法 切换用户最常用的方法,就是通过"注销"菜单来访问用户切换功能.方法是:单击"开始→注销",在打开的如图1所示的"注销Windows"对话框中,单击"切换用户"按钮,系统会保留当前会话状态.从表面上看,这和注销用户并没有什么两样,但使用切换用户方法可以保

XP系统下如何关闭自动更新功能

  XP系统下如何关闭自动更新功能           常规法 右击"我的电脑"图标,单击"属性"项 切换到"自动更新"选项卡,选择"关闭自动更新",单击"确定" 服务法 单击"开始",单击"控制面板",双击打开"管理工具"--"服务" 在右侧窗口找到并双击打开"Automatic Updates"服务 在&

windows 8下无需注销重启快速切换不同账户方法

  Windows 8.1快速切换登录账号的方法为:长按"Shift"键,然后右击相应程序的快捷方式图标,便可发现右键菜单中增加了一个"以其他用户身份运行"的选项,点击该项就会弹出Windows安全登录窗口,如下图所示: Windows 8.1快速切换不同账户方法 在这里我们可以输入其他系统账户的用户名和密码即可登陆进行,这样就实现了快速切换帐户了. Windows 8.1快速切换不同账户,可以兼顾多用户的实际需要,Windows 8.1可以分别针对不同帐户建立详细