?? u_sysset.pas
字號:
unit U_SysSet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TNetResourceArray = ^TNetResource;//網絡類型的數組
const
MaxEntries = 250;
type
TF_SysSet = class(TForm)
bbtnSure: TBitBtn;
bbtnCan: TBitBtn;
RadioGroup1: TRadioGroup;
cbIsShowLoginFrm: TCheckBox;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
cbbServerName: TComboBox;
cbbDb: TComboBox;
cbbSubmitLogTb: TComboBox;
cbbDeliverLogTb: TComboBox;
procedure bbtnCanClick(Sender: TObject);
procedure editOnceShowCountKeyPress(Sender: TObject; var Key: Char);
procedure cbbServerNameSelect(Sender: TObject);
procedure cbbDbSelect(Sender: TObject);
private
Function GetServerList(var Computers: TStringList): DWORD;
function GetUsers(GroupName: string; var List: TStringList): Boolean;
Procedure SetcbbServerName;
Procedure SetcbbServerNameList;
{ Private declarations }
public
{ Public declarations }
end;
var
F_SysSet: TF_SysSet;
Procedure InitF_SysSet;
implementation
Uses U_OtherPublicPack,U_DBPublicPack,U_PulicPack,U_StringPublicPack, U_main,
StdConvs, U_RecordStruct;
{$R *.dfm}
Procedure InitF_SysSet;
begin
F_SysSet:=TF_SysSet.Create(nil);
try
F_SysSet.ShowModal;
Finally
FreeAndNil(F_SysSet);
end;
end;
procedure TF_SysSet.bbtnCanClick(Sender: TObject);
begin
Close;
end;
procedure TF_SysSet.editOnceShowCountKeyPress(Sender: TObject;
var Key: Char);
begin
if not IsValidChar(Key) then
begin
Key := #0;
MessageBeep(0)
end;
if Key <> #0 then inherited KeyPress(Key);
end;
function TF_SysSet.GetServerList(Var Computers: TStringList): DWORD;
var
EnumWorkGroupHandle, EnumComputerHandle: THandle;
EnumError: DWORD;
Network: TNetResource;
WorkGroupEntries, ComputerEntries: DWORD;
EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
EnumBufferLength: DWORD;
I, J: DWORD;
begin
Computers.Clear;
FillChar(Network, SizeOf(Network), 0);
with Network do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONTAINER;
end;
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);
if EnumError = NO_ERROR then
begin
WorkGroupEntries := MaxEntries;
EnumBufferLength := SizeOf(EnumWorkGroupBuffer);
EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength);
if EnumError = NO_ERROR then
begin
for I := 1 to WorkGroupEntries do
begin
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);
if EnumError = NO_ERROR then
begin
ComputerEntries := MaxEntries;
EnumBufferLength := SizeOf(EnumComputerBuffer);
EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength);
if EnumError = NO_ERROR then
for J := 1 to ComputerEntries do
Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 1, Length(EnumComputerBuffer[J].lpRemoteName)));
WNetCloseEnum(EnumComputerHandle);
end;
end;
end;
WNetCloseEnum(EnumWorkGroupHandle);
end;
if EnumError = ERROR_NO_MORE_ITEMS then
EnumError := NO_ERROR;
Result := EnumError;
end;
function TF_SysSet.GetUsers(GroupName: string;
var List: TStringList): Boolean;
var
NetResource : TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWord;
Ind : Integer;
lphEnum : THandle;
Temp : TNetResourceArray;
Begin
buf:=nil;
Result := False;
List.Clear;
FillChar(NetResource, SizeOf(NetResource), 0);//初始化網絡層次信息
NetResource.lpRemoteName := @GroupName[1];//指定工作組名稱
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//類型為服務器(工作組)
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK;//列舉文件資源信息
//獲取指定工作組的網絡資源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then Exit; //執行失敗
While True Do//列舉指定工作組的網絡資源
Begin
Count := $FFFFFFFF;//不限資源數目
BufSize := 8192;//緩沖區大小設置為8K
GetMem(Buf, BufSize);//申請內存,用于獲取工作組信息
//獲取計算機名稱
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If Res = ERROR_NO_MORE_ITEMS Then break;//資源列舉完畢
If (Res <> NO_ERROR) then Exit;//執行失敗
Temp := TNetResourceArray(Buf);
For Ind := 0 to Count - 1 do//列舉工作組的計算機名稱
Begin
//獲取工作組的計算機名稱,+2表示刪除"\\",如\\wangfajun=>wangfajun
List.Add(Temp^.lpRemoteName + 2);
Inc(Temp);
End;
End;
Res := WNetCloseEnum(lphEnum);//關閉一次列舉
If Res <> NO_ERROR Then exit;//執行失敗
Result := True;
FreeMem(Buf);
end;
procedure TF_SysSet.SetcbbServerName;
Var
iList,jList:TStrings;
i,j:Integer;
begin
cbbServerName.Clear;
iList:=TStringList.Create;
jList:=TStringList.Create;
jList.Clear;
GetServerList(TStringList(iList));
For i:=0 to iList.Count-1 do
begin
GetUsers(iList.Strings[i],TStringList(jList));
For j:=0 to jList.Count-1 do
cbbServerName.Items.Add(jList.Strings[j]);
end;
end;
procedure TF_SysSet.cbbServerNameSelect(Sender: TObject);
begin
//ServerName := cbbServerName.Text;
GetAllDateBaseName(cbbDb.Items,cbbServerName.Text);
end;
procedure TF_SysSet.cbbDbSelect(Sender: TObject);
begin
//DataBaseName := cbbDB.Text;
GetAllTableName(cbbServerName.Text,cbbDB.Text,cbbDeliverLogTb.Items);
GetAllTableName(cbbServerName.Text,cbbDB.Text,cbbSubmitLogTb.Items);
end;
procedure TF_SysSet.SetcbbServerNameList;
begin
cbbServerName.Clear;
ExtractStrings([','],[],Pchar(ServerNameList),cbbServerName.Items);
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -