AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Alle User eines Rechners auflisten
Thema durchsuchen
Ansicht
Themen-Optionen

Alle User eines Rechners auflisten

Ein Thema von CalganX · begonnen am 18. Jan 2003 · letzter Beitrag vom 23. Jan 2003
Antwort Antwort
Seite 4 von 4   « Erste     234   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#31
  Alt 23. Jan 2003, 13:56
Moin Chris,

deshalb hatte ich auch meine Deklarationen mit angegeben.
In die Jedi Sourcen habe ich noch nicht reingeschaut, deshalb weiss ich nicht, welche "Philosophie" dort vertreten wird, was die Deklaration der APIs angeht.

Ich halte mich nur möglichst an die Vorgaben aus dem PSDK, damit ich auch die Samples möglichst einfach nutzen kann.

Borland selber deklariert an den Stellen, an denen Werte von der Funktion geschrieben werden sollen die Parameter als var, was dann u.a. zur Folge hat, dass man sich gelegentlich Dummy Variablen anlegen muss, wenn man einen Parameter nicht nutzen will (also auf 0 oder nil setzen muss), was bei einem var Parameter ja nur geht, wenn eine entsprechende Variable angegeben wird.

Wichtig:
Wenn das Programm auch unter 9x/ME gestartet werden soll, müssen die Funktionen dynamisch importiert werden, und nicht, wie angegeben, statisch, damit sie ggf. weggelassen werden können.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#32
  Alt 23. Jan 2003, 13:58
Was meinst du mit "dynamisch" import? Meinst du Compilerschalter?

Chris
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#33
  Alt 23. Jan 2003, 14:08
Zitat von Chakotay1308:
Was meinst du mit "dynamisch" import? Meinst du Compilerschalter?

Chris
Es gibt zwei Möglichkeiten,, Funktionen aus DLLs zu importieren. Näheres bei delphi-source.de
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#34
  Alt 23. Jan 2003, 14:23
Moin Chris,

nein, ich meine Damit, dass Du einen Typ deklarierst, der der Funktionsdeklaration entspricht, dann eine Variable diese Typs, die entsprechende DLL aus der die Funktion stammt mittels LoadLibrary/LoadLibraryEx lädst, und dann die Adresse der Funktion mit GetProcAddress der Variablen zuweist.
NetUserEnum (und die Netapi32.dll) gibt's auf der 9x Schiene nicht, so dass bei statischem Import das Programm beim Starten sonst gleich mit einer Fehlermeldung abbricht, wenn die, statisch importierte, Funktion irgendwo angesprochen wird.

So könnte das Ganze dann mit dynamischem Import der Funktionen aussehen:

Delphi-Quellcode:
const
  MAX_PREFERRED_LENGTH = DWORD(-1);
  FILTER_NORMAL_ACCOUNT = $0002;
  NERR_Success = 0;

type
  NET_API_STATUS = DWORD;

  TcsNetUserEnum = function(
    const servername : PWChar;
    const level : DWord;
    const filter : DWord;
    const bufptr : Pointer;
    const prefmaxlen : DWord;
    const entriesread : PDWord;
    const totalentries : PDWord;
    const resume_handle : PDWord
    ) : NET_API_STATUS; stdcall;

  TcsNetApiBufferFree = function(
    const Buffer : Pointer
    ) : NET_API_STATUS; stdcall;

  PUSER_INFO_0 = ^USER_INFO_0;
  USER_INFO_0 =
    packed record
      usri0_name : PWChar;
    end;

var
  NetUserEnum : TcsNetUserEnum;
  NetApiBufferFree : TcsNetApiBufferFree;
  hDLL : DWORD;

  pBuffer : PUSER_INFO_0;
  pWork : PUSER_INFO_0;
  dwEntriesRead : DWORD;
  dwTotalEntries : DWORD;
  i : integer;

begin
  hDLL := LoadLibrary('netapi32.dll');
  if hDLL = 0 then
  begin
    exit;
  end;
  try
    NetUserEnum := GetProcAddress(hDLL,'NetUserEnum');
    if @NetUserEnum = nil then
    begin
      exit;
    end;
    NetApiBufferFree := GetProcAddress(hDLL,'NetApiBufferFree');
    if @NetApiBufferFree = nil then
    begin
      exit;
    end;
    // Nutzen der Funktion
    if NetUserEnum(nil,0,FILTER_NORMAL_ACCOUNT,@pBuffer,MAX_PREFERRED_LENGTH,@dwEntriesRead,@dwTotalEntries,nil) = NERR_Success then
    begin
      try
        ListBox1.Items.Clear;
        pWork := pBuffer;
        for i := 1 to dwEntriesRead do
        begin
          ListBox1.Items.Add(pWork.usri0_name);
          inc(pWork);
        end;
      finally
        NetApiBufferFree(pBuffer);
      end;
    end;
  finally
    FreeLibrary(hDLL);
  end;
end;
Wobei man natürlich den Import, bzw. Freigabe der DLL auch im initialization/finalization Abschnitt erledigen kann (sollte), und das dann in Abhängigkeit des Betriebssystemes, auf dem das Programm läuft.
Was, gerade bei den Netxxx Funktionen, oft eine Beschränkung bedeutet, da nicht alle dieser Funktionen unter 9x zur Verfügung stehen. (z.B. NetUserEnum)

Für 9x muss man sich dann ggf. noch eine Unterscheidung der Datenstrukturen einfallen lassen, da die MS Deklarationen sich nur in der Gross-/Kleinschreibung unterscheiden, was in Pascal ja nicht funktioniert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz