网络小工具 ShareView

类别:Delphi 点击:0 评论:0 推荐:

版权声明:

本文由Lyris完成,首发于CSDN,作者保留中文版权。
未经许可,不得使用于任何商业用途。
欢迎转载,但请保持文章及版权声明完整。
如需联络请发邮件:[email protected]


unit NetMonConsts;

interface

uses Windows;

type
  TShareInfo2 = packed record
    shi2_netname: PWChar;
    shi2_type: DWORD;
    shi2_remark: PWChar;
    shi2_permissions: DWORD;
    shi2_max_uses: DWORD;
    shi2_current_uses: DWORD;
    shi2_path: PWChar;
    shi2_passwd: PWChar;
  end;
  PShareInfo2 = ^TShareInfo2;
  TShareInfo2Array = array[0..512] of TShareInfo2;
  PShareInfo2Array = ^TShareInfo2Array;

type
  TShareInfo50 = packed record
    shi50_netname: array[0..12] of Char;
    shi50_type: Byte;
    shi50_flags: Word;
    shi50_remark: PChar;
    shi50_path: PChar;
    shi50_rw_password: array[0..8] of Char;
    shi50_ro_password: array[0..8] of Char;
  end;

type
  TSessionInfo502 = packed record
    Sesi502_cname: PWideChar;
    Sesi502_username: PWideChar;
    Sesi502_num_opens: DWORD;
    Sesi502_time: DWORD;
    Sesi502_idle_time: DWORD;
    Sesi502_user_flags: DWORD;
    Sesi502_cltype_name: PWideChar;
    Sesi502_transport: PWideChar;
  end;
  PSessionInfo502 = ^TSessionInfo502;
  TSessionInfo502Array = array[0..512] of TSessionInfo502;
  PSessionInfo502Array = ^TSessionInfo502Array;

type
  TSessionInfo50 = packed record
    Sesi50_cname: PChar;
    Sesi50_username: PChar;
    sesi50_key: Cardinal;
    sesi50_num_conns: Word;
    sesi50_num_opens: Word;
    sesi50_time: Cardinal;
    sesi50_idle_time: Cardinal;
    sesi50_protocol: Byte;
    pad1: Byte;
  end;

type
  TFileInfo3 = packed record
    fi3_id: DWORD;
    fi3_permissions: DWORD;
    fi3_num_locks: DWORD;
    fi3_pathname: PWChar;
    fi3_username: PWChar;
  end;
  PFileInfo3 = ^TFileInfo3;
  TFileInfo3Array = array[0..512] of TFileInfo3;
  PFileInfo3Array = ^TFileInfo3Array;

type
  TFileInfo50 = packed record
    fi50_id: Cardinal;
    fi50_permissions: WORD;
    fi50_num_locks: WORD;
    fi50_pathname: PChar;
    fi50_username: PChar;
    fi50_sharename: PChar;
  end;

type
  TMibIfRow = packed record
    wszName: array[0..255] of WideChar;
    dwIndex: DWORD;
    dwType: DWORD;
    dwMtu: DWORD;
    dwSpeed: DWORD;
    dwPhysAddrLen: DWORD;
    bPhysAddr: array[0..7] of Byte;
    dwAdminStatus: DWORD;
    dwOperStatus: DWORD;
    dwLastChange: DWORD;
    dwInOctets: DWORD;
    dwInUcastPkts: DWORD;
    dwInNUCastPkts: DWORD;
    dwInDiscards: DWORD;
    dwInErrors: DWORD;
    dwInUnknownProtos: DWORD;
    dwOutOctets: DWORD;
    dwOutUCastPkts: DWORD;
    dwOutNUCastPkts: DWORD;
    dwOutDiscards: DWORD;
    dwOutErrors: DWORD;
    dwOutQLen: DWORD;
    dwDescrLen: DWORD;
    bDescr: array[0..255] of Char;
  end;
  TMibIfArray = array[0..512] of TMibIfRow;
  PMibIfRow = ^TMibIfRow;
  PMibIfArray = ^TMibIfArray;

type
  TMibIfTable = packed record
    dwNumEntries: DWORD;
    Table: TMibIfArray;
  end;
  PMibIfTable = ^TMibIfTable;
var
  NetShareEnumNT: function(servername: PWChar;
    level: DWORD;
    bufptr: Pointer;
    prefmaxlen: DWORD;
    entriesread,
    totalentries,
    resume_handle: LPDWORD): DWORD; stdcall;

var
  NetShareEnum: function(pszServer: PChar;
    sLevel: Cardinal;
    pbBuffer: Pchar;
    cbBuffer: Cardinal;
    pcEntriesRead,
    pcTotalAvail: Pointer): DWORD; stdcall;

var
  NetShareDelNT: function(servername: PWideChar;
    netname: PWideChar;
    reserved: DWORD): LongInt; stdcall;

var
  NetShareDel: function(pszServer,
    pszNetName: PChar;
    usReserved: Word): DWORD; stdcall;

var
  NetShareAddNT: function(servername: PWideChar;
    level: DWORD;
    buf: Pointer;
    parm_err: LPDWORD): DWORD; stdcall;

var
  NetShareAdd: function(pszServer: Pchar;
    sLevel: Cardinal;
    pbBuffer: PChar;
    cbBuffer: Word): DWORD; stdcall;

var
  NetSessionEnumNT: function(servername,
    UncClientName,
    username: PWChar;
    level: DWORD;
    bufptr: Pointer;
    prefmaxlen: DWORD;
    entriesread,
    totalentries,
    resume_handle: LPDWORD): DWORD; stdcall;

var
  NetSessionEnum: function(pszServer: PChar;
    sLevel: DWORD;
    pbBuffer: Pointer;
    cbBuffer: DWORD;
    pcEntriesRead,
    pcTotalAvial: Pointer): integer; stdcall;

var
  NetSessionDelNT: function(ServerName,
    UncClientName,
    username: PWChar): DWORD; stdcall;

var
  NetSessionDel: function(pszServer: PChar;
    pszClientName: PChar;
    sReserved: SmallInt): DWORD; stdcall;

var
  NetFileEnumNT: function(servername,
    basepath,
    username: PWChar;
    level: DWORD;
    bufptr: Pointer;
    prefmaxlen: DWORD;
    entriesread,
    totalentries,
    resume_handle: LPDWORD): DWORD; stdcall;

var
  NetFileEnum: function(pszServer,
    pszBasePath: PChar;
    sLevel: DWORD;
    pbBuffer: Pointer;
    cbBuffer: DWORD;
    pcEntriesRead,
    pcTotalAvail: pointer): integer; stdcall;

var
  NetFileClose: function(ServerName: PWideChar;
    FileId: DWORD): DWORD; stdcall;

var
  NetFileClose2: function(pszServer: PChar;
    ulFileId: LongWord): DWORD; stdcall;

var
  GetIfTable: function(pIfTable: PMibIfTable;
    pdwSize: PULONG;
    bOrder: Boolean): DWORD; stdcall;

implementation

end.

unit NetMonUtils;

interface

uses Windows, Classes, NetMonConsts;

function IsNT(var Value: Boolean): Boolean;

procedure GetShares(SharesList: TStrings);
procedure CloseShare(ShareName: string);
procedure AddShare(ShareName, ShareDir: string);

procedure GetSessions(List: TStrings);
procedure CloseSession(SessionName: string);

procedure GetFiles(FilesList: TStrings);
procedure CloseFile(FileIndex: string);

procedure GetTrafficSets(TrafficsList: TStrings);

function IntegerToTimeStr(Value: Integer): string;

type
  TShareInfo2Obj = class
  private
    Fshi2_netname: string;
    Fshi2_path: string;
    procedure Setshi2_netname(const Value: string);
    procedure Setshi2_path(const Value: string);
  public
    constructor Create(ShareInfo2: TShareInfo2);
    property shi2_netname: string read Fshi2_netname write Setshi2_netname;
    property shi2_path: string read Fshi2_path write Setshi2_path;
  end;
  TShareInfo50Obj = class
  private
    Fshi50_netname: string;
    Fshi50_path: string;
    procedure Setshi50_netname(const Value: string);
    procedure Setshi50_path(const Value: string);
  public
    constructor Create(ShareInfo50: TShareInfo50);
    property shi50_netname: string read Fshi50_netname write Setshi50_netname;
    property shi50_path: string read Fshi50_path write Setshi50_path;
  end;
  TSessionInfo502Obj = class
  private
    FSesi502_Time: DWord;
    Fsesi502_idle_time: DWord;
    FSesi502_num_opens: DWord;
    FSesi502_cname: WideString;
    FSesi502_username: WideString;
    procedure SetSesi502_cname(const Value: WideString);
    procedure Setsesi502_idle_time(const Value: DWord);
    procedure SetSesi502_num_opens(const Value: DWord);
    procedure SetSesi502_Time(const Value: DWord);
    procedure SetSesi502_username(const Value: WideString);
  public
    constructor Create(SessionInfo502: TSessionInfo502);
    property Sesi502_cname: WideString read FSesi502_cname write SetSesi502_cname;
    property Sesi502_username: WideString read FSesi502_username write SetSesi502_username;
    property Sesi502_num_opens: DWord read FSesi502_num_opens write SetSesi502_num_opens;
    property Sesi502_Time: DWord read FSesi502_Time write SetSesi502_Time;
    property sesi502_idle_time: DWord read Fsesi502_idle_time write Setsesi502_idle_time;
  end;

  TSessionInfo50Obj = class
  private
    Fsesi50_num_opens: Integer;
    Fsesi50_time: Integer;
    Fsesi50_idle_time: Integer;
    FSesi50_cname: WideString;
    FSesi50_username: WideString;
    procedure SetSesi50_cname(const Value: WideString);
    procedure Setsesi50_idle_time(const Value: Integer);
    procedure Setsesi50_num_opens(const Value: Integer);
    procedure Setsesi50_time(const Value: Integer);
    procedure SetSesi50_username(const Value: WideString);
  public
    constructor Create(SessionInfo50: TSessionInfo50);
    property Sesi50_cname: WideString read FSesi50_cname write SetSesi50_cname;
    property Sesi50_username: WideString read FSesi50_username write SetSesi50_username;
    property sesi50_num_opens: Integer read Fsesi50_num_opens write Setsesi50_num_opens;
    property sesi50_time: Integer read Fsesi50_time write Setsesi50_time;
    property sesi50_idle_time: Integer read Fsesi50_idle_time write Setsesi50_idle_time;
  end;

  TFileInfo3Obj = class
  private
    Ffi3_permissions: DWord;
    Ffi3_num_locks: DWord;
    Ffi3_id: DWord;
    Ffi3_pathname: WideString;
    Ffi3_username: WideString;
    procedure Setfi3_id(const Value: DWord);
    procedure Setfi3_num_locks(const Value: DWord);
    procedure Setfi3_pathname(const Value: WideString);
    procedure Setfi3_permissions(const Value: DWord);
    procedure Setfi3_username(const Value: WideString);
  public
    constructor Create(FileInfo3: TFileInfo3);
    property fi3_id: DWord read Ffi3_id write Setfi3_id;
    property fi3_permissions: DWord read Ffi3_permissions write Setfi3_permissions;
    property fi3_num_locks: DWord read Ffi3_num_locks write Setfi3_num_locks;
    property fi3_pathname: WideString read Ffi3_pathname write Setfi3_pathname;
    property fi3_username: WideString read Ffi3_username write Setfi3_username;
  end;


