QQ登录

只需一步,快速开始

327上位机VC MFC获取计算机名称及工作组

[ 复制链接 ]

327上位机VC MFC获取计算机名称及工作组

327上位机VC MFC获取计算机名称及工作组

获取计算机名称及工作组
功能展示
在上位机网络编程时,时常会涉及局域网的操作,当前例程可以获得当前电脑名称,并将其设置为窗口标题,点击<获得局域网工作组>会将当前局域网全部工作组罗列到列表框中,效果如图;

要点提示
例程主要用到的函数有WNetOpenEnum(), WNetEnumResource(), WNetCloseEnum();
1.WNetOpenEnum()用于启动对网络资源进行枚举的过程
,函数原型为DWORD WNetOpenEnum( DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCE lpNetResource, LPHANDLE lphEnum );
参数 类型及说明:dwScope Long,指定要枚举的资源范围。可设为下述常数之一:
RESOURCE_CONNECTED 枚举已连接的资源(忽略dwUsage)
RESOURCE_GLOBALNET 枚举所有资源
RESOURCE_REMEMBERED 只枚举永久性连接
dwType Long,下述常数之一
RESOURCE_ANY 枚举所有类型的网络资源
RESOURCE_DISK 枚举磁盘资源
RESOURCE_PRINT 枚举打印资源
dwUsage Long,可设为零,表示枚举所有资源;或设为下述常数的一个或两个:
RESOURCEUSAGE_CONNECTABLE 只枚举那些能够连接的资源
RESOURCEUSAGE_CONTAINER 只枚举包含了其他资源的资源
lpNetResource NETRESOURCE,这个结构指定了一个容器资源。该函数会枚举包含于这里指定的某个指定资源内的资源。如设为NULL(把声明变成ByVal As Long),那么函数会枚举顶级网络资源。倘若在dwScope参数里没有指定RESOURCE_GLOBALNET,那么必须为NULL
lphEnum Long,指定一个变量,用于装载一个枚举句柄。该句柄由WNetEnumResource函数使用。必须用WNetCloseEnum函数将其清除
2.WNetEnumResource()用于枚举网络资源。函数原型为DWORD WNetEnumResource( HANDLE hEnum, LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize);
参数 类型及说明
hEnum Long,从WNetOpenEnum函数返回的一个句柄
lpcCount Long,最初设为要枚举的最大资源数量;或设为-1,表示枚举尽可能多的资源。一旦返回,就会设为实际枚举的资源数量
lpBuffer Any,通常是一个字节缓冲区的首字节。该缓冲区装载了枚举信息(可按引用声明为Byte)
lpBufferSize Long,以字节为单位指定lpBuffer数组的长度。如缓冲区不够大,则设为需要的缓冲区长度

3.WNetCloseEnum()用于结束一次枚举操作DWORD WNetCloseEnum( HANDLE hEnum ); 参数为?WNetOpenEnum函数返回的一个枚举句柄

实现功能
1.新建基于对话框的应用程序
2.在主对话框头文件添加#pragma comment(lib,“mpr.lib”),再添加一列表框控件IDC_LIST1,及按钮控件<获得局域网工作组>,并在OnInitDialog()中初始化
//<>列表框初始化
CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST1);
pListCtrl->SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP |LVS_EX_ONECLICKACTIVATE |LVS_EX_GRIDLINES);
pListCtrl->ModifyStyle(0,LVS_REPORT);
pListCtrl->InsertColumn(0,"局域网内工作组",LVCFMT_LEFT,200,0);
//<>额外功能:设置窗口标题为 电脑名称
DWORD nSize = MAX_COMPUTERNAME_LENGTH;
char Buffer[MAX_COMPUTERNAME_LENGTH];
GetComputerName(Buffer,&nSize);
SetWindowText(Buffer);
3.关联按钮的点击响应函数,实现局域网工作组的获取及显示。
void CGkbc8Dlg::OnGet()
{
// DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
// char Buffer[MAX_COMPUTERNAME_LENGTH + 1];
// GetComputerName(Buffer,&nSize);
// m_edit.SetWindowText(Buffer);

CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST1);

HANDLE lphEnum;
DWORD Res;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER,NULL,&lphEnum);

DWORD Count=0xFFFFFFFF,Bufsize=409;
LPVOID Buf = new char[4096];
Res=WNetEnumResource(lphEnum,&Count,Buf,&Bufsize);

NETRESOURCE* nRes;
nRes=(NETRESOURCE*)Buf;
NETRESOURCE* nRes1;
LPVOID Bufwg = new char[4096];
for(DWORD n=0;n<Count;n++,nRes++)
{
DWORD NUM= 0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0,nRes,&lphEnum);
Res=WNetEnumResource(lphEnum,&NUM,Bufwg,&Bufsize);
int num= Bufsize/sizeof(NETRESOURCE);
nRes1=(NETRESOURCE*)Bufwg;
for(DWORD i=0;i<NUM;i++,nRes1++)
{
pListCtrl->InsertItem(i,0);
pListCtrl->SetItemText(i,0,nRes1->lpRemoteName);
}
}
delete Buf;
delete Bufwg;
WNetCloseEnum(lphEnum);
}

我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:327.上位机VC MFC获取计算机名称及工作组.zip 
文件大小:136.36 KB  售价:11金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索