通过程序来更改本机的工作级名称!高手高高手一定要相助啊(附源码)

SJSOFT 2004-04-18 07:41:01
我了解要设置本机的工作组要用API: NetWkstaSetInfo
看了MSDN的演示程序,也模仿做了,但运行结果始终不成功!
不知道哪位高手做过此例,助小弟一臂之力啊!
//设置工作组名称================================================================
function TKZNetwork.kzSetWorkGroupName(WorkGroupName: string): Integer;
var
PWorkInfo: ^WKSTA_INFO_102;
PWorkGroupName: PWideChar;
begin
GetMem(PWorkInfo, SizeOf(WKSTA_INFO_102));
GetMem(PWorkGroupName, SizeOf(PWorkGroupName));

StringToWideChar(WorkGroupName, PWorkGroupName, SizeOf(WorkGroupName));

PWorkInfo.wki102_platform_id := 0;
PWorkInfo.pwki102_computername := nil;
PWorkInfo.pwki102_langroup := 'kk';
PWorkInfo.wki102_ver_major := 0;
PWorkInfo.wki102_ver_minor := 0;
PWorkInfo.pwki102_lanroot := nil;
PWorkInfo.wki102_logged_on_users := 0;

Result := NetWkstaSetInfo(nil, 102, PWorkInfo, nil);

FreeMem(PWorkInfo);
FreeMem(PWorkGroupName);
end;
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2004-04-18
  • 打赏
  • 举报
回复
function NetWkstaGetInfo(ServerName: LPTSTR; Level: DWORD;
var Buffer: Pointer): NetAPIStatus;
function NetWkstaSetInfo(ServerName: LPTSTR; Level: DWORD;
Buffer: Pointer; var Parm_Err: DWORD): NetAPIStatus;

implementation

const
NetApi32 = 'netapi32.dll';

{ Declare prototypes for the functions. }
type
TNetWkstaGetInfo = function (ServerName: LPTSTR; Level: DWORD;
var Buffer: Pointer): NetAPIStatus; stdcall;
TNetWkstaSetInfo = function (ServerName: LPTSTR; Level: DWORD;
Buffer: Pointer; var Parm_Err: DWORD): NetAPIStatus; stdcall;

{ Variables to hold the pointers to the function entry points. }
var
FDllHandle: THandle = 0;
FNetWkstaGetInfo: TNetWkstaGetInfo;
FNetWkstaSetInfo: TNetWkstaSetInfo;

{ Finds the function entry point, loading the library if required. }
function NetGetProc(ProcName: String): Pointer;
begin
Result := nil;
if FDllHandle = 0 then
begin
{ Check for Windows NT. }
if not IsWinNT then
Exit;
FDllHandle := LoadLibrary(NetApi32);
if FDllHandle = 0 then
raise Exception.CreateFmt('NetGetProc: Error loading library %s error
code %d', [NetApi32, GetLastError]);
end;
if Length(ProcName) > 0 then
begin
Result := GetProcAddress(FDllHandle, ProcName);
if Result = nil then
raise Exception.CreateFmt('NetGetProc: Procedure %s not found in %s
error code %d', [ProcName, NetApi32, GetLastError]);
end;
end;

function NetWkstaGetInfo(ServerName: LPTSTR; Level: DWORD;
var Buffer: Pointer): NetAPIStatus;
begin
{ If this is the first time we call this function, then
find the function entry point in the library. }
if @FNetWkstaGetInfo = nil then
@FNetWkstaGetInfo := NetGetProc('NetWkstaGetInfo');
Result := FNetWkstaGetInfo(ServerName, Level, Buffer);
end;

function NetWkstaSetInfo(ServerName: LPTSTR; Level: DWORD;
Buffer: Pointer; var Parm_Err: DWORD): NetAPIStatus;
begin
if @FNetWkstaSetInfo = nil then
@FNetWkstaSetInfo := NetGetProc('NetWkstaSetInfo');
Result := FNetWkstaSetInfo(ServerName, Level, Buffer, Parm_Err);
end;

end.
hwz_119 2004-04-18
  • 打赏
  • 举报
回复
up

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