Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit NetSessionEnum (https://www.delphipraxis.net/3008-problem-mit-netsessionenum.html)

hitzi 18. Feb 2003 09:17


Problem mit NetSessionEnum
 
Delphi-Quellcode:
var EntriesRead, TotalAvail: DWORD;
  Buf: Pointer;
  TempBuf:PSessionInfo502;
  i:integer;
begin
 NetSessionEnum('', nil, nil, 502,
    Buf, MAX_PREFERRED_LENGTH, EntriesRead, TotalAvail, nil);
 TempBuf:=Buf;
 for i:=1 to EntriesRead do begin
  re1.Lines.Add(TempBuf^.sesi502_cname); //Ausgabe in einen Richedit
  re1.Lines.Add(TempBuf^.sesi502_username); //Ausgabe in einen Richedit
  Inc(TempBuf);
 end;
 NetApiBufferFree(Buf);
end;
Warum wird nur der 1. Buchstabe des Computernamens (cname) und auch nur der 1. Buchstabe des Usernamen (username) angezeigt?

MfG Hitzi

janjan 18. Feb 2003 09:34

Ich bin mir nicht ganz sicher, aber probiers mal mit:

Delphi-Quellcode:
re1.Lines.Add(string(TempBuf^.sesi502_cname));

hitzi 18. Feb 2003 10:12

Hilft leider auch nicht weiter :(
Immer noch das gleiche Problem.


MfG Hitzi

janjan 18. Feb 2003 10:20

Kuck mal hier:

http://delphi.mastak.ru/articles/netmon/

da wird NetSessionEnum ein bisschen anders aufgerufen:

Delphi-Quellcode:
procedure TMainForm.btnGetSessionsClick(Sender: TObject);
var
  OS: Boolean;
  FLibHandle : THandle;
  SessionInfo50: array [0..512] of TSessionInfo50;
  SessionInfo502 : PSessionInfo502Array;
  TotalEntries,EntriesReadNT: DWORD;
  EntriesRead,TotalAvial: Word;
  i:integer;
begin
  lvSessions.Items.Clear;

  if not IsNT(OS) then Close; //Выясняем тип системы

  if OS then begin //Код для NT
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetSessionEnumNT := GetProcAddress(FLibHandle, 'NetSessionEnum');
    if not Assigned(NetSessionEnumNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    SessionInfo502 := nil;
    if NetSessionEnumNT(nil,nil,nil,502,@SessionInfo502,DWORD(-1),@entriesreadNT, @totalentries, nil)=0 then
    for i:=0 to EntriesReadNT-1 do
    begin
      with lvSessions.Items.Add do //Заполнение данными из структуры
      begin
        Caption := string(SessionInfo502^[i].sesi502_cname); //Имя компьютера
        SubItems.Add(SessionInfo502^[i].sesi502_username);  //Имя пользователя
        SubItems.Add(IntToStr(SessionInfo502^[i].sesi502_num_opens)); //Открытых ресурсов
     SubItems.Add(CardinalToTimeStr(SessionInfo502^[i].Sesi502_Time)); //Время активное
     SubItems.Add(CardinalToTimeStr(SessionInfo502^[i].sesi502_idle_time)); //Время не активное
      end;
    end;

hitzi 18. Feb 2003 10:44

Danke für den Link.

Der wird mir weiter helfen, da das dort vorgestellte Programm funktioniert.

MfG Hitzi

Christian Seehase 22. Feb 2003 01:26

Moin Hitzi,

wenn ich mir so Deinen Sourcecode ansehe:

Wenn Du die Funktion selber deklariert hast, wäre es interessant wie, wenn Du eine vorgefertigte Deklaration verwendet hast: Welche?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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