unit NetFunc;
interface
uses
SysUtils, Windows, dialogs, winsock, Classes, ComObj, WinInet, Variants;
// 错误信息常量
const
C_Err_GetLocalIp = '获取本地ip失败';
C_Err_GetNameByIpAddr = '获取主机名失败';
C_Err_GetSQLServerList = '获取SQLServer服务器失败';
C_Err_GetUserResource = '获取共享资失败';
C_Err_GetGroupList = '获取所有工作组失败';
C_Err_GetGroupUsers = '获取工作组中所有计算机失败';
C_Err_GetNetList = '获取所有网络类型失败';
C_Err_CheckNet = '网络不通';
C_Err_CheckAttachNet = '未登入网络';
C_Err_InternetConnected = '没有上网';
C_Txt_CheckNetSuccess = '网络畅通';
C_Txt_CheckAttachNetSuccess = '已登入网络';
C_Txt_InternetConnected = '上网了';
// 检测机器是否登入网络
function IsLogonNet: Boolean;
// 得到本机的局域网Ip地址
function GetLocalIP(var LocalIp: string): Boolean;
// 通过Ip返回机器名
function GetNameByIPAddr(IPAddr: string; var MacName: string): Boolean;
// 获取网络中SQLServer列表
function GetSQLServerList(var List: Tstringlist): Boolean;
// 获取网络中的所有网络类型
function GetNetList(var List: Tstringlist): Boolean;
// 获取网络中的工作组
function GetGroupList(var List: Tstringlist): Boolean;
// 获取工作组中所有计算机
function GetUsers(GroupName: string; var List: Tstringlist): Boolean;
// 获取网络中的资源
function GetUserResource(IPAddr: string; var List: Tstringlist): Boolean;
// 映射网络驱动器
function NetAddConnection(NetPath: Pchar; PassWord: Pchar; LocalPath: Pchar)
: Boolean;
// 检测网络状态
function CheckNet(IPAddr: string): Boolean;
// 判断Ip协议有没有安装 这个函数有问题
function IsIPInstalled: Boolean;
// 检测机器是否上网
function InternetConnected: Boolean;
// 关闭网络连接
function NetCloseAll: Boolean;
/// //
///
/// //
/// /// 代码实现部门
{ =================================================================
功 能: 检测机器是否登入网络
参 数: 无
返回值: 成功: True 失败: False
备 注:
版 本:
1.0 2002/10/03 09:55:00
================================================================= }
function IsLogonNet: Boolean;
begin
Result := False;
if GetSystemMetrics(SM_NETWORK) <> 0 then
Result := True;
end;
{ =================================================================
功 能: 返回本机的局域网Ip地址
参 数: 无
返回值: 成功: True, 并填充LocalIp 失败: False
备 注:
版 本:
1.0 2002/10/02 21:05:00
================================================================= }
function GetLocalIP(var LocalIp: string): Boolean;
var
HostEnt: PHostEnt;
IP: String;
Addr: Pchar;
Buffer: array [0 .. 63] of Char;
WSData: TWSADATA;
begin
Result := False;
try
WSAStartUp(2, WSData);
GetHostName(Buffer, SizeOf(Buffer));
// Buffer:='ZhiDa16';
HostEnt := GetHostByName(Buffer);
if HostEnt = nil then
exit;
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_addr function converts a string containing an Internet
Protocol dotted address into an in_addr.
版 本:
1.0 2002/10/02 22:09:00
================================================================= }
function GetNameByIPAddr(IPAddr: String; var MacName: String): Boolean;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSADATA;
begin
Result := False;
if IPAddr = '' then
exit;
try
WSAStartUp(2, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(Pchar(IPAddr));
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.s_addr, 4, AF_INET);
if HostEnt <> nil then
MacName := StrPas(HostEnt^.h_name);
Result := True;
finally
WSACleanup;
end;
end;
{ =================================================================
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
备 注:
版 本:
1.0 2002/10/02 22:44:00
================================================================= }
function GetSQLServerList(var List: Tstringlist): Boolean;
var
i: integer;
// sRetValue: String;
SQLServer: Variant;
ServerList: Variant;
begin
// Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to ServerList.Count do
List.Add(ServerList.item(i));
Result := True;
Finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
{ =================================================================
功 能: 判断IP协议有没有安装
参 数: 无
返回值: 成功: True 失败: False;
备 注: 该函数还有问题
版 本:
1.0 2002/10/02 21:05:00
================================================================= }
function IsIPInstalled: Boolean;
var
WSData: TWSADATA;
ProtoEnt: PProtoEnt;
begin
Result := True;
try
if WSAStartUp(2, WSData) = 0 then
begin
ProtoEnt := GetProtoByName('IP');
if ProtoEnt = nil then
Result := False
end;
finally
WSACleanup;
end;
end;
{ =================================================================
功 能: 返回网络中的共享资源
参 数:
IpAddr: 机器Ip
List: 需要填充的List
返回值: 成功: True,并填充List 失败: False;
备 注:
WNetOpenEnum function starts an enumeration of network
resources or existing connections.
WNetEnumResource function continues a network-resource
enumeration started by the WNetOpenEnum function.
版 本:
1.0 2002/10/03 07:30:00
================================================================= }
function GetUserResource(IPAddr: string; var List: 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;
if copy(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);
Buf := nil;
if Res <> NO_ERROR then
exit; // 执行失败
while True do // 列举指定工作组的网络资源
begin
Count := $FFFFFFFF; // 不限资源数目
BufSize := 8192; // 缓冲区大小设置为8K
GetMem(Buf, BufSize); // 申请内存,用于获取工作组信息
// 获取指定计算机的网络资源名称
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then
break; // 资源列举完毕
if (Res <> NO_ERROR) then
exit; // 执行失败
Temp := TNetResourceArray(Buf);
for i := 0 to Count - 1 do
begin
// 获取指定计算机中的共享资源名称,+2表示删除"\\",
// 如\\192.168.0.1 => 192.168.0.1
List.Add(Temp^.lpRemoteName + 2);
Inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum); // 关闭一次列举
if Res <> NO_ERROR then
exit; // 执行失败
Result := True;
FreeMem(Buf);
End;
{ =================================================================
功 能: 返回网络中的工作组
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败: False;
备 注:
版 本:
1.0 2002/10/03 08:00:00
================================================================= }
function GetGroupList(var List: 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);
if Res <> NO_ERROR then
exit; // Raise Exception(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) then
exit;
p := TNetResourceArray(Buf);
for i := 0 to Count - 1 do // 记录各个网络类型的信息
begin
NetworkTypeList.Add(p);
Inc(p);
end;
Res := WNetCloseEnum(lphEnum); // 关闭一次列举
if Res <> NO_ERROR then
exit;
for j := 0 to NetworkTypeList.Count - 1 do // 列出各个网络类型中的所有工作组名称
begin // 列出一个网络类型中的所有工作组名称
NetResource := TNetResource(NetworkTypeList.Items[j]^); // 网络类型信息
// 获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum);
if Res <> NO_ERROR then
break; // 执行失败
while True do // 列举一个网络类型的所有工作组的信息
begin
Count := $FFFFFFFF; // 不限资源数目
BufSize := 8192; // 缓冲区大小设置为8K
GetMem(Buf, BufSize); // 申请内存,用于获取工作组信息
// 获取一个网络类型的文件资源信息,
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
// 资源列举完毕 //执行失败
if (Res = ERROR_NO_MORE_ITEMS) or (Res <> NO_ERROR) then
break;
p := TNetResourceArray(Buf);
for i := 0 to Count - 1 do // 列举各个工作组的信息
begin
List.Add(StrPas(p^.lpRemoteName)); // 取得一个工作组的名称
Inc(p);
end;
end;
Res := WNetCloseEnum(lphEnum); // 关闭一次列举
if Res <> NO_ERROR then
break; // 执行失败
end;
Result := True;
FreeMem(Buf);
NetworkTypeList.Destroy;
End;

