快速用户切换的实现(Fast User Switching)

      这周被安排做一个兼容XP、VISTA、W7的快速用户切换程序(FUS),是目前公司项目的一个子应用。就是在用户A中输入用户B的用户名和密码可以一键切换到用户B的桌面而不经过欢迎屏。

      虽然没很多东西,对作为菜鸟的我来说整个过程做的还是很难受,因为刚开始根本不知道要从哪里入手。看了很多资料,但大都是说怎么开发FUS应用程序的。在CSND上发了帖子求助,得到了lerit同学的回应,很是感激,但问题还是没有最终解决。后来在同事的建议下开始看Terminal service并用Google搜索开始看一些国外相关的文章。

      在一个帖子中发现了WTSDisconnectSession函数可以实现从用户A的桌面切换到欢迎屏选择用户的地方,感觉到了一点点的希望,但接着看MSDN却没有发现有自动登入用户的相关API,在一个国外的博客中倒是看到一个利用gina实现自动登陆的介绍,但因为gina在vista后已经被取消所以不能满足跨平台的要求。在MSDN2008中发现了一个API:WTSConnectSession,实际上也无法实现,当然也可能是我传入的参数有问题的缘故把,因为不支持XP也被毙掉了。

      周四看一个相关博客的时候发现了一个命令tscon,算是救命稻草吧,可以实现从用户A的桌面直接切换到用户B的桌面,但用得不是username而是sessionID,于是便开始找有没有能直接通过username得到sessionID的API,这里我得检讨下,太懒惰了,老想一步到位。知道了tscon后面的一切就简单了。

 

     先用WTSEnumerateSessions函数可以返回session的个数,然后就是WTSQuerySessionInformation挨个查询username了,知道了username对应的sessionID再tscon就一切都大功告成了。PS:xp与w7的起始sessionID是不同的,xp从0开始,w7从1开始

 

      短短两句话做完的东西我竟然折腾了一个星期,还真是....菜啊!这个过程中还真是收获了很多东西,第一个就是以后做东西不能太心急了,不能老想着一步到位;第二就是对看英文文档有了信心,以前老觉得自己不行看不了,但这一周看下来觉得自己还没自己想想的那么菜,大部分都还是能看明白的,呵呵,于是一激动买了本英文版的《深入解析windows操作系统》,花了我118.5大洋...

      一直在看别人写得东西,第一次自己写希望能给用到FUS的人一点帮助把,虽然用到的人很少....

 

用到的资料:

1.tscon:http://qsl.livejournal.com/48014.html

2.Executing a Fast User Switch programmatically:http://www.remkoweijnen.nl/blog/2008/11/26/executing-a-fast-user-switch-programmatically-part-1/

3.lerit:对“实现自动切换用户”的一点分析

posted @ 2010-03-07 21:42  序跋  阅读(1949)  评论(8编辑  收藏  举报