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

巧美丽儿昂打

巧美丽儿昂打

2016-02-19 16:41

想要天天向上,就要懂得享受学习。图老师为大家推荐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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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。

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

本文示例代码或素材下载

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

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

电脑如何切换用户

电脑入门
电脑如何切换用户

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Win10切换用户的方法

电脑入门
Win10切换用户的方法

Win7系统下快速切换用户账户的方法

电脑网络
Win7系统下快速切换用户账户的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux系统中的切换用户命令宝典

服务器
Linux系统中的切换用户命令宝典

linux系统怎么用命令切换用户?

服务器
linux系统怎么用命令切换用户?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

正则表达式判断email和URL

正则表达式判断email和URL

php检查ISBN号码是否合法

php检查ISBN号码是否合法
下拉加载更多内容 ↓