我了解要设置本机的工作组要用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;

解决方案 »

  1.   

    function NetWkstaGetInfo(ServerName: LPTSTR; Level: DWORD;
      var Buffer: Pointer): NetAPIStatus;
    function NetWkstaSetInfo(ServerName: LPTSTR; Level: DWORD;
      Buffer: Pointer; var Parm_Err: DWORD): NetAPIStatus;implementationconst
      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.