Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определить доменное имя, в которое зашел пользователь

Delphi , Интернет и Сети , Сеть

Определить доменное имя, в которое зашел пользователь

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function GetDomainName: AnsiString;
 type
  WKSTA_INFO_100 = record
    wki100_platform_id: Integer;
    wki100_computername: PWideChar;
    wki100_langroup: PWideChar;
    wki100_ver_major: Integer;
    wki100_ver_minor: Integer;
  end;

  WKSTA_USER_INFO_1 = record
    wkui1_username: PChar;
    wkui1_logon_domain: PChar;
    wkui1_logon_server: PChar;
    wkui1_oth_domains: PChar;
  end;
 type
  //Win9X ANSI prototypes from RADMIN32.DLL and RLOCAL32.DLL 

 TWin95_NetUserGetInfo = function(ServerName, UserName: PChar; Level: DWORD; var
    BfrPtr: Pointer): Integer;
  stdcall;
  TWin95_NetApiBufferFree = function(BufPtr: Pointer): Integer;
  stdcall;
  TWin95_NetWkstaUserGetInfo = function(Reserved: PChar; Level: Integer; var
    BufPtr: Pointer): Integer;
  stdcall;

  //WinNT UNICODE equivalents from NETAPI32.DLL 

 TWinNT_NetWkstaGetInfo = function(ServerName: PWideChar; level: Integer; var
    BufPtr: Pointer): Integer;
  stdcall;
  TWinNT_NetApiBufferFree = function(BufPtr: Pointer): Integer;
  stdcall;

  function IsWinNT: Boolean;
  var
    VersionInfo: TOSVersionInfo;
  begin
    VersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    Result := GetVersionEx(VersionInfo);
    if Result then
      Result := VersionInfo.dwPlatformID = VER_PLATFORM_WIN32_NT;
  end;
 var

  Win95_NetUserGetInfo: TWin95_NetUserGetInfo;
  Win95_NetWkstaUserGetInfo: TWin95_NetWkstaUserGetInfo;
  Win95_NetApiBufferFree: TWin95_NetApiBufferFree;

  WinNT_NetWkstaGetInfo: TWinNT_NetWkstaGetInfo;
  WinNT_NetApiBufferFree: TWinNT_NetApiBufferFree;

  WSNT: ^WKSTA_INFO_100;
  WS95: ^WKSTA_USER_INFO_1;

  EC: DWORD;
  hNETAPI: THandle;
 begin
  try

    Result := '';

    if IsWinNT then
    begin
      hNETAPI := LoadLibrary('NETAPI32.DLL');
      if hNETAPI <> 0 then
      begin @WinNT_NetWkstaGetInfo := GetProcAddress(hNETAPI, 'NetWkstaGetInfo');
          @WinNT_NetApiBufferFree  := GetProcAddress(hNETAPI, 'NetApiBufferFree');

        EC := WinNT_NetWkstaGetInfo(nil, 100, Pointer(WSNT));
        if EC = 0 then
        begin
          Result := WideCharToString(WSNT^.wki100_langroup);
          WinNT_NetApiBufferFree(Pointer(WSNT));
        end;
      end;
    end
    else
    begin
      hNETAPI := LoadLibrary('RADMIN32.DLL');
      if hNETAPI <> 0 then
      begin @Win95_NetApiBufferFree := GetProcAddress(hNETAPI, 'NetApiBufferFree');
          @Win95_NetUserGetInfo := GetProcAddress(hNETAPI, 'NetUserGetInfoA');

        EC := Win95_NetWkstaUserGetInfo(nil, 1, Pointer(WS95));
        if EC = 0 then
        begin
          Result := WS95^.wkui1_logon_domain;
          Win95_NetApiBufferFree(Pointer(WS95));
        end;
      end;
    end;

  finally
    if hNETAPI <> 0 then
      FreeLibrary(hNETAPI);
  end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
  ShowMessage(GetDomainName);
 end;

Функция GetDomainName используется для определения доменного имени пользователя, который зарегистрирован.

Следующий алгоритм работы функции:

  1. Функция сначала проверяет, является ли операционная система Windows NT (или новее) вызовом функции IsWinNT.
  2. Если операционная система Windows NT, функция загружает библиотеку NETAPI32.DLL и получает адреса двух процедур: NetWkstaGetInfo и NetApiBufferFree.
  3. Затем функция вызывает NetWkstaGetInfo с уровнем 100 для получения информации о рабочем станции (компьютере). Функция возвращает указатель на запись (WKSTA_INFO_100), содержащую информацию о рабочей станции, включая доменное имя.
  4. Если операционная система не Windows NT, функция загружает библиотеку RADMIN32.DLL и получает адреса двух процедур: NetApiBufferFree и NetUserGetInfoA.
  5. Затем функция вызывает NetWkstaUserGetInfoA с уровнем 1 для получения информации о пользователе, который зарегистрирован. Функция возвращает указатель на запись (WKSTA_USER_INFO_1), содержащую информацию о пользователе, включая доменное имя.
  6. Функция затем извлекает доменное имя из записи и возвращает его как строку.

Процедура Button1Click просто вызывает функцию GetDomainName и отображает результат в окне сообщений.

Пример вывода:

  • На Windows NT: "example.com"
  • На Windows 95/98: "example.local"

Обратите внимание, что это код quite old (от 2001 года) и может не работать на современных системах или с новыми версиями Windows.

Определить доменное имя, в которое зашел пользователь, можно с помощью функции GetDomainName, которая использует API-интерфейсы NetWkstaGetInfo и NetUserGetInfo для определения доменного имени.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сеть ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:32:33/0.0033490657806396/0