Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / нужно получить список активных сессий из Windws / 3 сообщений из 3, страница 1 из 1
25.11.2019, 10:22
    #39893788
yemets63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно получить список активных сессий из Windws
на прошлой неделе начинал писать, но в разделе Windows, попробовал не получилось, Гугль потыкал, информации полно, но полезного не нашел.


я получаю список локальных активных СЕССИЙ пользователей командой windows QWINSTA, работает, но не удобно и не достаточно доверия.
поэтому вопрос, как в Delphi получить список активных СЕССИЙ пользователей Windox XP - Windows 10 самим Delphi

в WinAPI посмотрел, он дает только список пользователей, а как определить активна сессия или нет???
...
Рейтинг: 0 / 0
25.11.2019, 11:36
    #39893825
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно получить список активных сессий из Windws
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
type
  WTS_INFO_CLASS = (
    WTSInitialProgram,
    WTSApplicationName,
    WTSWorkingDirectory,
    WTSOEMId,
    WTSSessionId,
    WTSUserName,
    WTSWinStationName,
    WTSDomainName,
    WTSConnectState,
    WTSClientBuildNumber,
    WTSClientName,
    WTSClientDirectory,
    WTSClientProductId,
    WTSClientHardwareId,
    WTSClientAddress,
    WTSClientDisplay,
    WTSClientProtocolType,
    WTSIdleTime,
    WTSLogonTime,
    WTSIncomingBytes,
    WTSOutgoingBytes,
    WTSIncomingFrames,
    WTSOutgoingFrames,
    WTSClientInfo,
    WTSSessionInfo,
    WTSSessionInfoEx,
    WTSConfigInfo,
    WTSValidationInfo,
    WTSSessionAddressV4,
    WTSIsRemoteSession
  );

  WTS_CONNECTSTATE_CLASS = (
    WTSActive,
    WTSConnected,
    WTSConnectQuery,
    WTSShadow,
    WTSDisconnected,
    WTSIdle,
    WTSListen,
    WTSReset,
    WTSDown,
    WTSInit
  );

  PWTS_SESSION_INFO = ^WTS_SESSION_INFO;
  WTS_SESSION_INFO = record
    SessionId: DWORD;
    pWinStationName: LPTSTR;
    State: WTS_CONNECTSTATE_CLASS;
  end;


function WTSOpenServer(pServerName:PChar):THandle;stdcall; external 'Wtsapi32.dll' name 'WTSOpenServerW';

function WTSEnumerateSessions(hServer: THandle; Reserved: DWORD; Version: DWORD; var ppSessionInfo: PWTS_SESSION_INFO; var pCount: DWORD): BOOL; stdcall; external 'Wtsapi32.dll' name 'WTSEnumerateSessionsW';

function WTSQuerySessionInformation(hServer: THandle; SessionId: DWORD; WTSInfoClass: WTS_INFO_CLASS; var ppBuffer: LPTSTR; var pBytesReturned: DWORD): BOOL; stdcall; external 'Wtsapi32.dll' name 'WTSQuerySessionInformationW';

procedure WTSFreeMemory(pMemory: Pointer); stdcall; external 'Wtsapi32.dll';

var
  Server:THandle;
  Sessions, Session: PWTS_SESSION_INFO;
  NumSessions, I, NumBytes: DWORD;
  UserName: LPTSTR;
begin
  Server:=WTSOpenServer('192.168.1.5');

  if not WTSEnumerateSessions(Server, 0, 1, Sessions, NumSessions) then
    RaiseLastOSError;
  try
    if NumSessions > 0 then
    begin
      Session := Sessions;
      for I := 0 to NumSessions-1 do
      begin
        if Session.State = WTSActive then
        begin
          if WTSQuerySessionInformation(Server, Session.SessionId, WTSUserName, UserName, NumBytes) then
          begin
            try
              // здесь используем Session.pWinStationName;
            finally
              WTSFreeMemory(UserName);
            end;
          end;
        end;
        Inc(Session);
      end;
    end;
  finally
    WTSFreeMemory(Sessions);
  end;
end;
...
Рейтинг: 0 / 0
25.11.2019, 11:37
    #39893827
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужно получить список активных сессий из Windws
yemets63,

WTSEnumerateSessions посмотри
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / нужно получить список активных сессий из Windws / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]