delphi 获取本机IP地址和MAC地址相关推荐

  1. 批处理获取本机IP(局域网)及MAC地址

    ::==================批处理获取本机IP(局域网)及MAC地址============== ::code by youxi01@bbs.bathome.cn 2008-1-5 @ec ...

  2. 利用ioctl获取本机指定设备的MAC地址

    // 利用ioctl获取本机指定设备的MAC地址 #include<stdio.h> #include<string.h> #include<stdlib.h> # ...

  3. Python获取本机所有网卡的MAC地址

    在拙作<Python可以这样学>(清华大学出版社,2017.2)第297页介绍了一种获取本机网卡MAC地址的方法,不过代码显得稍微有点啰嗦,并且只能获得一块网卡的MAC地址.本文对该内容稍 ...

  4. macbook查询本机IP和网卡mac地址

    终端输入ifconfig,出现一长串的内容.. 我们需要了解的是名为en0的网络. en0: (本地以太网)flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPL ...

  5. Delphi如何获取本机IP地址

    Delphi获取本机IP地址 //获取本机IP function TKSMsgLog.GetLocalAddress:String; typeTaPInAddr = array [0..10] of ...

  6. python获取mac地址_你知道怎么用Python获取计算机名,ip地址,mac地址吗

    获取计算机名 # 获取计算机名,常用的方法有三种,但最常用的是第一种 import os import socket # method one name = socket.gethostname() ...

  7. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例

    这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...

  8. python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号

    文章目录 python获取本机IP地址.mac地址(物理地址).计算机名 物理地址 计算机名.ip地址 硬盘序列号 CPU序列号 主板序列号 bios序列号 bios uuid号 python获取本机 ...

  9. python设置本机IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC

    python设置本机IP地址.子网掩码.DNS,获取本机IP地址.子网掩码.DNS.MAC main.py """=== coding: UTF8 ==="&q ...

最新文章

  1. 19年BAT常问面试题汇总:JVM+微服务+多线程+锁+高并发性能
  2. 将Windows 8.1 系统窗口背景设置成淡绿色?
  3. arXiv 精选:一文看尽六月最热五篇论文
  4. ext3 tree tbar 初始化定义
  5. Java中的Set对象去重
  6. 【IEnumerable】扩展方法的使用 C#
  7. mysql 事务 引擎_mysql引擎和事务
  8. 汽车防撞实时语音播报仪设计
  9. vb.net它SqlHelper制备及应用
  10. 电梯轿厢预留人脸识别接口和指纹接口_奥的斯电梯 gt;LSFAULT ! 故障现象捕捉
  11. python reportlab模块
  12. word交叉引用自动编排word参考文献
  13. verilog 四舍五入_Verilog进行饱和与截位操作
  14. 高德地图API开发应用-----地图显示+定位+marker
  15. 这些天学C++到学ROS,都感觉视频教程效果好些。效率也高些,相比于单自己看书而言。
  16. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分
  17. uni-app APP端-微信登录流程
  18. python随机森林特征重要性原理_使用Python的随机森林特征重要性图表
  19. 地震时我先跑了教师挑逗网民抽人欲望
  20. 第九章 动态规划-1261:【例9.5】城市交通路网

热门文章

  1. Bq769XX IIC 通讯 ALERT引脚
  2. 我为什么不建议使用OpenDNS和Google Public DNS
  3. 白帽黑客_什么是白帽黑客?
  4. 红旗系统是不是linux,红旗linux操作系统是Linux吗?我想学习Linux,已经按完红旗的了、不知道是不是Linux,有没有被红旗改变过。还能按正常的方式学吗?...
  5. R语言之plot()画图
  6. 运动控制卡课程:固高,凌华,雷赛,(单一款学习时间45天,要求有C语言基础)凭良学校
  7. HTML最基本的页面
  8. Oralce数据库备份与恢复
  9. 爬取迷你mp4各个电影信息
  10. 便利店新零售怎么做,才能实现销售额倍增?