На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Таблица NetBIOS-имен удаленных компьютер , WinApi
      Вот лови примерчик:

      ExpandedWrap disabled
        ////////////////////////////////////////////////////////////////////////////////
        //
        //  ****************************************************************************
        //  * Unit Name : Unit1
        //  * Purpose   : Демо получение информации NETBIOS именах компьютера
        //                (аналог nbtstat -a)
        //  * Author    : Александр (Rouse_) Багель
        //  * Version   : 1.00
        //  ****************************************************************************
        //
         
        unit Unit1;
         
        interface
         
        uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
          Dialogs, Nb30, StdCtrls;
         
        type
          TNetbiosInfo = record
            AdapterStatus: TAdapterStatus;
            NameBuffer: Array [0..30] of TNameBuffer;
          end;
         
          TForm1 = class(TForm)
            Edit1: TEdit;
            Button1: TButton;
            Memo1: TMemo;
            procedure Button1Click(Sender: TObject);
          private
            procedure GetNetBiosNames(const Addr: String);
          end;
         
        var
          Form1: TForm1;
         
        implementation
         
        {$R *.dfm}
         
        procedure TForm1.GetNetBiosNames(const Addr: String);
        var
          NCB: TNCB;
          Enum: TLanaEnum;
          NetbiosInfo: TNetbiosInfo;
          I, A: Integer;
          Ends: Byte;
        begin
          FillChar(NCB, SizeOf(TNCB), #0);
          NCB.ncb_command := Char(NCBENUM);
          NCB.ncb_buffer := @Enum;
          NCB.ncb_length := SizeOf(TLanaEnum);
          if Netbios(@NCB) = Char(NRC_GOODRET) then
            for I := 0 to Integer(Enum.length) - 1 do
            begin
              FillChar(NCB, SizeOf(TNCB), #0);
              NCB.ncb_lana_num := Enum.lana[I];
              NCB.ncb_command := Char(NCBRESET);
              if Netbios(@NCB) = Char(NRC_GOODRET) then
              begin
                FillChar(NetbiosInfo, SizeOf(TNetbiosInfo), #0);
                NCB.ncb_command := Char(NCBASTAT);
                Move(Addr[1], NCB.ncb_callname[0], Length(Addr));
                NCB.ncb_buffer := @NetbiosInfo;
                NCB.ncb_length := SizeOf(TNetbiosInfo);
                if Netbios(@NCB) = Char(NRC_GOODRET) then
                  for A := 0 to NetbiosInfo.AdapterStatus.name_count - 1 do
                  begin
                    Ends := Byte(NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1]);
                    NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1] := #32;
                    Memo1.Lines.Add(Format('%s <%s>',
                      [String(NetbiosInfo.NameBuffer[A].name),
                        IntToHex(Ends, 2)]));
                  end;
              end;
            end;
        end;
         
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          GetNetBiosNames(Edit1.Text);
        end;
         
        end.


      Автор: Rouse_
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0146 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:27 GMT ]