![]() |
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? |
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.
|
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".
|
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 |
Re: Domäne auslesen unter Windows98
So das mit dem Auslesen der Domäne unter W98 habe ich wie folgt gelöst:
Delphi-Quellcode:
Nur das mit dem dynamischen Einbinden habe ich zwar theoretisch verstanden nur die praktische Umsetzung klappt noch nicht.
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; Ati |
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:
Das ganze ist noch ohne Unterscheidung der Windowsversion. Beim drücken des Buttons soll die Funktion wie folgt aufgerufen werden:
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;
Delphi-Quellcode:
Dies ruft jetzt aber eine Fehlermeldung auf. Genauer gesagt eine Zugriffsverletzung. Wie oder was muß ich ändern?
Domaene(Listbox1.items);
Ati |
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:
Ausserdem solltest Du anschliessend noch prüfen, ob das funktioniert hat, bevor Du es benutzt:
NetWkstaUserGetInfo := GetProcAddress(Handle,'NetWkstaUserGetInfo');
Delphi-Quellcode:
if @NetWkstaUserGetInfo <> nil then...
|
Re: Domäne auslesen unter Windows98
Delphi-Quellcode:
Habe es geändert so wie Du gesagt hast und trotzdem kommt noch die Fehlermeldung.
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; |
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