XP下关于快速切换用户功能的相关编程
来源:互联网 发布:mac pro换屏幕多少钱 编辑:程序博客网 时间:2024/06/06 19:23
不知道大家注意到没有,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
- XP下关于快速切换用户功能的相关编程
- linux 下关于用户的操作
- XP 的快速用户切换 失效的原因之一
- Linux系统下关于用户和组的配置管理
- hardware/ril目录下关于电话的相关介绍
- linux下关于网络的相关指令网络(持续中)
- Linux下关于时间概念的C语言编程
- Linux下关于时间概念的C语言编程
- Linux下关于时间概念的C语言编程
- Linux下关于vim编辑器的使用进行编程
- 网络编程下关于服务器模型的总结
- linux下关于逻辑卷相关配置
- linux下关于后台任务和前台任务之间的且切换命令小结
- opencv下关于debug和release的切换报错问题
- HOW TO: 编写在 Windows XP 中支持快速用户切换的应用程序
- 编写在 Windows XP 中支持快速用户切换的应用程序
- 编写在 Windows XP 中支持快速用户切换的应用程序
- HOW TO: 编写在 Windows XP 中支持快速用户切换的应用程序
- bean
- VIM的一般使用技巧
- Flex通信篇——Flex和外部应用程序进行通信
- 在Redhat5中安装Symantec Backup Exec Agent实例
- 疯狂了
- XP下关于快速切换用户功能的相关编程
- 在Redhat5中安装APC PowerChute Network Shutdown实例
- 关于出差
- Windows Phone,Windows Mobile,Windows Embedded CE(WinCE),.NET Compact Framework,Native C++开发系列(上百篇原创文章不断更新完善中)
- 在Redhat5中安装Symantec Antivirus Agent实例
- 使用impdp导数据文件时报错,提示work线程提早退出
- PHP 学习网站
- 获取Kernel32基地址的几种方法
- 各大搜索引擎网站登录入口