XP下关于快速切换用户功能的相关编程
2008-01-25 18:11
525 查看
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包含是发生变化SessionSessionID.
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。
任何问题希望能与大家共同探讨!
源码下载
不知道大家注意到没有,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包含是发生变化SessionSessionID.
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。
任何问题希望能与大家共同探讨!
相关文章推荐
- XP下关于快速切换用户功能的相关编程
- XP下关于快速切换用户功能的相关编程
- 关于快速用户切换
- xp下访问samba快速切换用户方法
- [网络相关] Ip和Dns快速切换、局域网在线用户扫描、拦截色情病毒木马加快网页打开速度
- 关于XP注销和切换用户选项不能弹出的问题解决
- 解决:一个最近安装的程序已停用欢迎屏幕和快速用户切换.您必须卸载该程序以恢复这些功能.下列文件名可以帮您识别该程序所作的修改:vrlogon.dll 【转贴】
- XP技巧:巧用组合键快速切换用户
- XP 的快速用户切换 失效的原因之一
- xp中 “控制面板”->“用户帐户”->“更改用户登录注销方式” 出现 一个最近安装的程序已停用欢迎界面和快速用户切换
- NET快速信息化系统开发框架 V3.2 -> “用户管理”主界面使用多表头展示、增加打印功能
- 关于团队合作开发项目时的沟通问题!(不仅要注意【相关机能】,还要注意【相似功能】)
- Delphi 2010 新增功能之: 手势编程[4] - 关于 OnGesture 事件过程的参数
- linux常用操作-3.快速切换用户
- 关于JavaWeb如何实现用户类似站内信功能
- 关于HTTP和HTTPS相互转换的问题--解决根据过滤器自动切换功能--可用
- TeamViewer现在无法捕捉屏幕,这可能是由于快速的用户切换或远程桌面会话已经断开
- 使用ODBC数据库管理Serv-U的FTP用户及相关ASP编程[附源码示例下载]
- athgina.dll 已停用欢迎屏幕和快速用户切换 系统菜单 头像 不显示
- 快速实现Fragment切换功能