摘要
最近的一个项目中需要集成终端管理器的功能,这样就用到了WTS(Windows Terminal Services)系列函数。实际的项目中我把相关的功能封装到了一个组件中,这里把这部分功能分离出来,介绍WTS系列函数的使用。本程序完成了 Windows 2000 Server终端服务管理器的基本功能。
功能
- 服务器当前所有会话列表
- 列出指定会话所启用的所有进程,和登陆会话的相关信息(用户名,IP地址,分辨率等)
- 结束指定会话的指定进程
- 断开,复位指定的会话
- 给指定的会话发送消息
编译
我的编译环境是:Windows 2000 Server ,VC6.0
使用WTS函数,需要先做下面的工作:
- 在StdAfx.h文件中加入:
#include "Wtsapi32.h" - 在Project->Settings->Link的Object/Library modules中加入:Wtsapi32.lib
WTS函数说明
下面说明WTS系列的15个函数,其中不包括虚拟通道部分。
函数 | 功能 |
---|---|
ProcessIdToSessionId | 得到与进程ID对应的终端服务会话ID |
WTSCloseServer | 关闭一个打开的终端服务器句柄 |
WTSDisconnectSession | 断开指定的终端服务会话 |
WTSEnumerateProcesses | 枚举指定终端服务器上的所有活动进程 |
WTSEnumerateSessions | 得到指定终端服务器的会话列表 |
WTSFreeMemory | 释放终端服务函数分配的内存 |
WTSLogoffSession | 复位指定的终端服务会话 |
WTSOpenServer | 打开一个指定终端服务器的句柄 |
WTSQuerySessionInformation | 得到指定的终端服务会话的相关信息 |
WTSQueryUserConfig | 得到在域控制器或终端服务器上为指定用户配置的信息 |
WTSSendMessage | 给指定的终端会话发送消息,客户端的桌面将显示出一个消息对话框 |
WTSSetUserConfig | 改变在域控制器或终端服务器上为指定用户配置的信息 |
WTSShutdownSystem | 关闭(也可以重新启动) 指定的终端服务器 |
WTSTerminateProcess | 结束指定终端服务器上的指定进程 |
WTSWaitSystemEvent | 等待一个终端服务事件 |
演示程序中使用了上面的大部分函数,具体的使用方法参看源代码。值得说明的是演示程序中没有用到的两个函数WTSQueryUserConfig和WTSSetUserConfig函数,这对函数可以为服务器上的用户设置很多有用属性,比如登陆环境,连接时间,登录后默认打印机等等,具体的说明见MSDN。 我的工程中需要为Windows下建立的用户设置登陆环境,我用了很长时间发现ADSI的终端扩展函数里可以完成这个功能,但是ADSI的终端扩展函数只 能用在Windows 2003 Server中,而且相应的SDK还没有出来(至少我没有找到),最后还是在用这个函数得到了解决。
其他
演示程序中使用了切分窗口,对于不知道如何处理切分窗口中的消息映射和事件响应的朋友可以在演示程序中找到答案。