unit DCheckRDP; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TDlgCheckRDP = class(TForm) btnCheck: TButton; mmInfo: TMemo; procedure btnCheckClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var DlgCheckRDP: TDlgCheckRDP; implementation uses Tocsg.Process, Tocsg.WTS, Tocsg.Safe; {$R *.dfm} procedure TDlgCheckRDP.btnCheckClick(Sender: TObject); var PidList: TProcessIdList; i: Integer; sAccount: String; dwSsid: DWORD; begin mmInfo.Clear; Guard(PidList, TProcessIdList.Create); if GetProcessPidsByName('winlogon.exe', PidList) = 0 then MessageBox(Handle, PChar('¿À·ù...1'), PChar(Caption), MB_ICONWARNING or MB_OK); for i := 0 to PidList.Count - 1 do begin dwSsid := 0; if ProcessIdToSessionId(PidList[i], dwSsid) and (dwSsid <> 0) then begin sAccount := WTS_GetUserNameFromSessionID(dwSsid); mmInfo.Lines.Add(IntToStr(dwSsid) + ' : ' + sAccount); end; end; end; end.