您好您可以使用 WTSEnumerateSessions api 来检查用户是否在 rdp 模式下运行。
var pSessionInfo: PWTS_SESSION_INFOW;
SessionInfo: WTS_SESSION_INFO;
SessionCount: Cardinal;
i: Integer;
begin
try
Result := -1;
if WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, pSessionInfo, SessionCount) then
begin
SessionInfo := pSessionInfo^;
for i := 0 to SessionCount - 1 do
begin
if SessionInfo.State = WTSActive then
begin
if Pos('rdp', LowerCase(SessionInfo.pWinStationName)) <> 0 then
ShowMessage('this is rdp');
end;
pSessionInfo := PWTS_SESSION_INFOW(Pointer(Integer(pSessionInfo) + SizeOf(WTS_SESSION_INFOW)));
SessionInfo := pSessionInfo^;
end;
end;
finally
WTSFreeMemory(PSessionInfo);
end;
希望这能回答你的问题。顺便说一句,delphi 没有 WTSEnumerateSessions 的导入,因此您必须手动导入它,或者下载 Jwa 库。该函数在 JwaWtsApi32.pas 中标明