type
  TFileInfo50Obj = class
  private
    Ffi50_id: Integer;
    Ffi50_pathname: string;
    Ffi50_username: string;
    Ffi50_sharename: string;
    Ffi50_permissions: WORD;
    Ffi50_num_locks: WORD;
    procedure Setfi50_id(const Value: Integer);
    procedure Setfi50_num_locks(const Value: WORD);
    procedure Setfi50_pathname(const Value: string);
    procedure Setfi50_permissions(const Value: WORD);
    procedure Setfi50_sharename(const Value: string);
    procedure Setfi50_username(const Value: string);
  public
    constructor Create(FileInfo50: TFileInfo50);
    property fi50_id: Integer read Ffi50_id write Setfi50_id;
    property fi50_permissions: WORD read Ffi50_permissions write Setfi50_permissions;
    property fi50_num_locks: WORD read Ffi50_num_locks write Setfi50_num_locks;
    property fi50_pathname: string read Ffi50_pathname write Setfi50_pathname;
    property fi50_username: string read Ffi50_username write Setfi50_username;
    property fi50_sharename: string read Ffi50_sharename write Setfi50_sharename;
  end;
type
  TMAC = array[0..7] of Byte;
  TTraffic = class
  private
    FMAC: string;
    FdwOutOctets: Integer;
    FdwInOctets: Integer;
    FCaption: string;
    procedure SetCaption(const Value: string);
    procedure SetdwInOctets(const Value: Integer);
    procedure SetdwOutOctets(const Value: Integer);
    procedure SetMAC(const Value: string);
    function GetMAC(Value: TMAC; Length: DWORD): string;
  public
    constructor Create(MibIfRow: TMibIfRow);
    property Caption: string read FCaption write SetCaption;
    property MAC: string read FMAC write SetMAC;
    property dwInOctets: Integer read FdwInOctets write SetdwInOctets;
    property dwOutOctets: Integer read FdwOutOctets write SetdwOutOctets;
  end;

 

implementation

uses SysUtils;

function IsNT(var Value: Boolean): Boolean;
var Ver: TOSVersionInfo;
  BRes: Boolean;
begin
  Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  BRes := GetVersionEx(Ver);
  if not BRes then
  begin
    Result := False;
    Exit;
  end else
    Result := True;

  case Ver.dwPlatformId of
    VER_PLATFORM_WIN32_NT: Value := True;
    VER_PLATFORM_WIN32_WINDOWS: Value := False;
    VER_PLATFORM_WIN32s: Result := False
  end;
end;

procedure GetShares(SharesList: TStrings);
var
  i: Integer;
  FLibHandle: THandle;
  ShareNT: PShareInfo2Array;
  entriesread, totalentries: DWORD; //<= Win NT
  Share: array[0..512] of TShareInfo50;
  pcEntriesRead, pcTotalAvail: Word; //<=  Windows 9x-Me
  OS: Boolean;
