1、头文件与静态 动态库
#include "Wtsapi32.h"
#pragma comment(lib, "Wtsapi32.lib")
Wtsapi32.DLL
2、注册(初始化时)
WTSRegisterSessionNotification(m_hWnd, NOTIFY_FOR_ALL_SESSIONS);
或
WTSRegisterSessionNotification(m_hWnd, NOTIFY_FOR_THIS_SESSIONS);
3、卸载(退出时)
WTSUnRegisterSessionNotification(m_hWnd);
4、消息
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
ON_MESSAGE(WM_WTSSESSION_CHANGE, OnSessionChange)
END_MESSAGE_MAP()
5、声明
afx_msg LRESULT OnSessionChange(WPARAM wParam, LPARAM lParam);
6、实现
LRESULT CXXXDlg::OnSessionChange(WPARAM wParam, LPARAM lParam)
{
PWTSSESSION_NOTIFICATION nSessionNotification = (PWTSSESSION_NOTIFICATION)lParam;
LPWSTR * lpUserName = NULL;
DWORD cbReturned = 0;
if (nSessionNotification!=NULL)
{
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,nSessionNotification->dwSessionId,WTSUserName,lpUserName,&cbReturned);
AfxMessageBox(CString(*lpUserName), MB_OK );
}
switch(wParam)
{
case WTS_CONSOLE_CONNECT:
AfxMessageBox(L"控制台登陆", MB_OK );
break;
case WTS_CONSOLE_DISCONNECT:
AfxMessageBox(L"控制台退出", MB_OK );
break;
case WTS_REMOTE_CONNECT:
AfxMessageBox(L"远程连接", MB_OK );
break;
case WTS_REMOTE_DISCONNECT:
AfxMessageBox(L"断开远程连接", MB_OK );
break;
case WTS_SESSION_LOGON:
AfxMessageBox(L"用户登陆", MB_OK );
break;
case WTS_SESSION_LOGOFF:
AfxMessageBox(L"用户退出", MB_OK );
break;
case WTS_SESSION_LOCK:
AfxMessageBox(L"用户锁屏(WIN + L)", MB_OK );
break;
case WTS_SESSION_UNLOCK:
AfxMessageBox(L"用户解锁", MB_OK );
break;
case WTS_SESSION_REMOTE_CONTROL:
AfxMessageBox(L"远程控制", MB_OK );
break;
default:
break;
}
return 0;
}