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

2016-02-19 16:41 2 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐XP下关于快速切换用户功能的相关编程,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

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

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

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

  m_hMutexAppRunning = CreateMutex(NULL, FALSE, "GlobalEsXPSwitchUserApp");

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

  这些消息主要有:

  WTS_CONSOLE_CONNECT

  WTS_CONSOLE_DISCONNECT

  WTS_REMOTE_CONNECT

  WTS_REMOTE_DISCONNECT

  WTS_SESSION_LogoN

  WTS_SESSION_LogoFF

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

  WTS_SESSION_LOCK

  WTS_SESSION_UNLOCK

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

  在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。

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

本文示例代码或素材下载

来源:https://www.tulaoshi.com/n/20160219/1612819.html

延伸阅读
标签: Web开发
今天用了一下2.0中的用户控件,发现使用编程方式使用用户控件,跟1.X 中截然不同。 1、首先,要在所要使用的Page 头部声明引用。 如下: %@ Reference Control="../Controls/AlbumEditor.ascx" % 2、在后置代码里,从“ASP”空间中就可以找到此控件的类引用了,不过还需要事例一下。 -_-! 不明白设计者为什么要这么...
标签: Web开发
$(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法 接触JQuery一般最先学到的是何时启动事件。在曾经很长一段时间里,在页面载入后引发的事件都被加载在”Body”的Onload事件里. 对于Body的Onload事件和JQuery的Ready方法相比,有很多弊端.比如: 1.加载多个函数的问题 body onload="a();b();" /body 在Onload事件中只能这...
任何一个交互过程的操作,对于用户来说都有学习成本,谁也不能保证所有人都可以准确无误地走完一个流程。交互设计师在设计时应该考虑适时地给用户相应的帮 助,这一点非常重要。适时帮助,是指在用户使用流程中,在需要的时候能及时地得到帮助;反之,在不需要帮助的时候,不要出现信息干扰。 不及时的帮助会造成用户使用进程中断,或者增加用户...
**软件公司软件开发规范 (试行版) 在公司团队协作开发的情况下,编程时应该强调的一个重要方面是程序的易读性,在保证软件的速度等性能指标能满足用户需求的情况下,能让其他程序员轻易读懂你的程序。一套鲜明的编程风格,可以让协作者、后继者和自己一目了然,在很短的时间内看清程序的结构,理解设计的思路。大大的提高代码的可...
摄影教程:如何留下关于冬天的记忆 有的时候觉得自己是一个记性很好的人。小的时候,每到了黄历上标注着大雪的时候,早上一睁眼要做的事情就是马上从床上爬起来拉开窗帘,期待看到窗外银装素裹的世界,所以在所有关于冬天的记忆里,下雪的冬天才是完整的冬天。 EOS 700D 1/250s f/4.0 iso800 焦距:22mm 相机镜头: EF-S 18-55m...

经验教程

641

收藏

74
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部