Code: |
unit Wtsapi;
interface
{ (c) By Thomas Stutz 10. April 02 }
uses Windows;
const // The WM_WTSSESSION_CHANGE message notifies applications of changes in session state. WM_WTSSESSION_CHANGE = $2B1;
// wParam values: WTS_CONSOLE_CONNECT = 1; WTS_CONSOLE_DISCONNECT = 2; WTS_REMOTE_CONNECT = 3; WTS_REMOTE_DISCONNECT = 4; WTS_SESSION_LOGON = 5; WTS_SESSION_LOGOFF = 6; WTS_SESSION_LOCK = 7; WTS_SESSION_UNLOCK = 8; WTS_SESSION_REMOTE_CONTROL = 9;
// Only session notifications involving the session attached to by the window // identified by the hWnd parameter value are to be received. NOTIFY_FOR_THIS_SESSION = 0; // All session notifications are to be received. NOTIFY_FOR_ALL_SESSIONS = 1;
function RegisterSessionNotification(Wnd: HWND; dwFlags: DWORD): Boolean; function UnRegisterSessionNotification(Wnd: HWND): Boolean; function GetCurrentSessionID: Integer;
implementation
function RegisterSessionNotification(Wnd: HWND; dwFlags: DWORD): Boolean; // The RegisterSessionNotification function registers the specified window // to receive session change notifications. // Parameters: // hWnd: Handle of the window to receive session change notifications. // dwFlags: Specifies which session notifications are to be received: // (NOTIFY_FOR_THIS_SESSION, NOTIFY_FOR_ALL_SESSIONS) type TWTSRegisterSessionNotification = function(Wnd: HWND; dwFlags: DWORD): BOOL; stdcall; var hWTSapi32dll: THandle; WTSRegisterSessionNotification: TWTSRegisterSessionNotification; begin Result := False; hWTSAPI32DLL := LoadLibrary('Wtsapi32.dll'); if (hWTSAPI32DLL > 0) then begin try @WTSRegisterSessionNotification := GetProcAddress(hWTSAPI32DLL, 'WTSRegisterSessionNotification'); if Assigned(WTSRegisterSessionNotification) then begin Result:= WTSRegisterSessionNotification(Wnd, dwFlags); end; finally if hWTSAPI32DLL > 0 then FreeLibrary(hWTSAPI32DLL); end; end; end;
function UnRegisterSessionNotification(Wnd: HWND): Boolean; // The RegisterSessionNotification function unregisters the specified window // Parameters: // hWnd: Handle to the window type TWTSUnRegisterSessionNotification = function(Wnd: HWND): BOOL; stdcall; var hWTSapi32dll: THandle; WTSUnRegisterSessionNotification: TWTSUnRegisterSessionNotification; begin Result := False; hWTSAPI32DLL := LoadLibrary('Wtsapi32.dll'); if (hWTSAPI32DLL > 0) then begin try @WTSUnRegisterSessionNotification := GetProcAddress(hWTSAPI32DLL, 'WTSUnRegisterSessionNotification'); if Assigned(WTSUnRegisterSessionNotification) then begin Result:= WTSUnRegisterSessionNotification(Wnd); end; finally if hWTSAPI32DLL > 0 then FreeLibrary(hWTSAPI32DLL); end; end; end;
function GetCurrentSessionID: Integer; // Getting the session id from the current process type TProcessIdToSessionId = function(dwProcessId: DWORD; pSessionId: DWORD): BOOL; stdcall; var ProcessIdToSessionId: TProcessIdToSessionId; hWTSapi32dll: THandle; Lib : THandle; pSessionId : DWord; begin Result := 0; Lib := GetModuleHandle('kernel32'); if Lib <> 0 then begin ProcessIdToSessionId := GetProcAddress(Lib, '1ProcessIdToSessionId'); if Assigned(ProcessIdToSessionId) then begin ProcessIdToSessionId(GetCurrentProcessId(), DWORD(@pSessionId)); Result:= pSessionId; end; end; end;
end. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!