DELPHI7网络函数大全.docx
《DELPHI7网络函数大全.docx》由会员分享,可在线阅读,更多相关《DELPHI7网络函数大全.docx(24页珍藏版)》请在冰豆网上搜索。
DELPHI7网络函数大全
网络函数大全
{=========================================================================
功能:
网络函数库
时间:
2002/10/02
版本:
1.0
=========================================================================}
unitNet;
interface
uses
SysUtils
Windows
dialogs
winsock
Classes
ComObj
WinInet;
//得到本机的局域网Ip地址
FunctionGetLocalIp(varLocalIp:
string):
Boolean;
//通过Ip返回机器名
FunctionGetNameByIPAddr(IPAddr:
string;varMacName:
string):
Boolean;
//获取网络中SQLServer列表
FunctionGetSQLServerList(varList:
Tstringlist):
Boolean;
//获取网络中的所有网络类型
FunctionGetNetList(varList:
Tstringlist):
Boolean;
//获取网络中的工作组
FunctionGetGroupList(varList:
TStringList):
Boolean;
//获取工作组中所有计算机
FunctionGetUsers(GroupName:
string;varList:
TStringList):
Boolean;
//获取网络中的资源
FunctionGetUserResource(IpAddr:
string;varList:
TStringList):
Boolean;
//映射网络驱动器
FunctionNetAddConnection(NetPath:
Pchar;PassWord:
Pchar;LocalPath:
Pchar):
Boolean;
//检测网络状态
FunctionCheckNet(IpAddr:
string):
Boolean;
//检测机器是否登入网络
FunctionCheckMacAttachNet:
Boolean;
//判断Ip协议有没有安装这个函数有问题
FunctionIsIPInstalled:
boolean;
//检测机器是否上网
FunctionInternetConnected:
Boolean;
implementation
{=================================================================
功能:
检测机器是否登入网络
参数:
无
返回值:
成功:
True失败:
False
备注:
版本:
1.02002/10/0309:
55:
00
=================================================================}
FunctionCheckMacAttachNet:
Boolean;
begin
Result:
=False;
ifGetSystemMetrics(SM_NETWORK)<>0then
Result:
=True;
end;
{=================================================================
功能:
返回本机的局域网Ip地址
参数:
无
返回值:
成功:
True,并填充LocalIp失败:
False
备注:
版本:
1.02002/10/0221:
05:
00
=================================================================}
functionGetLocalIP(varLocalIp:
string):
Boolean;
var
HostEnt:
PHostEnt;
Ip:
string;
addr:
pchar;
Buffer:
array[0..63]ofchar;
GInitData:
TWSADATA;
begin
Result:
=False;
try
WSAStartup(2,GInitData);
GetHostName(Buffer,SizeOf(Buffer));
HostEnt:
=GetHostByName(buffer);
ifHostEnt=nilthenExit;
addr:
=HostEnt^.h_addr_list^;
ip:
=Format('%d.%d.%d.%d',[byte(addr[0]),
byte(addr[1]),byte(addr[2]),byte(addr[3])]);
LocalIp:
=Ip;
Result:
=True;
finally
WSACleanup;
end;
end;
{=================================================================
功能:
通过Ip返回机器名
参数:
IpAddr:
想要得到名字的Ip
返回值:
成功:
机器名失败:
''
备注:
inet_addrfunctionconvertsastringcontaininganInternet
Protocoldottedaddressintoanin_addr.
版本:
1.02002/10/0222:
09:
00
=================================================================}
functionGetNameByIPAddr(IPAddr:
String;varMacName:
String):
Boolean;
var
SockAddrIn:
TSockAddrIn;
HostEnt:
PHostEnt;
WSAData:
TWSAData;
begin
Result:
=False;
ifIpAddr=''thenexit;
try
WSAStartup(2,WSAData);
SockAddrIn.sin_addr.s_addr:
=inet_addr(PChar(IPAddr));
HostEnt:
=gethostbyaddr(@SockAddrIn.sin_addr.S_addr,4,AF_INET);
ifHostEnt<>nilthen
MacName:
=StrPas(Hostent^.h_name);
Result:
=True;
finally
WSACleanup;
end;
end;
{=================================================================
功能:
返回网络中SQLServer列表
参数:
List:
需要填充的List
返回值:
成功:
True,并填充List失败False
备注:
版本:
1.02002/10/0222:
44:
00
=================================================================}
FunctionGetSQLServerList(varList:
Tstringlist):
boolean;
var
i:
integer;
sRetValue:
String;
SQLServer:
Variant;
ServerList:
Variant;
begin
Result:
=False;
List.Clear;
try
SQLServer:
=CreateOleObject('SQLDMO.Application');
ServerList:
=SQLServer.ListAvailableSQLServers;
fori:
=1toServerlist.Countdo
list.Add(Serverlist.item(i));
Result:
=True;
Finally
SQLServer:
=NULL;
ServerList:
=NULL;
end;
end;
{=================================================================
功能:
判断Ip协议有没有安装
参数:
无
返回值:
成功:
True失败:
False;
备注:
该函数还有问题
版本:
1.02002/10/0221:
05:
00
=================================================================}
FunctionIsIPInstalled:
boolean;
var
WSData:
TWSAData;
ProtoEnt:
PProtoEnt;
begin
Result:
=True;
try
ifWSAStartup(2,WSData)=0then
begin
ProtoEnt:
=GetProtoByName('IP');
ifProtoEnt=nilthen
Result:
=False
end;
finally
WSACleanup;
end;
end;
{=================================================================
功能:
返回网络中的共享资源
参数:
IpAddr:
机器Ip
List:
需要填充的List
返回值:
成功:
True,并填充List失败:
False;
备注:
WNetOpenEnumfunctionstartsanenumerationofnetwork
resourcesorexistingconnections.
WNetEnumResourcefunctioncontinuesanetwork-resource
enumerationstartedbytheWNetOpenEnumfunction.
版本:
1.02002/10/0307:
30:
00
=================================================================}
FunctionGetUserResource(IpAddr:
string;varList:
TStringList):
Boolean;
type
TNetResourceArray=^TNetResource;//网络类型的数组
Var
i:
Integer;
Buf:
Pointer;
Temp:
TNetResourceArray;
lphEnum:
THandle;
NetResource:
TNetResource;
Count,BufSize,Res:
DWord;
Begin
Result:
=False;
List.Clear;
ifcopy(Ipaddr,0,2)<>'\\'then
IpAddr:
='\\'+IpAddr;//填充Ip地址信息
FillChar(NetResource,SizeOf(NetResource),0);//初始化网络层次信息
NetResource.lpRemoteName:
=@IpAddr[1];//指定计算机名称
//获取指定计算机的网络资源句柄
Res:
=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE,@NetResource,lphEnum);
ifRes<>NO_ERRORthenexit;//执行失败
whileTruedo//列举指定工作组的网络资源
begin
Count:
=$FFFFFFFF;//不限资源数目
BufSize:
=8192;//缓冲区大小设置为8K
GetMem(Buf,BufSize);//申请内存,用于获取工作组信息
//获取指定计算机的网络资源名称
Res:
=WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
ifRes=ERROR_NO_MORE_ITEMSthenbreak;//资源列举完毕
if(Res<>NO_ERROR)thenExit;//执行失败
Temp:
=TNetResourceArray(Buf);
fori:
=0toCount-1do
begin
//获取指定计算机中的共享资源名称,+2表示删除"\\",
//如\\192.168.0.1=>192.168.0.1
List.Add(Temp^.lpRemoteName+2);
Inc(Temp);
end;
end;
Res:
=WNetCloseEnum(lphEnum);//关闭一次列举
ifRes<>NO_ERRORthenexit;//执行失败
Result:
=True;
FreeMem(Buf);
End;
{=================================================================
功能:
返回网络中的工作组
参数:
List:
需要填充的List
返回值:
成功:
True,并填充List失败:
False;
备注:
版本:
1.02002/10/0308:
00:
00
=================================================================}
FunctionGetGroupList(varList:
TStringList):
Boolean;
type
TNetResourceArray=^TNetResource;//网络类型的数组
Var
NetResource:
TNetResource;
Buf:
Pointer;
Count,BufSize,Res:
DWORD;
lphEnum:
THandle;
p:
TNetResourceArray;
i,j:
SmallInt;
NetworkTypeList:
TList;
Begin
Result:
=False;
NetworkTypeList:
=TList.Create;
List.Clear;
//获取整个网络中的文件资源的句柄,lphEnum为返回名柄
Res:
=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER,Nil,lphEnum);
ifRes<>NO_ERRORthenexit;//RaiseException(Res);//执行失败
//获取整个网络中的网络类型信息
Count:
=$FFFFFFFF;//不限资源数目
BufSize:
=8192;//缓冲区大小设置为8K
GetMem(Buf,BufSize);//申请内存,用于获取工作组信息
Res:
=WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
//资源列举完毕//执行失败
if(Res=ERROR_NO_MORE_ITEMS)or(Res<>NO_ERROR)thenExit;
P:
=TNetResourceArray(Buf);
fori:
=0toCount-1do//记录各个网络类型的信息
begin
NetworkTypeList.Add(p);
Inc(P);
end;
Res:
=WNetCloseEnum(lphEnum);//关闭一次列举
ifRes<>NO_ERRORthenexit;
forj:
=0toNetworkTypeList.Count-1do//列出各个网络类型中的所有工作组名称
begin//列出一个网络类型中的所有工作组名称
NetResource:
=TNetResource(NetworkTypeList.Items[J]^);//网络类型信息
//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
Res:
=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER,@NetResource,lphEnum);
ifRes<>NO_ERRORthenbreak;//执行失败
whiletruedo//列举一个网络类型的所有工作组的信息
begin
Count:
=$FFFFFFFF;//不限资源数目
BufSize:
=8192;//缓冲区大小设置为8K
GetMem(Buf,BufSize);//申请内存,用于获取工作组信息
//获取一个网络类型的文件资源信息,
Res:
=WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
//资源列举完毕//执行失败
if(Res=ERROR_NO_MORE_ITEMS)or(Res<>NO_ERROR)thenbreak;
P:
=TNetResourceArray(Buf);
fori:
=0toCount-1do//列举各个工作组的信息
begin
List.Add(StrPAS(P^.lpRemoteName));//取得一个工作组的名称
Inc(P);
end;
end;
Res:
=WNetCloseEnum(lphEnum);//关闭一次列举
ifRes<>NO_ERRORthenbreak;//执行失败
end;
Result:
=True;
FreeMem(Buf);
NetworkTypeList.Destroy;
End;
{=================================================================
功能:
列举工作组中所有的计算机
参数:
List:
需要填充的List
返回值:
成功:
True,并填充List失败:
False;
备注:
版本:
1.02002/10/0308:
00:
00
=================================================================}
FunctionGetUsers(GroupName:
string;varList:
TStringList):
Boolean;
type
TNetResourceArray=^TNetResource;//网络类型的数组
Var
i:
Integer;
Buf:
Pointer;
Temp:
TNetResourceArray;
lphEnum:
THandle;
NetResource:
TNetResource;
Count,BufSize,Res:
DWord;
begin
Result:
=False;
List.Clear;
FillChar(NetResource,SizeOf(NetResource),0);//初始化网络层次信息
NetResource.lpRemoteName:
=@GroupName[1];//指定工作组名称
NetResource.dwDisplayType:
=RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
NetResource.dwUsage:
=RESOURCEUSAGE_CONTAINER;
NetResource.dwScope:
=RESOURCETYPE_DISK;//列举文件资源信息
//获取指定工作组的网络资源句柄
Res:
=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER,@NetResource,lphEnum);
ifRes<>NO_ERRORthenExit;//执行失败
whileTruedo//列举指定工作组的网络资源
begin
Count:
=$FFFFFFFF;//不限资源数目
BufSize:
=8192;//缓冲区大小设置为8K
GetMem(Buf,BufSize);//申请内存,用于获取工作组信息
//获取计算机名称
Res:
=WNetEnumResource(lphEnum,Count,Pointer(Buf),BufSize);
ifRes=ERROR_NO_MORE_ITEMSthenbreak;//资源列举完毕
if(Res<>NO_ERROR)thenExit;//执行失败
Temp:
=TNetResourceArray(Buf);
fori:
=0toCount-1do//列举工作组的计算机名称
begin
//获取工作组的计算机名称,+2表示删除"\\",如\\wangfajun=>wangfajun
List.Add(Temp^.lpRemoteName+2);
inc(Temp);
end;
end;
Res:
=WNetCloseEnum(lphEnum);//关闭一次列举
ifRes<>NO_ERRORthenexit;//执行失败
Result:
=True;
FreeMem(Buf);
end;
{=================================================================
功能:
列举所有网络类型
参数:
List:
需要填充的List
返回值:
成功:
True,并填充List失败:
False;
备注:
版本:
1.02002/10/0308:
54:
00
==============================================