![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как програмно узнать сетевое имя рабочей группы для 9x, NT?
Style © (2004-04-26 18:26:00)помогите по сабжу, что-то ничего не найду.
Игорь Шевченко (2004-04-26 22:14:00) [1]И на закуску тоже самое, только под 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.
Style (2004-04-26 20:58:00) [2]Спасибо Rouse_!
Только без провайдера не работало...
wnetgetproviderName(WNNC_NET_LANMAN,lpProviderName,Sz )
Rouse_ (2004-04-26 20:07:00) [3]Да, константы:
const
RES_COM_NO = 'Отсутствует';
ERR_PAR = 'Ошибка выполнения WNetGetResourceParent';
Rouse_ (2004-04-26 19:57:00) [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;
Style (2004-04-26 19:50:00) [5]TNETSETUP_JOIN_STATUS = (
NetSetupUnknownStatus = 0,
NetSetupUnjoined,
NetSetupWorkgroupName,
NetSetupDomainName);
function NetGetJoinInformation(
lpServer: pwidechar;
lpBuffer: pwidechar;
BufferType: TNETSETUP_JOIN_STATUS): integer; stdcall; external 'netapi32.dll';
У меня не получается. Может не правильно импортирую?
Игорь Шевченко (2004-04-26 18:32:00) [6]NetGetJoinInformation
Игорь Шевченко (2004-04-26 18:31:00) [7]Чьей ?