Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Domäne auslesen unter Windows98 (https://www.delphipraxis.net/61566-domaene-auslesen-unter-windows98.html)

Ati 23. Jan 2006 10:16


Domäne auslesen unter Windows98
 
Hallo zusammen,

ich mache mal lieber ein neues Thema auf, da das alte ja erledigt ist. Ich schreibe also gerade ein Tool wo etliche Systeminformationen ausgelesen werden sollen. Unter anderem ja auch die Domäne. Den Code den ich dafür benutze geht aber nicht unter W98 (hatte Hr. Seehase aber auch gesagt). Wie muß ich diese Funktion denn aufbauen das mein Programm sowohl auf XP als auch auf einem W98-Rechner funktioniert?

Luckie 23. Jan 2006 10:28

Re: Systeminformationen auslesen auf Xp und W98
 
Hm. Nichts sagender Titel und falsche Sparte. Besser wäre: "Domain auslesen unter Windows 98", dann weiß man um was es geht und die Internetsparte.

Ati 23. Jan 2006 10:34

Re: Systeminformationen auslesen auf Xp und W98
 
Grumel. Mea culpa. Dann wäre ich dankbar wenn man das Thema entsprechend verschiebt. Aber ich hoffe mein Problem ist klar geworden. Meine aktuelle Verison läuft auf XP einwandfrei. Wenn ich das Programm unter W98 starte kommt sofort eine Fehlermeldung bezogen auf "Netapi32.dll".

Luckie 23. Jan 2006 10:45

Re: Systeminformationen auslesen auf Xp und W98
 
Ändere den Titel und ich verschiebe es.

Als aller erstes musst du die Funktionen aus der DLL dynmaisch laden, denn du kannst die DLL nicht statisch linken, sondern musst sie zur Laufzeit laden. Am besten nach einer Überprüfung des Betriebssystems:
Code:
if XP then
  LoadDLLNT
else
  DoWin98Stuff

Ati 23. Jan 2006 14:04

Re: Domäne auslesen unter Windows98
 
So das mit dem Auslesen der Domäne unter W98 habe ich wie folgt gelöst:
Delphi-Quellcode:
function GetComputerWorkgroup: string;
var reg: TNtregistry;
begin
     reg := TNtregistry.create;
     reg.rootkey := HKEY_LOCAL_MACHINE;
     reg.openkey('System\CurrentControlSet\Services\VxD\VNETSUP',true);
     result := reg.readstring('Workgroup');
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(getComputerWorkgroup);

end;
Nur das mit dem dynamischen Einbinden habe ich zwar theoretisch verstanden nur die praktische Umsetzung klappt noch nicht.

Ati

Ati 23. Jan 2006 14:56

Re: Domäne auslesen unter Windows98
 
Nun gut ich bin ein ganzes Stück weiter. Da ich zum erstenmal mit derartigen Sachen arbeite habe ich jetzt folgenden Code zum dynamischen Einbinden:
Delphi-Quellcode:
ype TcsNetWkstaUserGetInfo = function(
    const reserved : PWChar;
    const level   : DWord;
    const bufptr  : Pointer
    ) : NET_API_STATUS; stdcall;

type Tnetapibufferfree = function(
     const buffer :pointer
     ) : NET_API_STATUS; stdcall;

function Domaene (const AItems:TStrings):String;
var
  NetWkstaUserGetInfo: TcsNetWkstaUserGetInfo;
  pwuiWork : PWKSTA_USER_INFO_1;
  Handle: THandle;
  netapibufferfree:Tnetapibufferfree;
begin
  Handle := LoadLibrary('netapi32.dll');
  //if Handle <> 0 then begin
  if NetWkstaUserGetInfo(nil,1,@pwuiWork) = NErr_Success then
  begin
    try
     aitems.Add('Domäne:             '+WideCharToString(pwuiWork.wkui1_logon_domain));
    finally
    NetApiBufferFree(pwuiWork);
    end;
  end;
  //end;
end;
Das ganze ist noch ohne Unterscheidung der Windowsversion. Beim drücken des Buttons soll die Funktion wie folgt aufgerufen werden:
Delphi-Quellcode:
Domaene(Listbox1.items);
Dies ruft jetzt aber eine Fehlermeldung auf. Genauer gesagt eine Zugriffsverletzung. Wie oder was muß ich ändern?

Ati

Christian Seehase 23. Jan 2006 15:21

Re: Domäne auslesen unter Windows98
 
Moin Ati,

Du brauchst ja auch noch die Funktion:

(Achtung: Gross-/Kleinschreibung muss beim Funktionsnamen beachtet werden)
Delphi-Quellcode:
    NetWkstaUserGetInfo := GetProcAddress(Handle,'NetWkstaUserGetInfo');
Ausserdem solltest Du anschliessend noch prüfen, ob das funktioniert hat, bevor Du es benutzt:

Delphi-Quellcode:
if @NetWkstaUserGetInfo <> nil then...

Ati 23. Jan 2006 15:33

Re: Domäne auslesen unter Windows98
 
Delphi-Quellcode:
function Domaene (const AItems:TStrings):String;
var
  NetWkstaUserGetInfo: TcsNetWkstaUserGetInfo;
  pwuiWork : PWKSTA_USER_INFO_1;
  Handle: THandle;
  NetApiBufferFree:TNetApiBufferFree;
begin

  Handle := LoadLibrary('netapi32.dll');
  if Handle <> 0 then begin
  NetWkstaUserGetInfo := GetProcAddress(Handle,'NetWkstaUserGetInfo');
  if @NetWkstaUserGetInfo <> nil then begin
  if NetWkstaUserGetInfo(nil,1,@pwuiWork) = NErr_Success then
  begin
    try
     aitems.Add('Domäne:             '+WideCharToString(pwuiWork.wkui1_logon_domain));
    finally
    NetApiBufferFree(pwuiWork);
    end;
  end;
  end;
  end;
end;
Habe es geändert so wie Du gesagt hast und trotzdem kommt noch die Fehlermeldung.

Ati 23. Jan 2006 15:50

Re: Domäne auslesen unter Windows98
 
Hab es geschafft. Was man für "NetWkstaUserGetInfo" machen muß, muß man schließlich auch für "NetApiBufferFree" machen. Als ich das erledigt hatte kam auch keine Fehlermeldung mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz