關(guān)于用戶權(quán)限(Privileges)的詳細(xì)信息,可以參見(jiàn)MSDN
如何注銷當(dāng)前用戶 可以使用ExitWindows或ExitWindowsEx函數(shù)注銷當(dāng)前用戶,。 在默認(rèn)的情況下,,當(dāng)程序調(diào)用ExitWindows或ExitWindowsEx注銷的時(shí)候,WM_QUERYENDSESSION消息也被發(fā)送到系統(tǒng)內(nèi)的每個(gè)窗口,。窗口所屬的程序響應(yīng)此消息并且返回TRUE表示可以被關(guān)閉,,如果任意一個(gè)程序返回FALSE,注銷操作將被取消,。 Windows NT/2000以及后續(xù)版本: 當(dāng)一個(gè)程序響應(yīng)WM_QUERYENDSESSION并返回TRUE,那么它就會(huì)立刻接受到WM_ENDSESSION消息并馬上結(jié)束,,而不管其他的程序是怎么樣回應(yīng)WM_QUERYENDSESSION消息的。 Windows 95/98/Me:只有當(dāng)系統(tǒng)內(nèi)所有的程序都對(duì)WM_QUERYENDSESSION消息回應(yīng)TRUE之后,,他們才會(huì)一起接受到WM_ENDSESSION 消息,,然后結(jié)束。 如果要強(qiáng)制關(guān)閉所有的程序,,使用ExitWindowsEx函數(shù),,指定EXW_FORCE標(biāo)志。如果這樣做,,系統(tǒng)不發(fā)送WM_QUERYENDSESSION 消息,,而直接終止正在運(yùn)行的程序。 在注銷的時(shí)候,,系統(tǒng)還向每一個(gè)進(jìn)程發(fā)送CTRL_LOGOFF_EVENT 控制碼,。控制臺(tái)程序可以注冊(cè)一個(gè)HandlerRoutine例程來(lái)處理這個(gè)控制碼(使用SetConsoleCtrlHandler函數(shù)),。(更多的關(guān)于控制臺(tái)的控制碼,,參見(jiàn)MSDN里“HandlerRoutine”有關(guān)章節(jié)) 綜上所述:只有所有的程序都允許退出,注銷操作才能成功,。如果某一個(gè)程序響應(yīng)WM_QUERYENDSESSION并返回FALSE ,用戶則不能被注銷,。這樣就可以寫出防止用戶注銷或關(guān)閉的程序(非強(qiáng)制情況)。 //這是注銷當(dāng)前用戶的代碼 ExitWindows(0, 0); //響應(yīng)WM_QUERYENDSESSION消息,如果在彈出消息框里選擇NO,則取消注銷,。 case WM_QUERYENDSESSION: { int r; r = MessageBox(NULL, "Shut down?","WM_QUERYENDSESSION", MB_YESNO); // Return TRUE to allow shutdown, FALSE to stop. return r == IDYES; break; } 如何鎖定工作站 使用LockWorkStation函數(shù)即可鎖定工作站,。系統(tǒng)會(huì)顯示一個(gè)鎖定對(duì)話框,告訴用戶此工作站正在使用并且已經(jīng)被鎖定,,可以被執(zhí)行鎖定的用戶或管理員解鎖,,解鎖的方式是按下CTRL_ALT_DEL并用正確的賬號(hào)和密碼登陸。 LockWorkStation函數(shù)成功調(diào)用的條件是: 調(diào)用者必須是運(yùn)行在系統(tǒng)交互桌面上的一般進(jìn)程,。 必須已經(jīng)有用戶登陸到系統(tǒng) 工作站未被鎖定,。 接受關(guān)閉通知 擁有正常窗口和消息隊(duì)列的程序通過(guò)WM_QUERYENDSESSION或WM_ENDSESSION消息獲得關(guān)閉通知。 控制臺(tái)則是在其控制流程(Handle Routines)里接受關(guān)閉通知,。要注冊(cè)一個(gè)控制臺(tái)控制流程,應(yīng)該使用SetConsoleCtrlHandler函數(shù) 服務(wù)程序在其控制流程里接受退出通知,。要注冊(cè)一個(gè)服務(wù)控制流程,應(yīng)該使用RegisterServiceCtrlHandlerEx函數(shù),。 關(guān)閉系統(tǒng)函數(shù)列表 函數(shù)名 函數(shù)功能描述 AbortSystemShutdown 取消由InitSystemShutdown引起的系統(tǒng)關(guān)閉操作 ExitWindows 注銷當(dāng)前用戶 ExitWindowsEx 注銷用戶,,關(guān)閉計(jì)算機(jī),關(guān)閉計(jì)算機(jī)并且重啟 InitiateSystemShutdown 發(fā)起關(guān)閉系統(tǒng)操作,,可以選擇關(guān)閉后重啟 InitiateSystemShutdownEx 同InitiateSystemShutdown,,擴(kuò)展的功能是可以在系統(tǒng) 事件日志(事件號(hào)6006)中寫入一個(gè)用戶指定的雙字節(jié)碼 LockWorkStation 鎖定工作站 系統(tǒng)關(guān)閉消息 WM_ENDSESSION wParam 表示是否要終止程序。如果是TRUE,指令該程序終止,,否則是FALSE lParam 表示用戶注銷還是系統(tǒng)被關(guān)閉,。如果此參數(shù)包含ENDSESSION_LOGOFF(lParam在這里是按位取值的)位,則表示是用戶注銷 Windows 2000 以及后續(xù)版本:如果lParam ==0,,則表示系統(tǒng)被關(guān)閉,。 程序收到此消息,如果wParam為TRUE,在完成消息處理后,,程序隨時(shí)都有可能被關(guān)閉,。所以在此消息的處理過(guò)程里,應(yīng)該盡量完成程序銷毀前所需要進(jìn)行的工作,。 WM_QUERYENDSESSION wParam 保留,,未使用 lParam 同WM_ENDSESSION; |
|
來(lái)自: jerry_123 > 《編程知識(shí)》