begin
  if not IsNT(OS) then Exit;
  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareEnumNT := GetProcAddress(FLibHandle, 'NetShareEnum');
    if not Assigned(NetShareEnumNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    ShareNT := nil;
    if NetShareEnumNT(nil, 2, @ShareNT, DWORD(-1),
      @entriesread, @totalentries, nil) <> 0 then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    if entriesread > 0 then
      for i := 0 to entriesread - 1 do
        SharesList.AddObject(string(ShareNT^[i].shi2_netname), TShareInfo2Obj.Create(ShareNT^[i]));
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareEnum := GetProcAddress(FLibHandle, 'NetShareEnum');
    if not Assigned(NetShareEnum) then
      FreeLibrary(FLibHandle);
    Exit;
    if NetShareEnum(nil, 50, @Share, SizeOf(Share),
      @pcEntriesRead, @pcTotalAvail) <> 0 then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    if pcEntriesRead > 0 then
      for i := 0 to pcEntriesRead - 1 do
        SharesList.AddObject(string(Share[i].shi50_netname), TShareInfo50Obj.Create(Share[i]));
  end;
  FreeLibrary(FLibHandle);
end;

procedure CloseShare(ShareName: string);
var
  OS: Boolean;
  FLibHandle: THandle;
  Name9x: array[0..12] of Char;
  NameNT: PWChar;
  i: Integer;
begin
  if not IsNT(OS) then Exit;

  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareDelNT := GetProcAddress(FLibHandle, 'NetShareDel');
    if not Assigned(NetShareDelNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    i := SizeOf(WideChar) * 256;
    GetMem(NameNT, i);
    StringToWideChar(ShareName, NameNT, i);
    NetShareDelNT(nil, NameNT, 0);
    FreeMem(NameNT);
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareDel := GetProcAddress(FLibHandle, 'NetShareDel');
    if not Assigned(NetShareDel) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    FillChar(Name9x, SizeOf(Name9x), #0);
    move(ShareName[1], Name9x[0], Length(ShareName));
    NetShareDel(nil, @Name9x, 0);
  end;
  FreeLibrary(FLibHandle);
end;

procedure AddShare(ShareName, ShareDir: string);
const
  STYPE_DISKTREE = 0;
  ACCESS_ALL = 258;
  SHI50F_FULL = 258;
var
  FLibHandle: THandle;
  Share9x: TShareInfo50;
  ShareNT: TShareInfo2;
  TmpDirNT, TmpNameNT: PWChar;
  OS: Boolean;
  TmpLength: Integer;
begin
  if not IsNT(OS) then Exit;

  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareAddNT := GetProcAddress(FLibHandle, 'NetShareAdd');
    if not Assigned(NetShareAddNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    TmpLength := SizeOF(WideChar) * 256;

    GetMem(TmpNameNT, TmpLength);
    StringToWideChar(ShareName, TmpNameNT, TmpLength);
    ShareNT.shi2_netname := TmpNameNT;

    ShareNT.shi2_type := STYPE_DISKTREE;
    ShareNT.shi2_remark := '';
    ShareNT.shi2_permissions := ACCESS_ALL;
    ShareNT.shi2_max_uses := DWORD(-1);
    ShareNT.shi2_current_uses := 0;

    GetMem(TmpDirNT, TmpLength);
    StringToWideChar(ShareDir, TmpDirNT, TmpLength);
    ShareNT.shi2_path := TmpDirNT;

    ShareNT.shi2_passwd := '';

    NetShareAddNT(nil, 2, @ShareNT, nil);
    FreeMem(TmpNameNT);
    FreeMem(TmpDirNT);
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetShareAdd := GetProcAddress(FLibHandle, 'NetShareAdd');
    if not Assigned(NetShareAdd) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    FillChar(Share9x.shi50_netname, SizeOf(Share9x.shi50_netname), #0);
    move(ShareName[1], Share9x.shi50_netname[0], Length(ShareName));
    Share9x.shi50_type := STYPE_DISKTREE;
    Share9x.shi50_flags := SHI50F_FULL;
    FillChar(Share9x.shi50_remark,
      SizeOf(Share9x.shi50_remark), #0);
    FillChar(Share9x.shi50_path,
      SizeOf(Share9x.shi50_path), #0);
    Share9x.shi50_path := PAnsiChar(ShareDir);
    FillChar(Share9x.shi50_rw_password,
      SizeOf(Share9x.shi50_rw_password), #0);
    FillChar(Share9x.shi50_ro_password,
      SizeOf(Share9x.shi50_ro_password), #0);
    NetShareAdd(nil, 50, @Share9x, SizeOf(Share9x));
  end;
  FreeLibrary(FLibHandle);
end;

procedure GetSessions(List: TStrings);
var
  OS: Boolean;
  FLibHandle: THandle;
  SessionInfo50: array[0..512] of TSessionInfo50;
  SessionInfo502: PSessionInfo502Array;
  TotalEntries, EntriesReadNT: DWORD;
  EntriesRead, TotalAvial: Word;
  i: integer;
begin
  List.Clear;
  if not IsNT(OS) then Exit;
  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetSessionEnumNT := GetProcAddress(FLibHandle, 'NetSessionEnum');
    if not Assigned(NetSessionEnumNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    SessionInfo502 := nil;
    if NetSessionEnumNT(nil, nil, nil, 502, @SessionInfo502, DWORD(-1), @entriesreadNT, @totalentries, nil) = 0 then
      for i := 0 to EntriesReadNT - 1 do
        List.AddObject(string(SessionInfo502^[i].sesi502_cname), TSessionInfo502Obj.Create(SessionInfo502^[i]));
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetSessionEnum := GetProcAddress(FLibHandle, 'NetSessionEnum');
    if not Assigned(NetSessionEnum) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    if NetSessionEnum(nil, 50, @SessionInfo50, SizeOf(SessionInfo50), @EntriesRead, @TotalAvial) = 0 then
      for i := 0 to EntriesRead - 1 do
        List.AddObject(string(SessionInfo50[i].Sesi50_cname), TSessionInfo50Obj.Create(SessionInfo50[i]));
  end;
  FreeLibrary(FLibHandle);
end;

procedure CloseSession(SessionName: string);
var
  OS: Boolean;
  FLibHandle: THandle;
  CNameNT: PWideChar;
  CName9x: PAnsiChar;
  Key: SmallInt;
begin
  if not IsNT(OS) then Exit;
  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetSessionDelNT := GetProcAddress(FLibHandle, 'NetSessionDel');
    if not Assigned(NetSessionDelNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    CNameNT := PWChar(WideString('\\' + SessionName));
    NetSessionDelNT(nil, CNameNT, nil);
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetSessionDel := GetProcAddress(FLibHandle, 'NetSessionDel');
    if not Assigned(NetSessionDel) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    CName9x := PAnsiChar(SessionName);
   // key := SessionCloseKey[i];
   // NetSessionDel(nil,CName9x,Key);
  end;
  FreeLibrary(FLibHandle);
end;

procedure GetFiles(FilesList: TStrings);
var
  OS: Boolean;
  FLibHandle: THandle;
  FileInfoNT: PFileInfo3Array;
  FileInfo9x: array[0..512] of TFileInfo50;
  TotalEntries, EntriesReadNT: DWORD;
  EntriesRead, TotalAvial: Word;
  i: integer;
begin
  if not IsNT(OS) then Exit;
  FilesList.Clear;
  if OS then begin
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetFileEnumNT := GetProcAddress(FLibHandle, 'NetFileEnum');
    if not Assigned(NetFileEnumNT) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    FileInfoNT := nil;
    if NetFileEnumNT(nil, nil, nil, 3, @FileInfoNT, DWORD(-1), @entriesreadNT, @totalentries, nil) = 0 then
      for i := 0 to EntriesReadNT - 1 do
        FilesList.AddObject(string(IntToStr(FileInfoNT^[i].fi3_id)), TFileInfo3Obj.Create(FileInfoNT^[i]));
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetFileEnum := GetProcAddress(FLibHandle, 'NetFileEnum');
    if not Assigned(NetFileEnum) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    if NetFileEnum(nil, nil, 50, @FileInfo9x, SizeOf(FileInfo9x), @EntriesRead, @TotalAvial) = 0 then
      for i := 0 to EntriesRead - 1 do
        FilesList.AddObject(IntToStr(FileInfo9x[i].fi50_id), TFileInfo50Obj.Create(FileInfo9x[i]));
  end;
  FreeLibrary(FLibHandle);
end;

procedure CloseFile(FileIndex: string);
var
  OS: Boolean;
  FLibHandle: THandle;
begin
  if not IsNT(OS) then Exit;
  if OS then begin //暑?潆� NT
    FLibHandle := LoadLibrary('NETAPI32.DLL');
    if FLibHandle = 0 then Exit;
    @NetFileClose := GetProcAddress(FLibHandle, 'NetFileClose');
    if not Assigned(NetFileClose) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    NetFileClose(nil, StrToInt(FileIndex));
  end else begin
    FLibHandle := LoadLibrary('SVRAPI.DLL');
    if FLibHandle = 0 then Exit;
    @NetFileClose2 := GetProcAddress(FLibHandle, 'NetFileClose2');
    if not Assigned(NetFileClose2) then
    begin
      FreeLibrary(FLibHandle);
      Exit;
    end;
    NetFileClose2(nil, StrToInt(FileIndex));
  end;
  FreeLibrary(FLibHandle);
end;

procedure GetTrafficSets(TrafficsList: TStrings);
var
  FLibHandle : THandle;
  Table: TMibIfTable;
  i : integer;
  Size   : integer;
begin
  TrafficsList.Clear;
  FLibHandle := LoadLibrary('IPHLPAPI.DLL');
  if FLibHandle = 0 then Exit;
  @GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable');
  if not Assigned(GetIfTable) then
  begin
    FreeLibrary(FLibHandle);
    Exit;
  end;
  Size := SizeOf(Table);
  if GetIfTable(@Table, @Size, false ) = 0 then
    for i:= 0 to Table.dwNumEntries-1 do
      TrafficsList.AddObject(Table.Table[i].bDescr, TTraffic.Create(Table.Table[i]));
  FreeLibrary(FLibHandle);
end;

function IntegerToTimeStr(Value: Integer): string;
var d, h, m, s: Real;
begin
  d := 0;
  h := 0;
  m := 0;
  s := Value;
  if s > 59 then begin
    m := int(s / 60);
    s := s - (m * 60);
  end;
  if m > 59 then begin
    h := int(m / 60);
    m := m - (h * 60);
  end;
  if h > 23 then begin
    d := int(h / 24);
    h := h - (d * 24);
  end;
  Result := '';
  if (d > 0) then Result := Result + floattostr(d) + ' d. ';
  if (h < 9) then Result := Result + '0' + floattostr(h) + ':' else Result := Result + floattostr(h) + ':';
  if (m < 9) then Result := Result + '0' + floattostr(m) + ':' else Result := Result + floattostr(m) + ':';
  if (s < 9) then Result := Result + '0' + floattostr(s) else Result := Result + floattostr(s);
end;

{ TSessionInfo50Obj }

constructor TSessionInfo50Obj.Create(SessionInfo50: TSessionInfo50);
begin
  FSesi50_cname := SessionInfo50.Sesi50_cname;
  FSesi50_username := SessionInfo50.Sesi50_username;

end;

procedure TSessionInfo50Obj.SetSesi50_cname(const Value: WideString);
begin
  FSesi50_cname := Value;
end;

procedure TSessionInfo50Obj.Setsesi50_idle_time(const Value: Integer);
begin
  Fsesi50_idle_time := Value;
end;

procedure TSessionInfo50Obj.Setsesi50_num_opens(const Value: Integer);
begin
  Fsesi50_num_opens := Value;
end;

procedure TSessionInfo50Obj.Setsesi50_time(const Value: Integer);
begin
  Fsesi50_time := Value;
end;

procedure TSessionInfo50Obj.SetSesi50_username(const Value: WideString);
begin
  FSesi50_username := Value;
end;

{ TSessionInfo502Obj }

constructor TSessionInfo502Obj.Create(SessionInfo502: TSessionInfo502);
begin
  FSesi502_cname := SessionInfo502.Sesi502_cname;
  FSesi502_username := SessionInfo502.Sesi502_username;
  FSesi502_num_opens := SessionInfo502.Sesi502_num_opens;
  FSesi502_Time := SessionInfo502.Sesi502_time;
  Fsesi502_idle_time := SessionInfo502.Sesi502_idle_time;
end;

procedure TSessionInfo502Obj.SetSesi502_cname(const Value: WideString);
begin
  FSesi502_cname := Value;
end;

procedure TSessionInfo502Obj.Setsesi502_idle_time(const Value: DWord);
begin
  Fsesi502_idle_time := Value;
end;

procedure TSessionInfo502Obj.SetSesi502_num_opens(const Value: DWord);
begin
  FSesi502_num_opens := Value;
end;

procedure TSessionInfo502Obj.SetSesi502_Time(const Value: DWord);
begin
  FSesi502_Time := Value;
end;

procedure TSessionInfo502Obj.SetSesi502_username(const Value: WideString);
begin
  FSesi502_username := Value;
end;

{ TFileInfo3Obj }

constructor TFileInfo3Obj.Create(FileInfo3: TFileInfo3);
begin
  Ffi3_id := FileInfo3.fi3_id;
  Ffi3_permissions := FileInfo3.fi3_permissions;
  Ffi3_num_locks := FileInfo3.fi3_num_locks;
  Ffi3_pathname := FileInfo3.fi3_pathname;
  Ffi3_username := FileInfo3.fi3_username;
end;

procedure TFileInfo3Obj.Setfi3_id(const Value: DWord);
begin
  Ffi3_id := Value;
end;

procedure TFileInfo3Obj.Setfi3_num_locks(const Value: DWord);
begin
  Ffi3_num_locks := Value;
end;

procedure TFileInfo3Obj.Setfi3_pathname(const Value: WideString);
begin
  Ffi3_pathname := Value;
end;

procedure TFileInfo3Obj.Setfi3_permissions(const Value: DWord);
begin
  Ffi3_permissions := Value;
end;

procedure TFileInfo3Obj.Setfi3_username(const Value: WideString);
begin
  Ffi3_username := Value;
end;

{ TFileInfo50Obj }

constructor TFileInfo50Obj.Create(FileInfo50: TFileInfo50);
begin
  Ffi50_id := FileInfo50.fi50_id;
  Ffi50_permissions := FileInfo50.fi50_permissions;
  Ffi50_num_locks := FileInfo50.fi50_num_locks;
  Ffi50_pathname := FileInfo50.fi50_pathname;
  Ffi50_username := FileInfo50.fi50_username;
  Ffi50_sharename := FileInfo50.fi50_sharename;
end;

procedure TFileInfo50Obj.Setfi50_id(const Value: Integer);
begin
  Ffi50_id := Value;
end;

procedure TFileInfo50Obj.Setfi50_num_locks(const Value: WORD);
begin
  Ffi50_num_locks := Value;
end;

procedure TFileInfo50Obj.Setfi50_pathname(const Value: string);
begin
  Ffi50_pathname := Value;
end;

procedure TFileInfo50Obj.Setfi50_permissions(const Value: WORD);
begin
  Ffi50_permissions := Value;
end;

procedure TFileInfo50Obj.Setfi50_sharename(const Value: string);
begin
  Ffi50_sharename := Value;
end;

procedure TFileInfo50Obj.Setfi50_username(const Value: string);
begin
  Ffi50_username := Value;

end;

{ TTraffic }

constructor TTraffic.Create(MibIfRow: TMibIfRow);
begin
  FCaption := string(MibIfRow.bDescr);
  FMAC := GetMAC(TMAC(MibIfRow.bPhysAddr), MibIfRow.dwPhysAddrLen);
  FdwInOctets := MibIfRow.dwInOctets;
  FdwOutOctets := MibIfRow.dwOutOctets;
end;

procedure TTraffic.SetCaption(const Value: string);
begin
  FCaption := Value;
end;

procedure TTraffic.SetdwInOctets(const Value: Integer);
begin
  FdwInOctets := Value;
end;

procedure TTraffic.SetdwOutOctets(const Value: Integer);
begin
  FdwOutOctets := Value;
end;

procedure TTraffic.SetMAC(const Value: string);
begin
  FMAC := Value;
end;

function TTraffic.GetMAC(Value: TMAC; Length: DWORD): string;
var
  i: Integer;
begin
  if Length = 0 then Result := '00-00-00-00-00-00' else
  begin
    Result := '';
    for i := 0 to Length - 2 do
      Result := Result + IntToHex(Value[i], 2) + '-';
    Result := Result + IntToHex(Value[Length - 1], 2);
  end;
end;

{ TSessionInfo2Obj }

constructor TShareInfo2Obj.Create(ShareInfo2: TShareInfo2);
begin
  Fshi2_netname := ShareInfo2.shi2_netname;
  Fshi2_path := ShareInfo2.shi2_path;
end;

procedure TShareInfo2Obj.Setshi2_netname(const Value: string);
begin
  Fshi2_netname := Value;
end;

procedure TShareInfo2Obj.Setshi2_path(const Value: string);
begin
  Fshi2_path := Value;
end;

{ TShareInfo50Obj }

constructor TShareInfo50Obj.Create(ShareInfo50: TShareInfo50);
begin
  Fshi50_netname := ShareInfo50.shi50_netname;
  Fshi50_path := ShareInfo50.shi50_path;
end;

procedure TShareInfo50Obj.Setshi50_netname(const Value: string);
begin
  Fshi50_netname := Value;
end;

procedure TShareInfo50Obj.Setshi50_path(const Value: string);
begin
  Fshi50_path := Value;
end;

end.

unit NetSendUtils;

interface

uses Classes, Windows;

  procedure GetNetGroupNameList(Names: TStrings);
  procedure GetComputerNameList(GroupName: string; Names: TStrings);

implementation

procedure GetNetGroupNameList(Names: TStrings);
var
  lphEnum: THandle;
  Buf1, Buf2: Pointer;
  Count, BufSize, Res: DWORD;
  P: ^TNetResource;
  I, J: Integer;
  List: TList;
  NetResource: TNetResource;
begin
  //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
  Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
    RESOURCEUSAGE_CONTAINER, nil, lphEnum);
  if Res <> NO_ERROR then
    Exit; //执行失败
  //获取整个网络中的网络类型信息
  Count := $FFFFFFFF;                //不限资源数目
  BufSize := 8192;                   //缓冲区大小设置为8K
  GetMem(Buf1, BufSize);              //申请内存,用于获取工作组信息
  List := TList.Create;
  try
    Res := WNetEnumResource(lphEnum, Count, Pointer(Buf1), BufSize);
    if (Res = ERROR_NO_MORE_ITEMS) or (Res <> NO_ERROR) then
      Exit;                          //资源列举完毕 或者 执行失败
    P := Buf1;
    for I := 0 to Count - 1 do
    begin
      List.Add(p);
      Inc(P);
    end;
    Res := WNetCloseEnum(lphEnum); //关闭一次列举
    if Res <> NO_ERROR then exit;
    for I := 0 to List.Count -1 do
    begin
      NetResource := TNetResource(List.Items[I]^);
      Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
        RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum);
      if Res <> NO_ERROR then break; //执行失败
      Names.Clear;
      while True do
      begin
        Count := $FFFFFFFF; //不限资源数目
        GetMem(Buf2, BufSize); //申请内存,用于获取工作组信息
        try
          Res := WNetEnumResource(lphEnum, Count, Pointer(Buf2), BufSize); //获取一个网络类型的文件资源信息
          if (Res = ERROR_NO_MORE_ITEMS) or (Res <> NO_ERROR) then
            Break;                          //资源列举完毕 或者 执行失败
          P := Buf2;
          for J := 0 to Count - 1 do //列举各个工作组的信息
          begin
            Names.Add(P^.lpRemoteName);
            Inc(P);
          end;
        finally
          FreeMem(Buf2, BufSize);
        end;
      end;
    end;
  finally
    FreeMem(Buf1, BufSize);
    List.Free;
  end;
end;

procedure GetComputerNameList(GroupName: string;Names: TStrings);
var
  NetResource: TNetResource;
  P: ^TNetResource;
  lphEnum: THandle;
  Buf1: Pointer;
  Count, BufSize, Res: DWORD;
  I: Integer;
begin
  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; //执行失败
  Names.Clear;
  while True do //列举指定工作组的网络资源
  begin
    Count := $FFFFFFFF; //不限资源数目
    BufSize := 8192; //缓冲区大小设置为8K
    GetMem(Buf1, BufSize); //申请内存,用于获取工作组信息
    try
      Res := WNetEnumResource(lphEnum, Count, Pointer(Buf1), BufSize);
      if Res = ERROR_NO_MORE_ITEMS then break; //资源列举完毕
      if (Res <> NO_ERROR) then Exit; //执行失败
      P := Buf1;
      for I := 0 to Count - 1 do //列举工作组的计算机名称
      begin
        Names.Add(P^.lpRemoteName + 2);
        Inc(P);
      end;
    finally
      FreeMem(Buf1);
    end;
  end;
end;

end.

unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ImgList, StdCtrls, ExtCtrls, ComCtrls, ToolWin, Menus, ActnList, TrayIcon;

type
  TMainForm = class(TForm)
    StatusBar1: TStatusBar;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    TreeImageList: TImageList;
    Panel1: TPanel;
    Panel2: TPanel;
    gbxTraffic: TGroupBox;
    bvlTraffic: TBevel;
    lvTraffic: TListView;
    gbxShares: TGroupBox;
    gbxSessions: TGroupBox;
    bvlSessions: TBevel;
    lvSessions: TListView;
    pmShare: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    pmSession: TPopupMenu;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    Splitter1: TSplitter;
    PnlMsg: TPanel;
    Splitter2: TSplitter;
    Splitter3: TSplitter;
    PnlClnt: TPanel;
    PnlClntTop: TPanel;
    PnlClntBtm: TPanel;
    BtnOk: TButton;
    BtnClose: TButton;
    GroupBox1: TGroupBox;
    MemoContents: TMemo;
    Splitter4: TSplitter;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    EdToName: TEdit;
    Label2: TLabel;
    EdFrom: TEdit;
    Panel3: TPanel;
    TvComputer: TTreeView;
    pmTraffic: TPopupMenu;
    N8: TMenuItem;
    ActionList1: TActionList;
    ShareRefreshAction: TAction;
    ShareCloseAction: TAction;
    ShareAddAction: TAction;
    SessionRefreshAction: TAction;
    SessionCloseAction: TAction;
    NetImageList: TImageList;
    TrafficRefreshAction: TAction;
    Bevel1: TBevel;
    LvShares: TListView;
    Timer1: TTimer;
    FileRefreshAction: TAction;
    FileCloseAction: TAction;
    pmFiles: TPopupMenu;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    Splitter6: TSplitter;
    GroupBox3: TGroupBox;
    Bevel2: TBevel;
    LvFiles: TListView;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    pmTree: TPopupMenu;
    N16: TMenuItem;
    PopupMenu1: TPopupMenu;
    N17: TMenuItem;
    N18: TMenuItem;
    N19: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure TvComputerClick(Sender: TObject);
    procedure BtnCloseClick(Sender: TObject);
    procedure BtnOkClick(Sender: TObject);
    procedure EdToNameChange(Sender: TObject);
    procedure ShareRefreshActionExecute(Sender: TObject);
    procedure ShareCloseActionExecute(Sender: TObject);
    procedure LvSharesMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ShareAddActionExecute(Sender: TObject);
    procedure SessionRefreshActionExecute(Sender: TObject);
    procedure SessionCloseActionExecute(Sender: TObject);
    procedure TrafficRefreshActionExecute(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FileRefreshActionExecute(Sender: TObject);
    procedure lvSessionsMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure LvFilesMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FileCloseActionExecute(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure N19Click(Sender: TObject);
    procedure N17Click(Sender: TObject);
    procedure TvComputerContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
  private
    { Private declarations }
    procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
    procedure WMHotkeyHandle(var Msg: Tmessage); message WM_HOTKEY;
  public
    { Public declarations }
    FRootNode, FCurNode: TTreeNode;
    FSendToNames: TStrings;
    TrayNotifyIcon1: TTrayNotifyIcon;
    HotKeyid: Integer;
    procedure ShowMainForm(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

uses MultInst, NetUtils, SendPopupMsg, NetMonUtils, ShlObj, LKQDialogs, ShellAPI, Clipbrd;

{$R *.DFM}

procedure TMainForm.FormActivate(Sender: TObject);
begin
  FRootNode := TvComputer.Items.add(TvComputer.topitem, '整个网络');
  FRootNode.imageindex := 0;
  TvComputer.SetFocus;
end;

procedure TMainForm.TvComputerClick(Sender: TObject);
var
  SelectedNode, Node: TTreeNode;
  Strs: TStrings;
  I: Integer;
begin
  if TvComputer.Selected = nil then
    Exit;
  SelectedNode := TvComputer.Selected;
  Strs := TStringList.Create;
  try
    if SelectedNode.Level = 0 then
    begin
      if SelectedNode.count = 0 then
      begin
        GetNetGroupNameList(Strs);
        for I := 0 to Strs.Count - 1 do
        begin
          Node := TvComputer.Items.AddChild(FRootNode, Strs[I]);
          Node.ImageIndex := 1;
          Node.SelectedIndex := 1;
        end;
      end;
    end;
    if SelectedNode.level = 1 then
    begin
      if SelectedNode.count = 0 then
      begin
        GetComputerNameList(SelectedNode.Text, Strs);
        for I := 0 to Strs.Count - 1 do
        begin
          Node := TvComputer.Items.AddChild(SelectedNode, Strs[I]);
          Node.ImageIndex := 2;
          Node.SelectedIndex := 4;
        end;
      end;
    end;
    if SelectedNode.level = 2 then
    begin
      if FSendToNames.IndexOf(SelectedNode.Parent.Text + '*') <> -1 then Exit;
      if FSendToNames.IndexOf(SelectedNode.Text) = -1 then
        FSendToNames.Add(SelectedNode.Text);
      EdToName.Text := FSendToNames.CommaText;
    end;
  finally
    Strs.Free;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FSendToNames := TStringList.Create;
  SetWindowLong(EdToName.Handle, GWL_STYLE,
    GetWindowLong(EdToName.Handle, GWL_STYLE) or
    ES_UPPERCASE);
  SetWindowLong(EdFrom.Handle, GWL_STYLE,
    GetWindowLong(EdFrom.Handle, GWL_STYLE) or
    ES_UPPERCASE);
  TrayNotifyIcon1 := TTrayNotifyIcon.Create(Self);
  with TrayNotifyIcon1 do
  begin
    Icon := Application.Icon;
    Hint := Application.Title;
    OnDblClick := ShowMainForm;
    PopupMenu := PopupMenu1;
    HideTask := False;
    IconVisible := True;
  end;
  Hotkeyid := GlobalAddAtom('UserDefineHotKey') - $C000;
  RegisterHotkey(Handle, Hotkeyid, MOD_CONTROL, VK_RETURN);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FSendToNames.Free;
  TrayNotifyIcon1.Free;
  UnRegisterhotkey(Handle, Hotkeyid);
  DeleteAtom(HotKeyID);
end;

procedure TMainForm.BtnCloseClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TMainForm.BtnOkClick(Sender: TObject);
var
  I, J: Integer;
begin
  StatusBar1.SimpleText := '';
  for I := 0 to FSendToNames.Count - 1 do
  begin
    J := SendTextMessage(FSendToNames[I], EdFrom.Text, MemoContents.Lines.Text);
    if J <> 0 then
      StatusBar1.SimpleText := StatusBar1.SimpleText + FSendToNames[I] + ' ';
  end;
  if StatusBar1.SimpleText <> '' then StatusBar1.SimpleText := StatusBar1.SimpleText + '没有收到';
end;

procedure TMainForm.EdToNameChange(Sender: TObject);
var
  NameList: TStrings;
  I: Integer;
begin
  NameList := TStringList.Create;
  try
    NameList.CommaText := EdToName.Text;
    for I := (FSendToNames.Count - 1) downto 0 do
    begin
      if NameList.IndexOf(FSendToNames[I]) = -1 then
        FSendToNames.Delete(I);
    end;
    if EdToName.Text <> FSendToNames.CommaText then
    begin
      FSendToNames.Assign(NameList);
      EdToName.Text := FSendToNames.CommaText;
    end;
  finally
    NameList.Free;
  end;
  btnOK.Enabled := Trim(EdToName.Text) <> '';
end;

procedure TMainForm.ShareRefreshActionExecute(Sender: TObject);
var
  List: TStrings;
  I: Integer;
  OS: Boolean;
  ShareInfo2Obj: TShareInfo2Obj;
begin
  if not IsNT(OS) then Exit;
  List := TStringList.Create;
  try
    GetShares(List);
    LvShares.Items.BeginUpdate;
    try
      LvShares.Items.Clear;
      for I := 0 to List.Count - 1 do
      begin
        ShareInfo2Obj := TShareInfo2Obj(List.Objects[I]);
        if ShareInfo2Obj <> nil then
        begin
          with LvShares.Items.Add do
          begin
            Caption := List[I];
            SubItems.Add(ShareInfo2Obj.shi2_path);
          end;
        end;
      end;
    finally
      LvShares.Items.EndUpdate;
    end;
  finally
    List.Free;
  end;
end;

procedure TMainForm.ShareCloseActionExecute(Sender: TObject);
begin
  if (LvShares.Items.Count = 0) or (LvShares.Selected = nil) then
    Exit;
  if Application.MessageBox('确实要关闭该共享吗?', '提示', MB_YESNO + MB_ICONQUESTION) <> ID_YES then
    Exit;
  CloseShare(LvShares.Selected.Caption);
  LvShares.Items.Delete(LvShares.Selected.Index);
end;

procedure TMainForm.LvSharesMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShareCloseAction.Enabled := (LvShares.Items.Count <> 0) and (LvShares.Selected <> nil);
  N13.Enabled := ShareCloseAction.Enabled;
end;

function SelectDirectory: string;
var
  lpItemID: PItemIDList;
  BrowseInfo: TBrowseInfo;
  DisplayName: array[0..MAX_PATH] of Char;
  TempPath: array[0..MAX_PATH] of Char;
begin
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner := MainForm.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  BrowseInfo.lpszTitle := '请选择共享目录:';
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if Assigned(lpItemId) then begin
    SHGetPathFromIDList(lpItemID, TempPath);
    GlobalFreePtr(lpItemID);
  end else Result := '';
  Result := string(TempPath);
end;

procedure TMainForm.TvComputerContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
  FCurNode := TvComputer.GetNodeAt(MousePos.X, MousePos.Y);
  if FCurNode <> nil then
    N16.Enabled := FCurNode.Level = 1;
end;


procedure TMainForm.ShareAddActionExecute(Sender: TObject);
var
  Name, Dir: string;
begin
  if Sys_SelectDirectory(Self.Handle, Dir, '请选择共享目录:', True) then
  begin
    Name := InputBox('输入', '请输入共享名称', ExtractFileName(Dir));
    AddShare(Name, Dir);
    with LvShares.Items.Add do
    begin
      Caption := Name;
      SubItems.Add(Dir);
    end;
  end;
end;

procedure TMainForm.SessionRefreshActionExecute(Sender: TObject);
var
  List: TStrings;
  I: Integer;
  OS: Boolean;
  SessionInfo502Obj: TSessionInfo502Obj;
begin
  if not IsNT(OS) then Exit;
  List := TStringList.Create;
  try
    GetSessions(List);
    lvSessions.Items.Clear;
    for I := 0 to List.Count - 1 do
    begin
      SessionInfo502Obj := TSessionInfo502Obj(List.Objects[I]);
      if SessionInfo502Obj <> nil then
      begin
        with lvSessions.Items.Add do
        begin
          Caption := List[I];
          SubItems.Add(SessionInfo502Obj.Sesi502_username);
          SubItems.Add(IntToStr(SessionInfo502Obj.Sesi502_num_opens));
          SubItems.Add(IntegerToTimeStr(SessionInfo502Obj.Sesi502_Time));
          SubItems.Add(IntegerToTimeStr(SessionInfo502Obj.sesi502_idle_time));
        end;
      end;
    end;
  finally
    List.Free;
  end;
end;

procedure TMainForm.SessionCloseActionExecute(Sender: TObject);
begin
  if (lvSessions.Items.Count = 0) or (lvSessions.Selected = nil) then
    Exit;
  if Application.MessageBox('确实要关闭该会话吗?', '提示', MB_YESNO + MB_ICONQUESTION) <> ID_YES then
    Exit;
  CloseSession(lvSessions.Selected.Caption);
  lvSessions.Items.Delete(lvSessions.Selected.Index);
end;

procedure TMainForm.TrafficRefreshActionExecute(Sender: TObject);
var
  List: TStrings;
  I: Integer;
  OS: Boolean;
  Traffic: TTraffic;
begin
  if not IsNT(OS) then Exit;
  List := TStringList.Create;
  try
    GetTrafficSets(List);
    lvTraffic.Items.BeginUpdate;
    try
      lvTraffic.Items.Clear;
      for I := 0 to List.Count - 1 do
      begin
        Traffic := TTraffic(List.Objects[I]);
        if Traffic <> nil then
        begin
          with lvTraffic.Items.Add do
          begin
            Caption := List[I];
            SubItems.Add(Traffic.MAC);
            SubItems.Add(IntToStr(Traffic.dwInOctets));
            SubItems.Add(IntToStr(Traffic.dwInOctets));
          end;
        end;
      end;
    finally
      lvTraffic.Items.EndUpdate;
    end;
  finally
    List.Free;
  end;
end;


procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  ShareRefreshActionExecute(nil);
  SessionRefreshActionExecute(nil);
  TrafficRefreshActionExecute(nil);
  FileRefreshActionExecute(nil);
  if LvFiles.Items.Count <> 0 then
    ShowMainForm(nil);
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  ShareRefreshActionExecute(nil);
  SessionRefreshActionExecute(nil);
  TrafficRefreshActionExecute(nil);
  FileRefreshActionExecute(nil);
  Timer1.Enabled := True;
end;

procedure TMainForm.FileRefreshActionExecute(Sender: TObject);
var
  List: TStrings;
  I: Integer;
  OS: Boolean;
  FileInfo3Obj: TFileInfo3Obj;
begin
  if not IsNT(OS) then Exit;
  List := TStringList.Create;
  try
    GetFiles(List);
    lvFiles.Items.BeginUpdate;
    try
      lvFiles.Items.Clear;
      for I := 0 to List.Count - 1 do
      begin
        FileInfo3Obj := TFileInfo3Obj(List.Objects[I]);
        if FileInfo3Obj <> nil then
        begin
          with lvFiles.Items.Add do
          begin
            Caption := List[I];
            SubItems.Add(FileInfo3Obj.fi3_pathname);
            SubItems.Add(FileInfo3Obj.fi3_username);
          end;
        end;
      end;
    finally
      lvFiles.Items.EndUpdate;
    end;
  finally
    List.Free;
  end;
end;

procedure TMainForm.lvSessionsMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  SessionCloseAction.Enabled := (lvSessions.Items.Count <> 0) and (lvSessions.Selected <> nil);
  N15.Enabled := SessionCloseAction.Enabled;
end;

procedure TMainForm.LvFilesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FileCloseAction.Enabled := (LvFiles.Items.Count <> 0) and (LvFiles.Selected <> nil);
end;

procedure TMainForm.FileCloseActionExecute(Sender: TObject);
begin
  if (lvFiles.Items.Count = 0) or (lvFiles.Selected = nil) then
    Exit;
  if Application.MessageBox('确实要关闭该会话吗?', '提示', MB_YESNO + MB_ICONQUESTION) <> ID_YES then
    Exit;
  CloseFile(lvFiles.Selected.Caption);
  lvFiles.Items.Delete(lvFiles.Selected.Index);
end;

procedure TMainForm.N13Click(Sender: TObject);
var
  Path: string;
begin
  if LvShares.Selected <> nil then
  begin
    Path := LvShares.Selected.SubItems[0];
    ShellExecute(0, 'explore', PChar(Path),
      nil, nil, SW_NORMAL);
  end;
end;

procedure TMainForm.N15Click(Sender: TObject);
var
  Name: string;
begin
  if LvSessions.Selected <> nil then
  begin
    Name := LvSessions.Selected.SubItems[0];
    Clipboard.AsText := Name
  end;
end;

procedure TMainForm.N16Click(Sender: TObject);
begin
  if FSendToNames.IndexOf(FCurNode.Text + '*') = -1 then
    FSendToNames.Add(FCurNode.Text + '*');
  EdToName.Text := EdToName.Text + FCurNode.Text + '*';
end;

procedure TMainForm.N19Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TMainForm.N17Click(Sender: TObject);
begin
  ShowMainForm(nil);
end;

procedure TMainForm.ShowMainForm(Sender: TObject);
begin
  TrayNotifyIcon1.HideTask := False;
end;


procedure TMainForm.WMSysCommand(var Msg: TMessage);
begin
  if (Msg.WParam = SC_CLOSE) then
    Msg.WParam := SC_MINIMIZE;
  inherited;
  if (Msg.WParam = SC_MINIMIZE) then
    TrayNotifyIcon1.HideTask := True;
end;

procedure TMainForm.WMHotkeyHandle(var Msg: Tmessage);
begin
  if (Msg.LParamHi = VK_RETURN) and (Msg.lparamLo = MOD_CONTROL) then
  begin
    if BtnOk.Enabled then
      BtnOkClick(nil);
    Msg.Result := 1;
  end;
end;

end.


界面dfm文件
object MainForm: TMainForm
  Left = 64
  Top = 98
  Width = 921
  Height = 577
  Color = clBtnFace
  Font.Charset = GB2312_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = '宋体'
  Font.Style = []
  OldCreateOrder = False
  WindowState = wsMaximized
  OnActivate = FormActivate
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 12
  object Splitter2: TSplitter
    Left = 0
    Top = 233
    Width = 913
    Height = 3
    Cursor = crVSplit
    Align = alTop
  end
  object Splitter3: TSplitter
    Left = 0
    Top = 446
    Width = 913
    Height = 3
    Cursor = crVSplit
    Align = alBottom
  end
  object StatusBar1: TStatusBar
    Left = 0
    Top = 531
    Width = 913
    Height = 19
    Panels = <>
    SimplePanel = False
  end
  object ToolBar1: TToolBar
    Left = 0
    Top = 0
    Width = 913
    Height = 41
    Caption = 'ToolBar1'
    TabOrder = 1
    Visible = False
    object ToolButton1: TToolButton
      Left = 0
      Top = 2
      Caption = 'ToolButton1'
      ImageIndex = 0
    end
    object ToolButton2: TToolButton
      Left = 23
      Top = 2
      Caption = 'ToolButton2'
      ImageIndex = 1
    end
  end
  object Panel1: TPanel
    Left = 0
    Top = 41
    Width = 913
    Height = 192
    Align = alTop
    Caption = 'Panel1'
    TabOrder = 2
    object Splitter1: TSplitter
      Left = 249
      Top = 1
      Width = 3
      Height = 190
      Cursor = crHSplit
    end
    object Splitter6: TSplitter
      Left = 641
      Top = 1
      Width = 3
      Height = 190
      Cursor = crHSplit
    end
    object gbxShares: TGroupBox
      Left = 1
      Top = 1
      Width = 248
      Height = 190
      Align = alLeft
      Caption = '共享文件'
      TabOrder = 0
      object Bevel1: TBevel
        Left = 2
        Top = 14
        Width = 244
        Height = 2
        Align = alTop
      end
      object LvShares: TListView
        Left = 2
        Top = 16
        Width = 244
        Height = 172
        Align = alClient
        BorderStyle = bsNone
        Columns = <
          item
            Caption = '名称'
            Width = 80
          end
          item
            AutoSize = True
            Caption = '文件夹路径'
          end>
        ColumnClick = False
        RowSelect = True
        PopupMenu = pmShare
        TabOrder = 0
        ViewStyle = vsReport
        OnMouseDown = LvSharesMouseDown
      end
    end
    object gbxSessions: TGroupBox
      Left = 252
      Top = 1
      Width = 389
      Height = 190
      Align = alLeft
      Caption = '会话'
      TabOrder = 1
      object bvlSessions: TBevel
        Left = 2
        Top = 14
        Width = 385
        Height = 2
        Align = alTop
      end
      object lvSessions: TListView
        Left = 2
        Top = 16
        Width = 385
        Height = 172
        Align = alClient
        BorderStyle = bsNone
        Columns = <
          item
            Caption = '计算机名'
            Width = 70
          end
          item
            Caption = '用户名'
            Width = 70
          end
          item
            Alignment = taRightJustify
            Caption = '打开连接数'
            Width = 100
          end
          item
            Caption = '连接时间'
            Width = 70
          end
          item
            AutoSize = True
            Caption = '空闲时间'
          end>
        ColumnClick = False
        RowSelect = True
        PopupMenu = pmSession
        TabOrder = 0
        ViewStyle = vsReport
        OnMouseDown = lvSessionsMouseDown
      end
    end
    object GroupBox3: TGroupBox
      Left = 644
      Top = 1
      Width = 268
      Height = 190
      Align = alClient
      Caption = '活动文件'
      TabOrder = 2
      object Bevel2: TBevel
        Left = 2
        Top = 14
        Width = 264
        Height = 2
        Align = alTop
      end
      object LvFiles: TListView
        Left = 2
        Top = 16
        Width = 264
        Height = 172
        Align = alClient
        BorderStyle = bsNone
        Columns = <
          item
            Caption = '序号'
          end
          item
            Caption = '文件路径'
            Width = 200
          end
          item
            AutoSize = True
            Caption = '用户名称'
          end>
        ColumnClick = False
        RowSelect = True
        PopupMenu = pmFiles
        TabOrder = 0
        ViewStyle = vsReport
        OnMouseDown = LvFilesMouseDown
      end
    end
  end
  object Panel2: TPanel
    Left = 0
    Top = 449
    Width = 913
    Height = 82
    Align = alBottom
    Caption = 'Panel2'
    TabOrder = 3
    object gbxTraffic: TGroupBox
      Left = 1
      Top = 1
      Width = 911
      Height = 80
      Align = alClient
      Caption = '适配器'
      TabOrder = 0
      object bvlTraffic: TBevel
        Left = 2
        Top = 14
        Width = 907
        Height = 2
        Align = alTop
      end
      object lvTraffic: TListView
        Left = 2
        Top = 16
        Width = 907
        Height = 62
        Align = alClient
        BorderStyle = bsNone
        Columns = <
          item
            Caption = '设备名称'
            Width = 300
          end
          item
            Caption = '地址(MAC)'
            Width = 300
          end
          item
            Alignment = taRightJustify
            Caption = '接收'
            Width = 100
          end
          item
            Alignment = taRightJustify
            AutoSize = True
            Caption = '发送'
          end>
        ColumnClick = False
        RowSelect = True
        PopupMenu = pmTraffic
        TabOrder = 0
        ViewStyle = vsReport
      end
    end
  end
  object PnlMsg: TPanel
    Left = 0
    Top = 236
    Width = 913
    Height = 210
    Align = alClient
    Caption = 'PnlMsg'
    TabOrder = 4
    object Splitter4: TSplitter
      Left = 249
      Top = 1
      Width = 3
      Height = 208
      Cursor = crHSplit
    end
    object PnlClnt: TPanel
      Left = 252
      Top = 1
      Width = 660
      Height = 208
      Align = alClient
      BevelOuter = bvNone
      Caption = 'PnlClnt'
      TabOrder = 0
      object PnlClntTop: TPanel
        Left = 0
        Top = 0
        Width = 660
        Height = 68
        Align = alTop
        BevelOuter = bvNone
        TabOrder = 0
        object GroupBox2: TGroupBox
          Left = 0
          Top = 0
          Width = 660
          Height = 68
          Align = alClient
          Caption = '信息发送'
          TabOrder = 0
          object Label1: TLabel
            Left = 7
            Top = 15
            Width = 48
            Height = 12
            Caption = '发送到:'
          end
          object Label2: TLabel
            Left = 7
            Top = 39
            Width = 60
            Height = 12
            Caption = '本机器名:'
          end
          object EdToName: TEdit
            Left = 66
            Top = 10
            Width = 586
            Height = 20
            Anchors = [akLeft, akTop, akRight]
            TabOrder = 0
            OnChange = EdToNameChange
          end
          object EdFrom: TEdit
            Left = 66
            Top = 35
            Width = 588
            Height = 20
            Anchors = [akLeft, akTop, akRight]
            TabOrder = 1
          end
        end
      end
      object PnlClntBtm: TPanel
        Left = 0
        Top = 175
        Width = 660
        Height = 33
        Align = alBottom
        BevelInner = bvLowered
        BevelOuter = bvNone
        TabOrder = 1
        object BtnOk: TButton
          Left = 500
          Top = 5
          Width = 75
          Height = 23
          Anchors = [akTop, akRight]
          Caption = '发送(&O)'
          Default = True
          Enabled = False
          TabOrder = 0
        end
        object BtnClose: TButton
          Left = 580
          Top = 5
          Width = 75
          Height = 23
          Anchors = [akTop, akRight]
          Caption = '退出(&Q)'
          TabOrder = 1
          OnClick = BtnCloseClick
        end
      end
      object GroupBox1: TGroupBox
        Left = 0
        Top = 68
        Width = 660
        Height = 107
        Align = alClient
        Caption = '内容:'
        TabOrder = 2
        object MemoContents: TMemo
          Left = 2
          Top = 14
          Width = 656
          Height = 91
          Align = alClient
          TabOrder = 0
        end
      end
    end
    object Panel3: TPanel
      Left = 1
      Top = 1
      Width = 248
      Height = 208
      Align = alLeft
      Caption = 'Panel3'
      TabOrder = 1
      object TvComputer: TTreeView
        Left = 1
        Top = 1
        Width = 246
        Height = 206
        Align = alClient
        Images = TreeImageList
        Indent = 19
        PopupMenu = pmTree
        ReadOnly = True
        TabOrder = 0
        OnClick = TvComputerClick
        OnContextPopup = TvComputerContextPopup
      end
    end
  end
  object TreeImageList: TImageList
    Left = 168
    Top = 320
    Bitmap = {
      494C010108000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000003000000001002000000000000030
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000F9F5F600E3CED600D1ADBB00C394A600B8859900C192A400D0ACBA00E3CE
      D600F9F5F6000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000007349
      5A0073495A0073495A009C757300000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000000000000000ECDE
      E300CFABB900BE8C9F00C090A300C091A400C091A300BD8C9F00BA869A00B781
      9600CDA8B700ECDEE30000000000000000000000000000000000000000000000
      0000FBD4D100F6958E00F1605500EE3B2D00EE3B2D00F1605500F6958E00FBD4
      D1000000000000000000000000000000000000000000BDA6A500DECFCE00DED3
      D600DECBCE00D6C3C600D6B6B500B586840073495A0000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000ECDEE400CBA4
      B300C395A700C79DAE00CAA3B300CBA5B300CBA3B200C79DAD00C295A600BC8B
      9E00B7829700C69CAC00ECDEE30000000000000000000000000000000000F8AA
      A400F0554900EE392B00EE3B2E00EE392B00ED332500ED2C1D00ED2C1D00F04F
      4200F8AAA400000000000000000000000000C6AEAD00E7E7E700E7E7E700DEDF
      DE00DED3D600CEB2B5009C929400AD7D7B00CEA2A50073495A00000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000F9F5F600D1AFBD00C498
      A900CCA5B400D2AFBD00D5B6C200D7B9C500D5B6C300D1AFBD00CBA4B400C498
      A900BD8B9E00B7819600CDA8B700F9F5F6000000000000000000F8ACA600F04A
      3E00F04E4100F1584C00F15B5000F0574C00F04E4100EF403200ED322300ED2C
      1D00EE382900F8AAA4000000000000000000E7E7E700F7F3F700F7F3F700E7E7
      E700DED7D600E7D7D600AD868400AD868400CEA6A5009C696B00000000009C75
      730073495A000000000000000000000000000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000E4D0D800C294A600CBA5
      B300D4B4C100DBC0CA00DFC8D100E2CCD400E0C8D100DBC0CA00D4B4C100CBA5
      B300C294A600BA869B00B7819600E3CED60000000000FCD5D200F2645900F15B
      4F00F26E6400F37B7100F3807600F37B7200F36E6300F15B4F00EF453800ED32
      2300ED2C1D00F04F4200FBD4D10000000000CEB2B500F7F3F700F7EFEF00EFEB
      EF00D6BEBD00D6AAAD00BD797B00BD717300CEA6A5009C696B00D6B2B500D6B2
      B500ADA2A5009C75730073495A00000000000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000D4B4C000C79EAD00D2AF
      BC00DBC0CA00E3CFD700EBDAE100EDE0E500EADAE100E4CFD700DBC0CB00D2B0
      BD00C79DAD00BD8C9F00B7819600D0ACBA0000000000F79F9900F15B5000F376
      6D00F58D8400F69C9400F7A19A00F69C9400F58D8400F3776D00F05B4F00EF40
      3200ED2C1D00ED2C1D00F6958E000000000000000000DEB6B500F7CB9C00D69A
      9C00C68E8C00C6757300C66D6B00CE696B00DECBCE00DEC3C600DEBABD00D6A2
      A500B59E9C00B59E9C00ADA2A50073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000C89FB000CAA2B200D6B6
      C200DFC9D200EBDBE000F4EBEE00F8F2F400F4EBEE00EADBE100DFC8D100D5B7
      C300CAA3B200C090A300B8829700C192A40000000000F37A7000F36E6400F58D
      8500F7A6A000F9BCB700FAC4C000F9BCB700F7A7A100F48D8500F36F6400F04E
      4200EE332500ED2C1D00F16055000000000000000000D6AEAD00FFA21000FFAA
      2100FFB64A00DEAAAD00C66D6B00B5696B00DEC3C600CE9E9C00D6A2A500D6B2
      B500AD8684009C696B00B592940073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000C294A400CBA5B300D7B9
      C500E1CCD400EDDFE500F8F3F40000000000F8F2F400EDE0E400E2CBD400D7B9
      C500CBA5B300C192A300B8849700B883980000000000F1635900F37A7200F69B
      9400F9BCB700FBD9D600FCE7E400FBD9D600F9BCB700F69C9500F37B7200F057
      4B00EE392B00ED2C1D00EE3B2D000000000000000000D6B2B500FFB63100FFB6
      3900FFBA3900FFBA3900FFB63900EFB66B00CE797B00DEAAAD00DEBABD00CEAA
      AD00BD8E8C00AD7D7B00B586840073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000C99FAF00CBA3B200D6B6
      C300E0C8D200EADBE100F3EBEE00F7F2F400F4EBEE00EADBE100E0C8D200D5B6
      C300CAA2B200BF90A300B8829700C192A40000000000F2675C00F47F7700F6A0
      9A00F9C5C100FCE6E500FEFEFE00FDE6E400F9C5C100F6A19A00F37F7600F15B
      4F00EE3B2E00ED2C1D00EE3B2D000000000000000000CEA6A500FFBE4A00FFC3
      5200FFC75200FFC75A00FFC35200FFBE4A00FFBA4200CE696B00DEBABD00D6A2
      A500BD8E8C00CE9A9C00B582840073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000D4B4C000C79DAD00D2AF
      BD00DBC0CB00E4CFD700EBDBE100EDE0E500EADBE000E4CFD700DBC0CB00D1B0
      BD00C79DAD00BD8C9F00B7819600D0ACBA0000000000F4817800F47B7200F69B
      9400F9BCB700FBD9D700FCE6E500FBDAD700F9BCB700F69C9400F37B7200F057
      4C00EE392B00ED2C1D00F16055000000000000000000C6A28400FFCB5A00FFCF
      6B00FFD36B00FFD36B00FFCF6B00FFCB6300FFC35200CE828400DEBABD00D6A2
      A500BD8A8C00AD7D7B00AD75730073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000E5D0D800C294A600CBA5
      B400D4B4C100DBC0CB00E0C8D100E1CBD400E0C8D100DBC0CB00D4B4C000CCA5
      B400C295A700BA869A00B7819600E3CED60000000000F7A6A000F26E6400F48C
      8500F7A7A100F8BCB700F9C4C100F9BCB700F7A6A000F58D8500F36E6400F04E
      4100ED342500ED2C1D00F6958E0000000000D6B6B500DEA67300FFD37300FFDB
      7B00FFDF8400FFDF8C00FFDB8400FFD77B00FFCB6300CE969400DEBABD00D6A2
      A500BD8E8C00C68E8C00B582840073495A000000000000000000000000000000
      00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
      FF000000000000000000000000000000000000000000F9F5F600D1AFBD00C498
      A900CBA5B400D2AFBD00D6B6C200D7B9C400D6B6C300D1B0BD00CBA5B400C498
      A900BD8B9E00B7819600CDA8B700F9F5F60000000000FCD8D500F3766C00F377
      6D00F58D8400F69C9500F7A09A00F69B9400F48D8500F3776D00F15B5000EF40
      3300ED2C1D00F04F4200FBD4D10000000000D6B6B500FFD37300FFDF8400FFE3
      9400FFEB9C00FFEBA500FFE79C00FFE38C00FFD77B00D6AEAD00DEBABD00CE96
      9400C6757300AD6D6B00AD75730073495A000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000ECDEE400CBA4
      B300C294A600C89DAD00CAA3B200CBA4B400CBA3B200C79DAE00C394A700BD8B
      9E00B7829700C69CAC00ECDEE300000000000000000000000000F9B4AF00F264
      5A00F26E6400F47B7100F37F7600F37B7100F26E6400F15B4F00EF453800ED32
      2300EE382900F8AAA4000000000000000000F7EFEF00FFDB7B00FFE39400FFEF
      AD00FFF3B500FFF7BD00FFF3AD00FFEB9C00FFDF8C00E7C3C600EFDBDE00FFFB
      FF00DEAAAD00CE696B00CE6D6B0073495A000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000000000000000000000000000ECDE
      E300CFACBA00BE8C9F00C090A200C191A400C090A300BE8C9F00BB869B00B781
      9600CDA8B700ECDEE3000000000000000000000000000000000000000000F8B2
      AD00F26A6100F1574B00F15B5000F0584C00F04E4100EE403200ED312300F04F
      4200F8AAA400000000000000000000000000EFEBEF009C929400BD9E9400D6C3
      AD00FFFFCE00FFFFCE00FFFBC600FFEFAD00EFC78C00EFCFCE00EFCFCE00EFCF
      CE00EFCFCE00D6AEAD00D6AEAD00000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000F9F5F600E3CED600D0AEBB00C294A600B9849A00C192A400D0ACBA00E3CE
      D600F9F5F6000000000000000000000000000000000000000000000000000000
      0000FBD5D300F69C9500F26B6100EF473A00EF413300F1605500F6958E00FBD4
      D10000000000000000000000000000000000D6B6B500D6B6B500C6BABD00DED3
      D600DECBCE00BDA6A500AD868400B59A8C00C6A28400BD929400000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000D6B6B500D6B6B500D6B6B500D6B6B50000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600000000000000000000000000000000000000000000000000000000000000
      000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00
      0000000000000000000000000000000000000000000000000000000000000000
      0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
      FF00000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000424D3E000000000000003E000000
      2800000040000000300000000100010000000000800100000000000000000000
      000000000000000000000000FFFFFF0000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000FFFFF007FFFFE1FFFFFFE003F00F807F
      FFFFC001E007003FFFFF8000C0030027F00F800080010001F00F800080018000
      F00F800080018000F00F810080018000F00F800080018000F00F800080018000
      F00F800080010000F00F800080010000FFFFC001C0030000FFFFE003E0070001
      FFFFF007F00F003FFFFFFFFFFFFFF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00F
      F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00F
      F00FF00FF00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
      000000000000}
  end
  object pmShare: TPopupMenu
    Images = NetImageList
    Left = 48
    Top = 136
    object N1: TMenuItem
      Action = ShareRefreshAction
    end
    object N4: TMenuItem
      Caption = '-'
    end
    object N2: TMenuItem
      Action = ShareCloseAction
    end
    object N3: TMenuItem
      Action = ShareAddAction
    end
    object N12: TMenuItem
      Caption = '-'
    end
    object N13: TMenuItem
      Caption = '打开目录'
      OnClick = N13Click
    end
  end
  object pmSession: TPopupMenu
    Images = NetImageList
    Left = 144
    Top = 136
    object N5: TMenuItem
      Action = SessionRefreshAction
    end
    object N6: TMenuItem
      Caption = '-'
    end
    object N7: TMenuItem
      Action = SessionCloseAction
    end
    object N14: TMenuItem
      Caption = '-'
    end
    object N15: TMenuItem
      Caption = '复制计算机名'
      Enabled = False
      OnClick = N15Click
    end
  end
  object pmTraffic: TPopupMenu
    Images = NetImageList
    Left = 81
    Top = 136
    object N8: TMenuItem
      Action = TrafficRefreshAction
    end
  end
  object ActionList1: TActionList
    Images = NetImageList
    Left = 84
    Top = 98
    object ShareRefreshAction: TAction
      Category = 'Share'
      Caption = '刷新'
      ImageIndex = 0
      OnExecute = ShareRefreshActionExecute
    end
    object ShareAddAction: TAction
      Category = 'Share'
      Caption = '新建共享'
      ImageIndex = 1
      OnExecute = ShareAddActionExecute
    end
    object ShareCloseAction: TAction
      Category = 'Share'
      Caption = '停止共享'
      Enabled = False
      ImageIndex = 2
      OnExecute = ShareCloseActionExecute
    end
    object SessionRefreshAction: TAction
      Category = 'Session'
      Caption = '刷新'
      ImageIndex = 0
      OnExecute = SessionRefreshActionExecute
    end
    object SessionCloseAction: TAction
      Category = 'Session'
      Caption = '关闭会话'
      Enabled = False
      ImageIndex = 1
      OnExecute = SessionCloseActionExecute
    end
    object TrafficRefreshAction: TAction
      Category = 'Traffic'
      Caption = '刷新'
      ImageIndex = 0
      OnExecute = TrafficRefreshActionExecute
    end
    object FileRefreshAction: TAction
      Category = 'Files'
      Caption = '刷新'
      ImageIndex = 0
      OnExecute = FileRefreshActionExecute
    end
    object FileCloseAction: TAction
      Category = 'Files'
      Caption = '关闭活动文件'
      Enabled = False
      ImageIndex = 2
      OnExecute = FileCloseActionExecute
    end
  end
  object NetImageList: TImageList
    Left = 124
    Top = 98
    Bitmap = {
      494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000001000000001002000000000000010
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000C8C8C8FFF7F7F7FF0000
      0000000000000000000000000000000000000000000000000000000000000000
      00000000000000000000000000000000000000000000C8C8C8FFF7F7F7FF0000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400C6C6C600C6C6
      C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
      C600C6C6C600000000000000000000000000ACB9ACFF11B227FF0C9D1BFF156E
      19FF5F715FFFBEBEBEFFF4F4F4FF000000000000000000000000000000000000
      000000000000000000000000000000000000C0B1B0FFD16E3DFFC15B37FF9244
      37FF7A6565FFBEBEBEFFF4F4F4FF000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF0084E7E700FFFFFF0084E7E70000A5420084E7E700FFFFFF0084E7E700FFFF
      FF00C6C6C60000000000000000000000000091A191FF18992EFF15B82CFF13B8
      2CFF14B82BFF13B82AFF0DA51EFF0E7713FF536A53FFB7B7B7FFF0F0F0FF0000
      000000000000000000000000000000000000AC9797FFD0703FFFD06E3FFFCF6D
      3DFFCE6C3CFFD06C3BFFC76138FFA14534FF775A5BFFB6B6B6FFF0F0F0FF0000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF0084E7
      E700FFFFFF0084E7E70000A5420000A54200FFFFFF0084E7E700FFFFFF0084E7
      E700C6C6C600000000000000000000000000769976FF39BF6AFF26BD3CFF1CB9
      32FF13B72AFF14B72BFF15B82CFF15B82CFF14B72BFF13B82BFF0FAD23FF067F
      0CFF00000000000000000000000000000000AD8583FFCC6D40FFD0703FFFD06D
      3FFFCE6C3EFFCF6D3CFFCF6D3DFFCF6D3DFFCE6C3CFFCF6B3BFFCD6639FFA742
      30FF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF0084E7E70000A5420000A5420000A5420000A5420000A5420084E7E700FFFF
      FF00C6C6C6000000000000000000000000005B8B5BFF49D380FF4BC95DFF41C4
      54FF39C34CFF32C146FF1BB931FF14B72BFF15B82CFF15B82CFF15B82CFF0BAB
      1DFFB3D2B3FF000000000000000000000000A07270FFCA7655FFD37B50FFD175
      48FFCF6E3EFFD06D3DFFCF6C3CFFCF6D3DFFCF6D3DFFCF6D3DFFCF6D3DFFC761
      36FF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF0084E7
      E700FFFFFF0084E7E70000A5420000A54200FFFFFF0084A500008463000084E7
      E700C6C6C600000000000000000000000000448249FF52D283FF36A141FF65D0
      74FF5DCC6CFF54C965FF4BC85CFF42C555FF12B62AFF15B82CFF15B82CFF0BA9
      1CFF30B63CFF0000000000000000000000009B6561FFC77960FFDC946FFFDA8D
      68FFD78861FFD6845CFFD17649FFCE6C3EFFCF6D3DFFCF6D3DFFCF6D3DFFC963
      35FF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF0084E7E700FFFFFF0084E7E70000A5420084E7E700FFFFFF0084630000FFFF
      FF00C6C6C6000000000000000000000000002F8936FF5DD48BFF37AB57FF8DDC
      98FF82D88EFF7AD687FF70D37EFF65D076FF5DCD6DFF47C658FF11B62AFF0AA8
      1AFF3BC247FFEFF4EFFF0000000000000000AE615AFFC07766FFE1A98BFFE1A2
      85FFDF9E7EFFDC9775FFDA936EFFD88862FFCE6D3CFFCF6D3CFFCF6D3DFFC661
      35FF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF0084E7
      E7008463000084E7E700FFFFFF0084E7E700FFFFFF0084E7E7008463000084E7
      E700C6C6C60000000000000000000000000021862CFF6AD793FF69D994FFB6EA
      BCFFABE5B3FFA0E2A9FF97DFA1FF8DDC98FF82D88EFF7AD587FF70D37EFF61C6
      6BFF67CF71FF30A037FF0000000000000000AF5D55FFC58375FFE8BEA8FFE8B7
      A1FFE6B399FFE3AE93FFE1A88CFFDFA383FFDF9E7FFFD27447FFCE6B3BFFC35F
      33FF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF0084630000FFFFFF0084E7E70000A5420084E7E700FFFFFF0084E7E700FFFF
      FF00C6C6C600000000000000000000000000268C34FF77DA9CFF73DA9AFF73DB
      9BFF52BD73FF39A54FFF54AA5CFFB6E9BCFFA9E3B1FFA0E2A9FF97DFA1FF86D3
      8EFF96DE9CFF91DD98FF0000000000000000B4685EFFC38376FFEFD1C2FFEECC
      BBFFEBC7B5FFEBC1ADFFE9BCA8FFE6B8A1FFE6B39AFFE4AC91FFE2A88CFFD898
      7EFFF3F0F0FF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF0084E7
      E7008463000084A50000FFFFFF0000A5420000A5420084E7E700FFFFFF0084E7
      E700C6C6C600000000000000000000000000389846FF85DDA5FF82DDA3FF7DDC
      A1FF7ADA9FFF78DB9BFF73DA99FF5BC47DFFBFEAC4FFC8EFCDFFBEEDC5FFAEE1
      B4FFB5E8BAFFADE5B3FF64A865FF00000000BE7B71FFF7DAC9FFDBAA9BFFC685
      76FFC6867AFFECCCBDFFEED0C1FFEECCBBFFEBC7B5FFEBC1ADFFE9BDA8FFE1B1
      9CFFEEE1E0FF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF0084E7E70000A5420000A5420000A5420000A5420000A5420084E7E700FFFF
      FF00C6C6C6000000000000000000000000004DA55BFF92E0ADFF8FE0AAFF8CDF
      A8FF89DDA6FF86DEA4FF81DDA2FF7FDBA1FF7EDCA1FF79DD9FFF73DA9AFF176F
      1CFF9ABB99FF64A866FF66B26AFF00000000C99085FFF8E0D1FFF6DAC9FFF4D4
      C3FFF2CDBBFFE4B5A1FFDBB0A6FFF3DACFFFF4DCCFFFF2D7C9FFEFD1C2FFE8C5
      B6FFD9B7B5FF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF00FFFFFF00FFFFFF00FFFFFF0000A5420000A5420084E7E700FFFFFF00C6C6
      C600C6C6C600000000000000000000000000308D38FF9DE3B5FF9BE1B2FF98E2
      B2FF95E1B0FF8EDDAAFF84D59EFF86D9A2FF88DCA6FF86DDA6FF83DEA5FF2673
      2CFF00000000000000000000000000000000B76D65FFFAE6D9FFF9E2D4FFF7DC
      CCFFF5D7C6FFF0CCBBFFEABDAAFFECBDA9FFECBBA3FFE7AE95FFCE8873FF9848
      3FFFE8DAD9FF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF00FFFFFF00FFFFFF00FFFFFF0000A5420084E7E700FFFFFF00000000000000
      000000000000000000000000000000000000D1D5D1FF9BDAAEFFA3E2B8FFA2E4
      B9FF9CDFB2FF3D793EFF0000000000000000CFD2CFFF90A390FF588A59FF95AA
      95FF00000000000000000000000000000000D8D2D1FFF3DED1FFF9E6D9FFF8E3
      D6FFF5DACBFF935A58FF0000000000000000D4D0D0FFAD9797FFA16F6DFFB49E
      9EFF000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF00FFFFFF00FFFFFF00FFFFFF0084E7E700FFFFFF0084E7E70084848400FFFF
      FF00000000000000000000000000000000000000000000000000D7DDD7FF9EBA
      9EFF8AB58BFF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000DFD9D9FFC6AB
      AAFFC79F9DFF0000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400FFFFFF00FFFF
      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00848484000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000084848400848484008484
      8400848484008484840084848400848484008484840084848400848484000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      000000000000000000000000000000000000424D3E000000000000003E000000
      2800000040000000100000000100010000000000800000000000000000000000
      000000000000000000000000FFFFFF0080039FFF9FFF0000800301FF01FF0000
      8003001F001F00008003000F000F000080030007000F000080030007000F0000
      80030003000F000080030003000F000080030003000700008003000100070000
      80030001000700008003000F000700008003030F030F00008007C7FFC7FF0000
      800FFFFFFFFF0000801FFFFFFFFF000000000000000000000000000000000000
      000000000000}
  end
  object Timer1: TTimer
    Enabled = False
    Interval = 10000
    OnTimer = Timer1Timer
    Left = 409
    Top = 483
  end
  object pmFiles: TPopupMenu
    Images = NetImageList
    Left = 185
    Top = 136
    object N11: TMenuItem
      Action = FileRefreshAction
    end
    object N10: TMenuItem
      Caption = '-'
    end
    object N9: TMenuItem
      Action = FileCloseAction
    end
  end
  object pmTree: TPopupMenu
    Left = 113
    Top = 136
    object N16: TMenuItem
      Caption = '将本工作组加入发送列表'
      Enabled = False
      OnClick = N16Click
    end
  end
  object PopupMenu1: TPopupMenu
    Left = 716
    Top = 337
    object N17: TMenuItem
      Caption = '显示主窗体'
      OnClick = N17Click
    end
    object N18: TMenuItem
      Caption = '-'
    end
    object N19: TMenuItem
      Caption = '退出'
      OnClick = N19Click
    end
  end
end

本文地址:http://com.8s8s.com/it/it4526.htm