找出計(jì)算機(jī)上當(dāng)前登錄入網(wǎng)的用戶(hù)

時(shí)間:2022-11-17 11:02:00

導(dǎo)語(yǔ):找出計(jì)算機(jī)上當(dāng)前登錄入網(wǎng)的用戶(hù)一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢(xún)客服老師,歡迎參考。

找出計(jì)算機(jī)上當(dāng)前登錄入網(wǎng)的用戶(hù)

有的程序員希望能夠顯示用戶(hù)當(dāng)前登錄的用戶(hù)名。這使得程序員可以識(shí)別當(dāng)前企圖執(zhí)行某個(gè)操作的用戶(hù),也可以通知用戶(hù)機(jī)器已被某個(gè)用戶(hù)以外的用戶(hù)名登錄。如何使用Windows9x的網(wǎng)絡(luò)函數(shù)來(lái)完成此功能呢?

利用WindowsAPI函數(shù)WNetGetUser可以確定當(dāng)前登錄的用戶(hù)。在WIN32系統(tǒng)中(Windows9x和WindowsNT),此函數(shù)接受本地驅(qū)動(dòng)器名,返回用戶(hù)名及其大小(用戶(hù)名緩沖區(qū)的大小)。

按照下列步驟實(shí)現(xiàn)一個(gè)例子程序。運(yùn)行此例子程序,從菜單NetWorks中選擇菜單項(xiàng)UserNames,將彈出一個(gè)對(duì)話(huà)框,顯示此機(jī)器上安裝的驅(qū)動(dòng)器。當(dāng)從列表中選擇一個(gè)驅(qū)動(dòng)器后,文本域?qū)⒏淖優(yōu)榕c此驅(qū)動(dòng)器相連接的用戶(hù)名或字符串“None”。

實(shí)現(xiàn)例子程序的具體步驟如下:

1.在VisualC++中,利用AppWizard創(chuàng)建新的項(xiàng)目文件,并命名此項(xiàng)目文件為L(zhǎng)D17.MAK.

2.進(jìn)入AppStudio并創(chuàng)建新的對(duì)話(huà)框,在對(duì)話(huà)框中,添加標(biāo)題分別為DriveLtter:和NetworkName:以及UserName:的三個(gè)文本域。添加一個(gè)組合框,風(fēng)格設(shè)置為DropDownList。添加兩個(gè)靜態(tài)文本域,標(biāo)識(shí)符分別為:ID_NET_NAME和ID_NET_USER。

3.將對(duì)話(huà)框ID改為ID_NETWORK_USER,并設(shè)置標(biāo)題為ViewNetworkUsers,保存對(duì)話(huà)框。

4.進(jìn)入ClassWizard,選擇按鈕AddClass。在名字域中鍵入名字CNetworkUserDlg,基類(lèi)為CDIALOG,對(duì)話(huà)框ID為ID_NETWORK_USER。

5.在ClassWizard的下拉列表中選擇CNetworkUserDlg,從消息列表中選擇消息WM_INITDIALOG,點(diǎn)擊按鈕EditCode。

6.在CNetworkUserDlg的方法OnInitDialog中輸入下列代碼:

BOOLCNetworkUserDlg::OnInitDialog()

{

CDialog::OnInitDialog();

charbuf[20];

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

for(inti=0;i<26;i++)

{

sprintf(buf,"%c:\\",注釋?zhuān)篈注釋?zhuān)?i);

WORDtype="GetDriveType(buf);"

switch(type)

{caseDRIVE_FIXED:sprintf(buf,"%c:",注釋?zhuān)篈注釋?zhuān)?i);combo->AddString(buf);

break;

caseDRIVE_REMOTE:

sprintf(buf,"%c:",注釋?zhuān)篈注釋?zhuān)?i);

combo->AddString(buf);

break;

caseDRIVE_CDROM:

sprintf(buf,"%c:",注釋?zhuān)篈注釋?zhuān)?i);

combo->AddString(buf);

break;

}

}

combo->SetCurSel(0);

OnDriveChange();

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

7.在ClassWizard中,從對(duì)象ID列表中選擇對(duì)象IDC_COMBO1,選擇命令CBN_SELCHANGE。點(diǎn)擊按鈕AddFunction,命名方法為OnDriveChange。點(diǎn)擊按鈕EditCode,在CNetworkUserDlg的方法OnDriveChange中輸入下列代碼:

voidCNetworkUserDlg::OnDriveChange()

{

chardrive_letter[20];

charnetwork_name[256];

charuser_name[256];

unsignedlongsize=256;

UpdateData();

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

intsel=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("Notnetworkdrive");

if(WNetGetUser(drive_letter,user_name,&size))

GetDlgItem(ID_NET_USER)->SetWindowText(user_name);

else

GetDlgItem(ID_NET_USER)->SetWindowText("None");

}

8.進(jìn)入AppStudio,在菜單IDR_MAINFAME中,添加新的菜單Networks。在菜單Networks中,添加菜單項(xiàng)GetUserNames,其ID為ID_NETWORK_USERS。

9.進(jìn)入ClassWizard,從下拉列表中選擇類(lèi)CMainFrame,從對(duì)象ID列表中選擇對(duì)象ID_NETWORK_USERS,從消息列表中選擇消息COMMAND。點(diǎn)擊按鈕AddFunction,函數(shù)命名為OnNetworkUsers,點(diǎn)擊按鈕EditCode,在CMainFrame的方法OnNetworkUsers中輸入下列代碼:

voidCMainFrame::OnNetworkUsers()

{

CNetworkUserDlgdlg;

dlg.DoModal();

}

10.在文件MAINFRM.CPP的頂部添加下列行:

#include"NetworkUserDlg.h"

11.編譯并運(yùn)行此例子程序。

以上例子程序中的大部分代碼是相當(dāng)直接的。首先檢查驅(qū)動(dòng)器是否有效,如果是,將驅(qū)動(dòng)器添加到組合框中。當(dāng)用戶(hù)從組合框中選擇驅(qū)動(dòng)器后,程序接著向網(wǎng)絡(luò)軟件查詢(xún)此驅(qū)動(dòng)器邏輯連接的網(wǎng)絡(luò)名。最后,由于在同一臺(tái)工作站上可以用多個(gè)用戶(hù)名登錄多個(gè)網(wǎng)絡(luò),所以向網(wǎng)絡(luò)軟件查詢(xún)的是與驅(qū)動(dòng)器相連接的用戶(hù)名。