找出計算機上當前登錄入網的用戶
時間:2022-11-17 11:02:00
導語:找出計算機上當前登錄入網的用戶一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
有的程序員希望能夠顯示用戶當前登錄的用戶名。這使得程序員可以識別當前企圖執行某個操作的用戶,也可以通知用戶機器已被某個用戶以外的用戶名登錄。如何使用Windows9x的網絡函數來完成此功能呢?
利用WindowsAPI函數WNetGetUser可以確定當前登錄的用戶。在WIN32系統中(Windows9x和WindowsNT),此函數接受本地驅動器名,返回用戶名及其大小(用戶名緩沖區的大小)。
按照下列步驟實現一個例子程序。運行此例子程序,從菜單NetWorks中選擇菜單項UserNames,將彈出一個對話框,顯示此機器上安裝的驅動器。當從列表中選擇一個驅動器后,文本域將改變為與此驅動器相連接的用戶名或字符串“None”。
實現例子程序的具體步驟如下:
1.在VisualC++中,利用AppWizard創建新的項目文件,并命名此項目文件為LD17.MAK.
2.進入AppStudio并創建新的對話框,在對話框中,添加標題分別為DriveLtter:和NetworkName:以及UserName:的三個文本域。添加一個組合框,風格設置為DropDownList。添加兩個靜態文本域,標識符分別為:ID_NET_NAME和ID_NET_USER。
3.將對話框ID改為ID_NETWORK_USER,并設置標題為ViewNetworkUsers,保存對話框。
4.進入ClassWizard,選擇按鈕AddClass。在名字域中鍵入名字CNetworkUserDlg,基類為CDIALOG,對話框ID為ID_NETWORK_USER。
5.在ClassWizard的下拉列表中選擇CNetworkUserDlg,從消息列表中選擇消息WM_INITDIALOG,點擊按鈕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:\\",注釋:A注釋:+i);
WORDtype="GetDriveType(buf);"
switch(type)
{caseDRIVE_FIXED:sprintf(buf,"%c:",注釋:A注釋:+i);combo->AddString(buf);
break;
caseDRIVE_REMOTE:
sprintf(buf,"%c:",注釋:A注釋:+i);
combo->AddString(buf);
break;
caseDRIVE_CDROM:
sprintf(buf,"%c:",注釋:A注釋:+i);
combo->AddString(buf);
break;
}
}
combo->SetCurSel(0);
OnDriveChange();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
7.在ClassWizard中,從對象ID列表中選擇對象IDC_COMBO1,選擇命令CBN_SELCHANGE。點擊按鈕AddFunction,命名方法為OnDriveChange。點擊按鈕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.進入AppStudio,在菜單IDR_MAINFAME中,添加新的菜單Networks。在菜單Networks中,添加菜單項GetUserNames,其ID為ID_NETWORK_USERS。
9.進入ClassWizard,從下拉列表中選擇類CMainFrame,從對象ID列表中選擇對象ID_NETWORK_USERS,從消息列表中選擇消息COMMAND。點擊按鈕AddFunction,函數命名為OnNetworkUsers,點擊按鈕EditCode,在CMainFrame的方法OnNetworkUsers中輸入下列代碼:
voidCMainFrame::OnNetworkUsers()
{
CNetworkUserDlgdlg;
dlg.DoModal();
}
10.在文件MAINFRM.CPP的頂部添加下列行:
#include"NetworkUserDlg.h"
11.編譯并運行此例子程序。
以上例子程序中的大部分代碼是相當直接的。首先檢查驅動器是否有效,如果是,將驅動器添加到組合框中。當用戶從組合框中選擇驅動器后,程序接著向網絡軟件查詢此驅動器邏輯連接的網絡名。最后,由于在同一臺工作站上可以用多個用戶名登錄多個網絡,所以向網絡軟件查詢的是與驅動器相連接的用戶名。
- 上一篇:安全投入保障制度2
- 下一篇:大電流LED驅動器LTC3454