中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 综合文章
找出计算机上当前登录入网的用户
作者:未知 时间:2005-08-07 20:56 出处:编程爱好者网站 责编:chinaitpower
              摘要:找出计算机上当前登录入网的用户
作者: 小林

  问题
  有的程序员希望能够显示用户当前登录的用户名。这使得程序员可以识别当前企图执行某个操作的用户, 也可以通知用户机器已被某个用户以外的用户名登录。如何使用 Windows 9x 的网络函数来完成此功能呢?

方法
  前一节介绍了如何找出网络的连接信息。在 Wnidows 9x 和 Windows NT 中,用户信息直接同网络连 接相关联。
  利用 Windows API 函数 WNetGetUser 可以确定当前登录的用户。在 WIN32 系统中(Windows 9x 和 Windows NT),此函数接受本地驱动器名,返回用户名及其大小(用户名缓冲区的大小)。

步骤
  按照下列步骤实现一个例子程序。运行此例子程序,从菜单 NetWorks 中选择菜单项 User Names, 将弹出一个对话框,显示此机器上安装的驱动器。当从列表中选择一个驱动器后,文本域将改变为与此驱动 器相连接的用户名或字符串“None”。

  实现例子程序的具体步骤如下:
  1.在 Visual C++ 中,利用 AppWizard 创建新的项目文件,并命名此项目文件为 LD17.MAK.
  2.进入 AppStudio 并创建新的对话框,在对话框中,添加标题分别为 Drive Ltter: 和 Network Name: 以及 User Name: 的三个文本域。添加一个组合框,风格设置为 Drop Down List。添加两个静态 文本域,标识符分别为:ID_NET_NAME 和 ID_NET_USER。
  3.将对话框 ID 改为 ID_NETWORK_USER,并设置标题为 View Network Users,保存对话框。
  4.进入 ClassWizard,选择按钮 Add Class。在名字域中键入名字 CNetworkUserDlg,基类 为 CDIALOG,对话框 ID 为 ID_NETWORK_USER。
  5.在 ClassWizard 的下拉列表中选择 CNetworkUserDlg ,从消息列表中选择消息 WM_INITDIALOG, 点击按钮 Edit Code。
  6.在 CNetworkUserDlg 的方法 OnInitDialog 中输入下列代码:


BOOL CNetworkUserDlg::OnInitDialog()
{
CDialog::OnInitDialog();
char buf[20];

CComboBox *combo=(CComboBox *)GetDlgItem(IDC_COMBO1);

for(int i=0;i<26;i++)
{
sprintf(buf,"%c:\\",'A'+i);
WORD type=GetDriveType(buf);
switch(type)
{
case DRIVE_FIXED:
sprintf(buf,"%c:",'A'+i);
combo->AddString(buf);
break;
case DRIVE_REMOTE:
sprintf(buf,"%c:",'A'+i);
combo->AddString(buf);
break;
case DRIVE_CDROM:
sprintf(buf,"%c:",'A'+i);
combo->AddString(buf);
break;
}
}
combo->SetCurSel(0);
OnDriveChange();

return TRUE; // return TRUE unless you set the focus to a control
}

  7.在 ClassWizard 中,从对象 ID 列表中选择对象 IDC_COMBO1,选择命令 CBN_SELCHANGE。 点击按钮 Add Function,命名方法为 OnDriveChange。点击按钮 Edit Code,在 CNetworkUserDlg 的方法 OnDriveChange 中输入下列代码:

void CNetworkUserDlg::OnDriveChange()
{
char drive_letter[20];
char network_name[256];
char user_name[256];
unsigned long size=256;

UpdateData();

CComboBox *combo=(CComboBox *)GetDlgItem(IDC_COMBO1);
int sel=combo->GetCurSel();

combo->GetLBText(sel,drive_letter);

if(WNetGetConnection(drive_letter,network_name,&size)==0)
GetDlgItem(ID_NET_NAME)->SetWindowText(network_name);
else
GetDlgItem(ID_NET_NAME)->SetWindowText("Not network drive");

if(WNetGetUser(drive_letter,user_name,&size))
GetDlgItem(ID_NET_USER)->SetWindowText(user_name);
else
GetDlgItem(ID_NET_USER)->SetWindowText("None");
}

  8.进入 AppStudio,在菜单 IDR_MAINFAME 中,添加新的菜单 Networks。在菜单 Networks 中, 添加菜单项 Get User Names,其 ID 为 ID_NETWORK_USERS。
  9.进入 ClassWizard,从下拉列表中选择类 CMainFrame,从对象 ID 列表中选择对象 ID_NETWORK_USERS,从消息列表中选择消息 COMMAND。点击按钮 Add Function,函数命名为 OnNetworkUsers,点击按钮 Edit Code,在 CMainFrame 的方法 OnNetworkUsers 中输入下列代码:

void CMainFrame::OnNetworkUsers()
{
CNetworkUserDlg dlg;

dlg.DoModal();
}

  10.在文件 MAINFRM.CPP 的顶部添加下列行:
#include "NetworkUserDlg.h"
  11.编译并运行此例子程序。


用法
  本节例子程序中的大部分代码是相当直接的。首先检查驱动器是否有效,如果是,将驱动器添加到组合 框中。当用户从组合框中选择驱动器后,程序接着向网络软件查询此驱动器逻辑连接的网络名。最后,由于 在同一台工作站上可以用多个用户名登录多个网络,所以向网络软件查询的是与驱动器相连接的用户名。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有