Как определить, работает ли удаленный рабочий стол с заданным IP-адресом? - PullRequest
3 голосов
/ 17 октября 2010

Я хочу узнать, какой IP может быть удаленным.(удаленный рабочий стол)

Например, я установил действительный IP-адрес моей сети в поле ввода, и программа сообщает, что он может быть удаленным или нет.

Ответы [ 3 ]

4 голосов
/ 17 октября 2010

чтобы определить, является ли IP-адрес сервером удаленного рабочего стола, вы можете использовать функцию WTSEnumerateServers.

выполните следующие действия

  • перечислить серверы в сетевом домене, используя функцию WTSEnumerateServers
  • когда вы получаете список серверов, преобразуйте имя каждого сервера в IP-адрес
  • Теперь сравните IP-адрес каждого сервера с проверяемым IP.

см. Этот пример, который показывает, как использовать функцию WTSEnumerateServers

uses
  Classes,
  Windows,
  SysUtils;

type
PWTS_SERVER_INFO = ^WTS_SERVER_INFO;
_WTS_SERVER_INFO = packed record
pServerName:LPTSTR;
end;
WTS_SERVER_INFO = _WTS_SERVER_INFO;
WTS_SERVER_INFO_Array  = Array [0..0] of WTS_SERVER_INFO;
PWTS_SERVER_INFO_Array =^WTS_SERVER_INFO_Array;

{$IFDEF UNICODE}
function WTSEnumerateServers( pDomainName: LPTSTR; Reserved: DWORD; Version: DWORD; ppServerInfo: PWTS_SERVER_INFO; pCount: PDWORD):BOOLEAN; stdcall; external 'wtsapi32.dll'  name 'WTSEnumerateServersW';
{$ELSE}
function WTSEnumerateServers( pDomainName: LPTSTR; Reserved: DWORD; Version: DWORD; ppServerInfo: PWTS_SERVER_INFO; pCount: PDWORD):BOOLEAN; stdcall; external 'wtsapi32.dll'  name 'WTSEnumerateServersA';
{$ENDIF}
procedure WTSFreeMemory(pMemory:Pointer);stdcall; external 'wtsapi32.dll' name 'WTSFreeMemory';

procedure GetRemoteDesktopsList(const Domain:PChar;const Servers:TStrings);
var
ppServerInfo : PWTS_SERVER_INFO_Array;//PWTS_SERVER_INFO;
pCount       : DWORD;
i            : integer;
begin
  Servers.Clear;
  ppServerInfo:=nil;
  try
    if WTSEnumerateServers(Domain,0,1,PWTS_SERVER_INFO(@ppServerInfo),@pCount) then
      for i := 0 to pCount - 1 do
        Servers.Add(ppServerInfo^[i].pServerName)
    else
    Raise Exception.Create(SysErrorMessage(GetLastError));
  finally
    if ppServerInfo<>nil then
    WTSFreeMemory(ppServerInfo);
  end;
end;

и затем звоните вот так

   Servers:=TStringList.Create;
    try
     GetRemoteDesktops(nil,Servers); //using nil for the current domain.
     //now  process the list and do your stuff

    finally
     Servers.Free;
    end;
0 голосов
/ 18 октября 2010

Это зависит от того, чего вы пытаетесь достичь: хотите ли вы увидеть, работает ли сервер из вашей сети? Если это так, попробуйте мой Terminal Server Ping Tool . В противном случае вы можете проверить, прослушивает ли что-либо порт 3389, например, с помощью Indy.

0 голосов
/ 17 октября 2010

Найдите компонент Delphi на удаленном рабочем столе и попытайтесь подключиться.

...