1. 程式人生 > >【框架-MFC】系統登陸、‘遠端控制切換使用者訊息 WM_WTSSESSION_CHANGE

【框架-MFC】系統登陸、‘遠端控制切換使用者訊息 WM_WTSSESSION_CHANGE

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(C

XXXDlg, 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;
}