找出計算機上當前登錄入網(wǎng)的用戶
發(fā)表時間:2023-08-21 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]有的程序員希望能夠顯示用戶當前登錄的用戶名。這使得程序員可以識別當前企圖執(zhí)行某個操作的用戶,也可以通知用戶機器已被某個用戶以外的用戶名登錄。如何使用 Windows 9x 的網(wǎng)絡(luò)函數(shù)來完成此功能呢?...
有的程序員希望能夠顯示用戶當前登錄的用戶名。這使得程序員可以識別當前企圖執(zhí)行某個操作的用戶,也可以通知用戶機器已被某個用戶以外的用戶名登錄。如何使用 Windows 9x 的網(wǎng)絡(luò)函數(shù)來完成此功能呢?
利用 Windows API 函數(shù) WNetGetUser 可以確定當前登錄的用戶。在 WIN32 系統(tǒng)中(Windows 9x 和 Windows NT),此函數(shù)接受本地驅(qū)動器名,返回用戶名及其大。ㄓ脩裘彌_區(qū)的大。。
按照下列步驟實現(xiàn)一個例子程序。運行此例子程序,從菜單 NetWorks 中選擇菜單項 User Names, 將彈出一個對話框,顯示此機器上安裝的驅(qū)動器。當從列表中選擇一個驅(qū)動器后,文本域?qū)⒏淖優(yōu)榕c此驅(qū)動 器相連接的用戶名或字符串“None”。
實現(xiàn)例子程序的具體步驟如下:
1.在 Visual C++ 中,利用 AppWizard 創(chuàng)建新的項目文件,并命名此項目文件為 LD17.MAK.
2.進入 AppStudio 并創(chuàng)建新的對話框,在對話框中,添加標題分別為 Drive Ltter: 和 Network Name: 以及 User Name: 的三個文本域。添加一個組合框,風格設(shè)置為 Drop Down List。添加兩個靜態(tài) 文本域,標識符分別為:ID_NET_NAME 和 ID_NET_USER。
3.將對話框 ID 改為 ID_NETWORK_USER,并設(shè)置標題為 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,函數(shù)命名為 OnNetworkUsers,點擊按鈕 Edit Code,在 CMainFrame 的方法 OnNetworkUsers 中輸入下列代碼:
void CMainFrame::OnNetworkUsers()
{
CNetworkUserDlg dlg;
dlg.DoModal();
}
10.在文件 MAINFRM.CPP 的頂部添加下列行:
#include "NetworkUserDlg.h"
11.編譯并運行此例子程序。
以上例子程序中的大部分代碼是相當直接的。首先檢查驅(qū)動器是否有效,如果是,將驅(qū)動器添加到組合框中。當用戶從組合框中選擇驅(qū)動器后,程序接著向網(wǎng)絡(luò)軟件查詢此驅(qū)動器邏輯連接的網(wǎng)絡(luò)名。最后,由于在同一臺工作站上可以用多個用戶名登錄多個網(wǎng)絡(luò),所以向網(wǎng)絡(luò)軟件查詢的是與驅(qū)動器相連接的用戶名。