Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Как програмно узнать сетевое имя рабочей группы для 9x, NT?   Найти похожие ветки 

 
Style ©   (2004-04-26 18:26) [0]

помогите по сабжу, что-то ничего не найду.


 
Игорь Шевченко ©   (2004-04-26 18:31) [1]

Чьей ?


 
Игорь Шевченко ©   (2004-04-26 18:32) [2]

NetGetJoinInformation


 
Style ©   (2004-04-26 19:50) [3]

TNETSETUP_JOIN_STATUS = (
   NetSetupUnknownStatus = 0,
   NetSetupUnjoined,
   NetSetupWorkgroupName,
   NetSetupDomainName);

function NetGetJoinInformation(
 lpServer: pwidechar;
 lpBuffer: pwidechar;
 BufferType: TNETSETUP_JOIN_STATUS): integer; stdcall;     external "netapi32.dll";

У меня не получается.  Может не правильно импортирую?


 
Rouse_ ©   (2004-04-26 19:57) [4]

Примерно так:

function TMainForm.GetGroup(const CompName: String): String;
var
 CurrRes: TNetResource;
 ParentName: array [0..1] of TNetResource;
 Enum: DWORD;
 Err: Integer;
begin
 with CurrRes do
 begin
   dwScope := RESOURCE_GLOBALNET;
   dwType := RESOURCETYPE_DISK;
   dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
   dwUsage := RESOURCEUSAGE_CONTAINER;
   lpLocalName := "";
   lpRemoteName := PChar("\\" + CompName);
   lpComment := "";
   lpProvider := nil;
 end;
 Enum := SizeOf(ParentName);
 Err := WNetGetResourceParent(@CurrRes, @ParentName, Enum);
 if Err = NO_ERROR then
 begin
   Result := ParentName[0].lpRemoteName;
   if Result = "" then Result := RES_COM_NO;
 end
 else
   MessageDlg(ERR_PAR, mtError, [mbOK], 0);
end;


 
Rouse_ ©   (2004-04-26 20:07) [5]

Да, константы:

const
 RES_COM_NO  = "Отсутствует";
 ERR_PAR     = "Ошибка выполнения WNetGetResourceParent";


 
Style ©   (2004-04-26 20:58) [6]

Спасибо Rouse_!
Только без провайдера не работало...

wnetgetproviderName(WNNC_NET_LANMAN,lpProviderName,Sz )


 
Игорь Шевченко ©   (2004-04-26 22:14) [7]

И на закуску тоже самое, только под NT и недокументированными функциями:
unit main;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfMain = class(TForm)
   Label1: TLabel;
   Edit1: TEdit;
   Label2: TLabel;
   Edit2: TEdit;
   procedure FormCreate(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation
uses
 HSNetApi;

{$R *.dfm}

procedure TfMain.FormCreate(Sender: TObject);
var
 S: PWideChar;
 rc: DWORD;
begin
 rc := NetpGetDomainName(@S);
 if rc = NOERROR then begin
   Edit1.Text := WideCharToString(S);
   NetApiBufferFree(S);
 end else
   Edit1.Text := Format("Error %d", [rc]);
 rc := NetpGetComputerName(@S);
 if rc = NOERROR then begin
   Edit2.Text := WideCharToString(S);
   NetApiBufferFree(S);
 end else
   Edit2.Text := Format("Error %d", [rc]);
end;

end.


unit HSNetApi;

interface
uses
 Windows;

function NetApiBufferFree (lpBuffer : Pointer) : Integer; stdcall;
function NetpGetDomainName (lpBuffer : Pointer) : Integer; stdcall;
function NetpGetComputerName (lpBuffer : Pointer) : Integer; stdcall;

implementation
uses
 SysUtils;

{ NETAPI32.DLL functions }
type
 TNetApiBufferFree =
   function (lpBuffer : Pointer) : Integer; stdcall;
 TNetpGetDomainName =
   function (lpBuffer : Pointer) : Integer; stdcall;
 TNetpGetComputerName =
   function (lpBuffer : Pointer) : Integer; stdcall;

const
 netapidllname = "netapi32.dll";

var
 NetApiDllHandle: THandle;
 _NetApiBufferFree : TNetApiBufferFree;
 _NetpGetDomainName : TNetpGetDomainName;
 _NetpGetComputerName : TNetpGetComputerName;

function InitNetApi : Boolean;
begin
 if NetApiDllHandle = 0 then
   if Win32Platform = VER_PLATFORM_WIN32_NT then begin
     NetApiDllHandle := LoadLibrary(NetApidllname);
     if NetApiDllHandle <> 0 then begin
       @_NetApiBufferFree := GetProcAddress(NetApiDllHandle,
         "NetApiBufferFree");
       @_NetpGetDomainName := GetProcAddress(NetApiDllHandle,
         "NetpGetDomainName");
       @_NetpGetComputerName := GetProcAddress(NetApiDllHandle,
         "NetpGetComputerName");
     end;
   end;
 Result := (NetApiDllHandle <> 0);
end;

function NetApiNotImplemented : Integer;
begin
 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
 Result := ERROR_PROC_NOT_FOUND;
end;

function NetApiBufferFree (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetApiBufferFree) then
   Result := _NetApiBufferFree(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

function NetpGetDomainName (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetpGetDomainName) then
   Result := _NetpGetDomainName(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

function NetpGetComputerName (lpBuffer : Pointer) : Integer; stdcall;
begin
 if InitNetApi and Assigned(_NetpGetComputerName) then
   Result := _NetpGetComputerName(lpBuffer)
 else
   Result := NetApiNotImplemented;
end;

initialization
finalization
 if NetApiDllHandle <> 0 then
   FreeLibrary(NetApiDllHandle);
end.



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.064 c
14-1086176313
Gero
2004-06-02 15:38
2004.06.20
Баннер


1-1086536511
Mishenka
2004-06-06 19:41
2004.06.20
Trim


6-1082989601
Style
2004-04-26 18:26
2004.06.20
Как програмно узнать сетевое имя рабочей группы для 9x, NT?


8-1081162594
niko4543
2004-04-05 14:56
2004.06.20
Flash


14-1085959462
Monster
2004-05-31 03:24
2004.06.20
ZIP archiver