pobranie domeny w XP

0

Cześć
Mam dość poważny problem - chodzi mi o pobranie nazwy hosta i domeny
pod XP (zwłaszcza domeny)
Sorki że się tu rozpisze - ale nie chcĘ ale muszem ;)
Chcę obrazowo to przedstawić , a więc jest kod z 98 który pięknie pobiera to co powyżej z jednym MANKAMENTEM > w XP wyświetla tylko host np. Komp-Mariana
zamiast w całości Komp-Mariana.mojadomena.pl

//Pobranie nazwy Hosta (dla XP - host bez domeny) 
FUNCTION TForm1.GetHost98:String;
var
 WSAData :TWSAData;
 nazwa   :array[0..MAX_PATH] of char;
 hostEnt :PHostEnt;
Begin
 Result:= '';
 if WSAStartup($0101, WSAData) = 0 then
    try
      GetHostName(@nazwa, MAX_PATH);
      hostEnt:= GetHostByName(@nazwa);
      Result:= hostEnt^.h_name;                 //pobranie nazwy hosta
    finally
      WSACleanup;                                  //zwalnia bibliotekę WinSock
    end;
End;

Dla Xp zrobiłem takie coś które działa ok:

{ Pobranie nazwy Hosta oraz Domeny (wykorzystanie biblioteki IPHLPAPI.DLL) 
pobiera i w 98 i w XP}
PROCEDURE GetDomena(var NazwaHosta,NazwaDomeny:String);

type
 PTdane = ^TDane;
 TDane = packed record
   nHosta  :array[1..132] of Char;
   nDomeny :array[1..132] of Char;
 end;

var
 dane      :PTDane;
 rozmiar   :Longint;
 wynik     :Integer;
 GetNetPar :function(dane:PTDane; pOutPutLen:PULONG):DWORD; Stdcall;
Begin
 try
   rozmiar:= 0;
   //załadowanie biblioteki...
   uchwytDll:= LoadLibrary('IPHLPAPI.DLL');
   //jeżeli nie załadowana to wyjście...
   if uchwytDll = 0 then
   begin
       Exit;
   end;
   //wskażnik na pobranie funkcji z biblioteki ...
   @GetNetPar:= GetProcAddress (uchwytDll,'GetNetworkParams');
   //zabezpieczenie przed błędem (np. brak funkcji w bibliotece)...
   if @GetNetPar = nil then
   begin
     FreeLibrary(uchwytDll);                              
     Exit;
   end;
   wynik:= GetNetPar(nil,@rozmiar);
   if wynik <> ERROR_BUFFER_OVERFLOW then Exit;
   GetMem(dane,rozmiar);
   try
     wynik:= GetNetPar(dane,@rozmiar);
     if wynik <> ERROR_SUCCESS then Exit;
     with dane^ do
     begin
       NazwaHosta:= Trim (nHosta);
       NazwaDomeny:= Trim (nDomeny);
     end;
   finally
     FreeMem(dane);
   end;
 finally
   //jeżeli biblioteka załadowana to zwalnia tą bibliotekę
   if uchwytDLL <> 0 then FreeLibrary(uchwytDLL);
  end;
End; //ok. - Win98/XP

Zapytacie więc w czym problem - otóż musze pobierać domenę i host w wątku albo
w timerze (nie pytajcie dlaczego muszę non stop ;) )
i wtedy ta procedura robi mi zwieszki programu - dawałem opóżnienia sleep itp.
ale od czasu do czasu robi mi zwis , a to dlatego że w tym samym programie w innym miejscu do czego innego - też mam wywołaną IPHLPAPI.DLL - i to sie widać gryzie.
Powiecie "nie zwalniaj bibli" - ale znowu muszę zwalniać ;)
dam przykład dlaczego :
ponieważ siedzą w pamięci pobrane dane za pierwszym razem (host domena) ,
nawet wtedy kiedy wyjmiesz karte sieciową :)) a powinnno przy takim rozłączeniu
pokazywać brak domeny bo nie jesteś połączony ;)
I trzeba zgasić i ponownie włączyć progsa by odświeżyć dane - a ja to robie zwalnianiem biblioteki
Troche to pomylone ale musze tak mieć i tyle ;)
Pytanie:
Czy jakoś nie można inaczej pobierać pod XP tych danych ? nie korzystając z
IPHLPAPI.DLL ?
Albo coś dodać do tej pierwszej procki dla 98 aby działało też pod XP ?

0

Czy jakoś nie można inaczej pobierać pod XP tych danych ? nie korzystając z
IPHLPAPI.DLL ?

Szukaj w rejestrze
regedit -> Edycja -> Znajdź

Albo coś dodać do tej pierwszej procki dla 98 aby działało też pod XP ?

Było na 100% na forum, ale to też na pewno można z rejestru wyciągnąć

Mam nadzieję pamiętasz o tym, że WinXP Home nie ma możliwości pracy w domenie, może w tym tkwi twój problem [???]

0

Myślałem o tym żeby pobierać te dane z rejestru bo na pewno tam tkwią,
ale czy aby uaktualniają się w czasie gdy komp jest już zalogowany ?

IPHLPAPI.DLL i ta procka z 98 wychwytują mi te zmiany,
problem tylko w tym że to co pod 98 nie da się zastosować w XP
a to co pasuje dla XP i Win 98 , robi mi od czasu do czasu zwieszki.

No ale poszukam w rejestrze - dzięki za rade :)

0

He juz myslalem ze znalazlem odpowiedz na moje pytanie !!

a ta proc jako pierwszy podaje mi nazwe hosta ale domena ?! jest pusta !!!

PS. do postu
Moze globalnie wczytac funkcje (ale piszesz ze nie chcesz !)
calosc w takim razie wydaje sie byc zciemniana (bo u mnie nie dziala wytestuje jeszcze na win 2003 !)

czyli dalej poszukuje ... jak pobrac domene pod xp (bez reg, i bez dodatkowych stron www itp)

0

Jednak Cool_Programming dobrze poradził hehe
a ja dupek uprzedzony do rejestru , robiłem jakieś zagmatwane kody :)
bo z góry się uprzedzałem by w regedita zaglądnąć.

Oto rejestr XP - może sie komuś przydać:

FUNCTION GetRegDomenaXP:String;
var
 reg :TRegistry; 
Begin
 reg:= TRegistry.Create;                     
 try
   reg.RootKey:= HKEY_LOCAL_MACHINE;
   if reg.OpenKey('SYSTEM\ControlSet001\Services\Tcpip\Parameters',False) then
   begin
       if reg.ValueExists('dhcpDomain') then
       Result:= reg.ReadString('dhcpDomain');
       reg.CloseKey;
   end;
 except
   Result:= '';
 end;
 reg.Free;
End;

I co najważniejsze zmiany zachodzą w rejestrach ! przy łączeniu, rozłączeniu , przerwy w sygnale WirLan itd... a o to mi chodziło
jejku, jejku <glowa>

1 użytkowników online, w tym zalogowanych: 0, gości: 1