充分利用局域网中的共享资源,无疑将减少用户的硬件和软件投资。在我们的程序中,常常会需要列举局域网络中的共享资源,如在MIDAS多层应用程序中可能要选择上层应用程序所在的服务器的名称、在打印模块中选择可用的网络打印机、在应用程序中选择其它机器上的共享文件等。 +(z_"[l"
V`g\ja*Y
$_ix6z
[ GR|$/(z=
以一个MIDAS三层数据库应用程序为例子,我们可以用DELPHI制作一个客户端应用程序和一个中间层业务处理程序,由中间层业务处理程序向数据库存取数据,再将结果反馈到客户端。当客户端应用程序与中间层程序和数据库服务程序不在一台机器上时,需要指定中间层程序和数据库服务程序所在的服务器的名称。 uG=t?C6
V4`:Vci Aw
>}<29Ii
*or2
在DELPHI程序中,我们可以通过WIN API来列举局域网络中的服务器名称、用户计算机名称、用户共享目录和文件、共享打印机等资源,这些API由文件MPR.DLL提供。 ot@|blVC8
'ZGT`'ri
yD3bl%uZ
YW?7*go'Z
下面以WIN9X的对等网络为例子,列举“网络邻居”中的工作组名称、用户计算机名称、共享目录和文件、共享打印机等资源。 24H^hN9
[!J
@a
#MhNdH#
zj~nnfoys
一、列举“网络邻居”中的工作组名称 $z2xZqe
s6uF5]M;2
P9
{}&z%:
bU;}!iVc]
在“网络邻居”中,打开“整个网络”,可以看到网络中的所有工作组的名称。在DELPHI程序中,可以用API函数WNetOpenEnum和WNetEnumResource来列举“网络邻居”中的工作组名称。 >W`S(a Mn
aW0u8Dz
0kU3my]
U8-Q'1IT&
下面是两个API函数的简介,具体请参见DELPHI帮助文件。 /*u#Ba<<
vF9*tK'
<Jwi~I=^
6Gs{nFw
//WNetOpenEnum用于获取一个网络资源句柄,作为WNetEnumResource列举网络资源的依据,其函数原型如下: ki;!WhF~
+"k.E
x0:
W<\ kf4Y
.abyYVrN4?
function WNetOpenEnum( snXB`UC
[NHg&R H
q%OcLZ<,
E:08%4O
dwScope,//网络范围,RESOURCE_CONNECTED(已连接机器),RESOURCE_GLOBALNET(所有机器), WW//heJe-
p&i.)/
'8s>rH5[V
N7e`6d!
RESOURCE_REMEMBERED(已记忆的机器) zWy
,Om8P
44\!PYf7
CTl(_g
W*YxBn4
dwType,//资源类型,RESOURCETYPE_ANY(所有资源),RESOURCETYPE_DISK(文件资源), _^_5K(Uq
*-?Wcz
yOX&cZ[
7#~4{rjg
RESOURCETYPE_PRINT(打印资源) 5JS ZLC
)D:9R)m
)HEfU31IC
By2s ']bw
dwUsage//资源用途,0(所有资源),RESOURCEUSAGE_CONNECTABLE(所有可连接资源), 4F}Pu<;
ec`bz "1
:~vxZ*a
j3
6,w[Y:
RESOURCEUSAGE_CONTAINER(所有container资源)仅在dwScope为RESOURCE_GLOBALNET是有效: DWORD; 2Oyy`k
gh TcB
T36x=LX
XAkK:}h
lpNetResource: PNetResource;//NetResource类型指针,其内存表示网络资源的层次,为NIL时 C`dkD0_
},rav]
BY3bpR
1hR
(N
表示最上层,仅在dwScope为RESOURCE_GLOBALNET时有效,其它情况时应为NIL yB.G=90
Yg/}ghF\
BYS lKTh
xZX`%f-
var lphEnum: THandle//返回网络资源句柄,是WNetEnumResource进一步列举网络资源的依据 RoX
&+~
fb23J|"
auRY|j
md?b*
): DWORD; stdcall;返回值NO_ERROR表示执行成功,否则应用GetLastError获取错误信息 }<=3W5+
?{eY\I
Kv}k*A% S
{&-#s#&
//WNetEnumResource用于列出当前网络中可用的资源,包括文件资源和打印资源,其函数原型如下: fe|g3>/|
k=?^){[We
h}h^L+4
TtPr)F|
function WNetEnumResource(hEnum: THandle;//WNetEnumResource进一步列举网络资源的依据,通常由WNetOpenEnum取得var lpcCount: DWORD;//要取得资源的数目,$FFFFFFFF表示列出所有资源,返回值为实际资源数目lpBuffer: Pointer;//接收结果的缓冲区的指针,一般是NetResource类型的数组var lpBufferSize: DWORD//接收结果的缓冲区大小(Byte)): DWORD; stdcall;返回值为NO_ERROR(执行成功)或ERROR_NO_MORE_ITEMS(资源列举完毕),否则应用GetLastError获取错误信息。 R"Kz!NTB
RwW$O@0
lkb2?2\+
wZjlHe
oE1M/*myS
c_#*mA"+
+oZH?N4yaM
}z
wX
要列举网络中的工作组信息,首先要获取网络中的网络类型,再获取每一种类型网络中包含的工作组的名称。 TiyUr [
F}D3,&9N
<4c%Q)
9*\g`fWc}{
1、获取网络类型信息 -(9O6)Rs$
n3$gx,KL
d`Oe_<
Yl~$V(
局域网中可以是由多种类型的网络组成,如由Microsoft、Novell等类型的网络组成。用API mw4JQ\
@r<b:?u
>
H BJk:
89Z#|#uM5
函数WNetOpenEnum和WNetEnumResource可以获取网络类型信息。 B`{mdjMy
_{$fA6C
Lc]1$
#byJqy&e
(1)用WNetOpenEnum函数返回一个句柄,作为WNetEnumResource列举网络资源的依据。我们的目 z]=8eV\
zsVcXBz
u1^\MVO8
1k[GuG%/K
标是列举“整个网络”的工作组名称,因而网络范围为RESOURCE_GLOBALNET(所有机器)、资源类 `\N]wlB2/b
MDHb'<o?y
@?Zf-.
^=+e?F`:{
型为RESOURCETYPE_DISK(文件资源)、资源用途为RESOURCEUSAGE_CONTAINER(所有container资源)、 b7Oj<!Wo`
u,o1{%O
Vb!O8xV4;+
E^wyD-ii/
网络层次为最高层(NIL),这样可以得到一个句柄,以便进一步列举网络资源。具体的程序段如下: oa`#RC8N
I^_NC&m
,Dp0fauJ
yMxTfR
{ Res : DWORD; lphEnum : THandle; } Z\ )C_p\-
68e[:wf
S^N{wZo
wL3,g2- L
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 89HsPB1"t
|m;L?)F<
}mk>!B}=
`}fw1X5L
RESOURCEUSAGE_CONTAINER, Nil,lphEnum); 4 1t)(+r
A@$kLex
"9XfQ"P
|PP.<ce\-
If Res NO_ERROR Then exit;//执行失败 KX4],B5 +
5 1dSFr<#
& mt)d
4W;S=#1
(2)用API函数WNetEnumResource可以获取网络类型信息,此时要用到上面获取的句柄lphEnum, LFf`K)q
tR)H~l7q
RMP9y$~3pU
2SG$LIV 9Y
可以获取一个NetResource类型的数组,每个NetResource元素即为一种网络类型信息。 7L3ik;>
|+}G|hx@9
73F5d/n
f p[,C1U
具体的请参见以下程序段及注释信息。 "G?Yrh
<1 "+,}'x
u:dx;*
w>e
s
type ,[!LCXp
$`J_:H%
M;.ZM<Ga
/+|#^:@
TNetResourceArray = ^TNetResource;//网络类型的数组 /4irAG% Oj
ae+*=,
Var tTanW2C
HM9fjl[
\6!W05[ Q
H/fUM
NetResource : TNetResource; %)(Cp-b!
s:>\/[*>0c
6'-As=iw
6iA( o*'Yn
Buf : Pointer; Y.6SOu5$]
5&!c7$K0
W!L+(!&H
quxdG>8
Count,BufSize,Res : DWORD; v|';!p|
CH#k(sy
B&?sF" Y
c1XX~8
lphEnum : THandle; PkuTg";
>SbK.Q@ei
yd_
(?V&;_
9pKGr@ &
p : TNetResourceArray; 9&]M**X
7:E!b=o#
!ZXUPH
yV_wDeAz
i,j : SmallInt; ~ 5"JzT
5\fCd|
DGESba\2+
0%`4px4J
NetworkTypeList : TList;begin XzIx:J6
5*g]qJF
nw:-J1kWR
5` D-
...... c]k*}W3T
Ol_q{^
pc]J[ S?P
O[@q%&_
Count := $FFFFFFFF;//不限资源数目 W i.5Y{
!U%T&?E l
q!~ -(&S
s"KJiQKGM
BufSize := 8192;//缓冲区大小设置为8K gY-5_Ab
R\3VB NX.g
W#fZ1E6
AM"jX"F9/
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息 OPJ: XbG
d~J-|yyT
&
WOiik
72uz<i!&$
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);//获取网络类型信息 >4` dy
zw<p74DH
qFX~[h8i+
ym,H@~
If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕 :(|'S4z
E(pF:po
:'L2J
Oc].@Jy
or (Res NO_ERROR )//执行失败 eYUr-rN+)z
pW0dB_
Yj|eji7y
aVs(EHF
Then Exit; 1+;C`bnA
Ox!U8g8c
RrZM&lXY
Jq.lT(E8D
P := TNetResourceArray(Buf); gU^$Sx7'
s'aip5P
OI1ud/>h
cLa]D[H
For I := 0 To Count - 1 Do//记录各个网络类型的信息 KOq;jH{$
!rDdd%Z
d6{Gt"
thi1kJ`L
Begin dCe4u<so\
h}_~y'^!
0kQPJWF
\6?A!w~6
NetworkTypeList.Add(p); b !@Sn/
%
}|cb7l
up3O|lj4
`i) 2nNJ"
Inc(P); c3*t_!@oC
,r^M?>
_\PNr.D8
9j]sD/L5q
End; n~V4nj&_T
N..j{FE
p^nL&yIW,%
=(a1+.O
......end; OH^N" L
heaR X4
"LYh7:0s!k
;@,Q&B2eM
2、获取工作组信息 l+V,DCE
`~eX55W
4nH*Ui!T
EV#MQM
在获取网络类型信息后,可以根据此信息获取此类型网络中的服务器(工作组)信息。 oRKEJNps
x83
!C}4:
TSAU?r\P
9][(Iu]h7
在WNetOpenEnum函数中,将参数lpNetResource指定为一种网络类型信息,可以获取一个句柄,在WNetEnumResource中利用这个句柄,可以获取一个NetResource类型的数组,每个NetResource元素的lpRemoteName部分即为一个工作组名称(如“MyWorkGroup”)。 _rV 5E
Iz6y{E
id<:p*
F-D]TRG/*]
具体的请参见以下程序段及注释信息。 9Suu-A
ZvYLL{>}w
w{~+EolK
pME{jD
//列出一个网络类型中的所有工作组名称 Wk:hFHs3
9jN)I(^D6
I/VxZ8T
:+{ ?
NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回句柄 ;U1UFqZ`
|9"p|6G?B
I$Qs;- (
c`lJu_
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, JOjoiA
;!o]wHmA
t NsPB6Z
\;VhYvEH
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); S[tE&[$(p
#-3=o6DCK
hlu:=<B
2<&Bw2
If Res NO_ERROR Then break;//执行失败 2,lqsd:xM
rC:?l(8ng3
\BWykA>
w ;daC(:
While true Do//列举一个网络类型的所有工作组的信息 -(`OcGM'L
g}laG8
as=m`DqOh
b}T6v
Begin :16P.z1L
UgWs{y2SE.
:{NC-%4o0
kc/{[ME
Count := $FFFFFFFF;//不限资源数目 ,>t69 Ad
e*+FpW@
%/>xO3"T
yq+!czlZ
BufSize := 8192;//缓冲区大小设置为8K L< zD<M
USN8N (
+(uYwdcN
!*2%"H*
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息 j)t+jcMUI
8/z3=O&
=AVgIv
7PR#(ftz
//获取一个网络类型的文件资源信息, 9 Pw0m=4
3] 1-M
pZ#ap<|>I
^m_yf|D$
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); DmXcPJ[9
E~<`/s
47r_y\U h
9Lh|DK,nV/
If ( Res = ERROR_NO_MORE_ITEMS ) //资源列举完毕 " P)*FT
y7KzW*>g:
aA-
65ly2gl
or (Res NO_ERROR) //执行失败 qS&%!
i&8FBV-
8A{_GH{:
.qk]$LJF7
then break; 2xw6 5z
S4witIK5
LQnkcV
Sx
P := TNetResourceArray(Buf); iTW? W\d
= 07Gy, =i
~x{.jn
0J.dG/I%
For I := 0 To Count - 1 Do//列举各个工作组的信息 K/ &?VIi`z
bVmAtm[
g+-;J+X8
{{C`mgC
Begin gn5)SP 8
"^I
mb,
WWT",gio
?j^=u:<
List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称 y}C`&nW[=
Q4t(@0e}
8+mH:O
+.RKi!
Inc(P); QZ
`tNq :/
.kTG[)F0b
[<`SfE
0iCPi)B
End; zF4 [}*
OdMO=Hy6d
61U<5:#l
,(a5 @H$f
End; Y+/JsOD
2tayP@$
$ _8g8r}
\U%#nU{
3、获取工作组信息的完全源代码//列举出整个网络中的工作组名称,返回值为TRUE表示执行成功, > Oh?%%6
W:i?t8y\y
{F&-7u0
>]'yK!a?
//参数List中返回服务器(工作组)的名称 ~.PP30'
dBO@6*N4c
Function GetServerList( var List : TStringList ) : Boolean; m?s}QGSka
_DRrznaw
Var G
;?qWB,
5>9Y|UU
K[
.JlIP
T5wjU*=IL
NetResource : TNetResource; D j\e@?Y
DaNW~rd{
s!/TU{8J
^"8G`B$r
Buf : Pointer; DOm[*1@^
OEdJc\n_R
S)He$B$pp
4VN aq<8
Count,BufSize,Res : DWORD; !BU)K'mj
a:SQ16_?
`,wu}F85
8l/[(] &
lphEnum : THandle; O?bK%P]ay
N132sN2
X7UBopm&
O`FqD{@V
p : TNetResourceArray; I
5ag6l
kfC0zd+
lfk9+)
^[TV;9I*
i,j : SmallInt; [n,?WwC
2k7bK6=nm
Hv#q:R8
YHxbDf dA
NetworkTypeList : TList; Z+s%;f;
S_J :&9L
Begin qZ2&Xw.{1
tP
~zKU
8uG0^h}
i~=s^8n`l
Result := False; @b!"joEy
kD~uGA
~M?|Vn
ZIxRyo-i
NetworkTypeList := TList.Create; ,W5.:0Y;f[
U+]Jw\\l
?`sy%G
o|S)C<w
List.Clear;//获取整个网络中的文件资源的句柄,lphEnum为返回名柄 _rQUE^9
)&NAs
;M
v~yb3v
+KK$0pL
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 4yV].2#rl"
_&{%Wc5W~F
<3
@}Lj
ryD%i"g<
RESOURCEUSAGE_CONTAINER, Nil,lphEnum); Uf,fX/:!
Q49BU@xX
H~+xB1
+!>LY
If Res NO_ERROR Then exit;//Raise Exception(Res);//执行失败//获取整个网络中的网络类型信息 \tt'm\_
Jgx8-\8
<,39_#H?F3
G\Hq/4
Count := $FFFFFFFF;//不限资源数目 T`L}[?w
@h-T:$
~^o=a?L`<
U~is-+Uq
BufSize := 8192;//缓冲区大小设置为8K bAhZ7;T~
#a}N"*P
b;vNq
X\2_;zwf
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息 u*R7zY
4
eh=f!(+
R$0U<(/
=:K@zlO:
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); !'c| N9
XeUprN
jPwef##~7
v&0d$@6/U
If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕 7>je6*(K
o<\6Rm
`7B14:\A
&+;uZ-x
or (Res NO_ERROR )//执行失败 [\HQPo'S
K`+vfqX
zzJ^x8#R
9eSRCLhgD
Then Exit; {CP o<lz
NhlJ3/J j
' o=E!?
m!!;/e?yx
P := TNetResourceArray(Buf); &q>h*w4O
Y@:3 B:m#
-- S"w@
Qv !rUiXq
For I := 0 To Count - 1 Do//记录各个网络类型的信息 W:B }u\)C
Ar~{= X
RK3.-
.HD ebi
Begin _h~p:=
/,t|
!)\]
N l|^o{#
;y>'yq}
NetworkTypeList.Add(p); TQ~&Y)".
[; F{mN
?1DUNZ6
>0M:&NMda
Inc(P); uXP-
J]>
okh0_4
}!knU3J
| @q9{h7
End; ZpTi:3>
JchA=n
lYdQB[l
XWf7"]%SX
//WNetCloseEnum关闭一个列举句柄 :%>oe> _"
&0i71!Oy
{V=vnL--
lk~dgky@
Res := WNetCloseEnum(lphEnum);//关闭一次列举
B,:23[v
{'&8`d
!yk7HaP
+}\29@{W
If Res NO_ERROR Then exit; 5bF5~D(E
v(k*A:
L&rO6
xz="|HD);
For J := 0 To NetworkTypeList.Count-1 Do //列出各个网络类型中的所有工作组名称 %!D_q~"H
&7lk2Q\
DZF[dxH
m_~y
Begin//列出一个网络类型中的所有工作组名称 l`oT:
tvK rc
@t "~
\(wn@/yP'
NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄 !+%Az*ik
+i2YX7Of
+6wx58.B&
ho(5r5SNE
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, "@aq@mY@
[Aa[&RX+9
Ae3,W
'[ @F%
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); .59KE]u
4;",@}
4|I7:~
6zELe.tq
If Res NO_ERROR Then break;//执行失败 5XhK#X%:A
zK[
7:<
q+r `e
>2FAi.,
While true Do//列举一个网络类型的所有工作组的信息 5~v(AB(x
$:T<IU[E
m*Q[lr=
cH+h=E=
Begin s@.`"TF.7
(rau8
wpAw/-/
]Y?{$M
G
Count := $FFFFFFFF;//不限资源数目 Mb2:'u[
]J8KCjq@
Aqx3!
/5L' 9e
BufSize := 8192;//缓冲区大小设置为8K OL,/-;z6
61ON
JUe K"|fA
94Kuy@0:+
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息 o|zrD~&$
>C*?17\
+#de8/x
HPu/. oE
//获取一个网络类型的文件资源信息, CVyx lc>
qcR|E`k-G
c4!c_a2pS
c,3'wnui
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); v#FJ+
4?P%M"\Iv
!mpMa]G3
>
{'5>6u
If ( Res = ERROR_NO_MORE_ITEMS ) //资源列举完毕 :,xyVb+
Z`SWZ<
}QX2:a
w~cq%%
or (Res NO_ERROR) //执行失败 XwKZv0ub
m<X#W W)N
+l[Z2mW
X\c1q4oB[
then break; >q}
!>k$B
z$I[kR%I{
`g4Ekp'Rp[
O]$*EiO\
P := TNetResourceArray(Buf); v;N1'
rC1qGzg\a
'NG^HLD/
|2t7G9[n
For I := 0 To Count - 1 Do//列举各个工作组的信息 1{\,5U&
u@:=qd=\
QXIbFv
9 "
}^SI8
Begin oneSgJ
8a":[Q[
2heWE
c|R3,<Q]
List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称 s$DT.cvO
(TbB?X}
l7D4`i<F
U:pLnNp`
Inc(P); " OS]\-
f/IRO33
x]%4M\T``
*'`3]!A
End; 3
4A&LBwC
Rrs`h `'-
pT_e;,KW
U
!7,K9/"
End; L[QI 5N
k?|zIu
)l[7;ZIw$
DoCQFSL
Res := WNetCloseEnum(lphEnum);//关闭一次列举 3' :[i2[
q*<J$PI
KoQ_:`
fAY2V%Rft
If Res NO_ERROR Then break;//执行失败 w'!}(Z5X?
t+4%,n f_1
|V~(mS747:
-SC2Zgi)A
End; fXXm@tMx>
8HH.P`Vk#
g:HbmXOBpj
8 *(W |J
Result := True; )l!&i?h%
B"E (Y M
dC;d>j,
sVm'9k
FreeMem(Buf); RAx]Sp
Q-S
omUl2C
UgP=k){
][$$
=
NetworkTypeList.Destroy; Zkb,v!l
BUy}Rn
End; UXdC<(vK
C>K"ZJ
BKP!+V/
PRf\6
二、列举一个工作组中的计算机名称 $GfxMt
s)&R W#:X
;;"c+
T?}=k{C]
在WNetOpenEnum函数中,将参数lpNetResource中的lpRemoteName部分指定为一个工作组的名称(如“MyWorkGroup”),可以获取一个句柄,在WNetEnumResource中利用这个句柄,可以获取一个NetResource类型的数组,每个NetResource元素的lpRemoteName部分即为一个计算机名称(如“\\wangfajun”)。 "F.J>QBd
h|/*yTuN.y
Rx"VscB6z
Sm I8&c
具体的请参见以下程序段及注释信息。 }y=n#%|i.
$MVeMgPa
fO}1(%}d
S~5 =1b
NetResource.lpRemoteName := @GroupName[1];//指定工作组名称 8#JyK+NU
WE8L?55_Au
apWrcaj
w!Lb;4x ?
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//显示类型为服务器(工作组) '~6CGqU*
gdn,nL`dP
?B31t9
sVl:EVv
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER; +wgUs*(W
%RF
"lj:bxM2C
&(U=O?r7
NetResource.dwScope := RESOURCETYPE_DISK;//列举文件资源信息 E^>7jf09,
Vh-h{
.;sPG
:95_W/l
//获取指定工作组的网络资源句柄 :QY 9p T
Rn^N+3o'M
rlh6\Fa
HOI`F3#XI
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 2F)OyE
)$.9WlQ
j{+I~|ZB,
46JP1
RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); ll^O+>1dO
<5L` d}
\A"a>e
d~s-;T
获取计算机名称的完全程序源代码如下: N@
tb^M
VFp)`+8
)n61IqrW
"tbBbEj?d
//列举出指定工作组GroupName中的计算机名称,返回值为TRUE表示执行成功,//参数List中返回计算机名称Function GetUsers( GroupName : string; var List : TStringList ) : Boolean;Var j[
YTg]
&%51jM<
6m<9^NT
,=yIfbFQ
NetResource : TNetResource; 8#3cmpx4
9GOyVKUv
h.%Qn vL
eh=bClk
Buf : Pointer; D#(L@{vC
o{,(`o.1O
ov}{UP]a?
nsn,8a38
Count,BufSize,Res : DWord; _$x *CP0(
qt)mUq;>
N^>g=Ub
ZACn_gd[5
Ind : Integer; g9`ytWmM
zXO.NSC[
'Pn`V{a
DGUU1vA
lphEnum : THandle; $:P~21,
}6(:OB?
TMs\#
hYx^D>}]
Temp : TNetResourceArray; T{Q&