SHUTDOWN.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:
Windows编程
开发平台:
Visual C++
- //+---------------------------------------------------------------------------
- //
- // Microsoft Windows
- // Copyright 1992 - 1997 Microsoft Corporation.
- //
- // File: shutdown.c
- //
- // Contents:
- //
- // Classes:
- //
- // Functions:
- //
- // History: 4-28-95 RichardW Created
- //
- //----------------------------------------------------------------------------
- #include "gina.h"
- #pragma hdrstop
- WCHAR szShutdownSettingPath[] = TEXT("Software\Microsoft\Windows NT\CurrentVersion\Shutdown");
- int
- ShutdownDialogInit(
- HWND hDlg,
- LPARAM lParam)
- {
- PGlobals pGlobals;
- HKEY hKey;
- DWORD dwValue;
- DWORD dwSize;
- DWORD dwType;
- DWORD PowerOff;
- pGlobals = (PGlobals) lParam;
- SetWindowLong(hDlg, GWL_USERDATA, lParam);
- PowerOff = GetProfileInt(TEXT("Winlogon"), TEXT("PowerDownAfterShutdown"), 0);
- if (pGlobals->hUserToken)
- {
- ImpersonateLoggedOnUser(pGlobals->hUserToken);
- }
- dwValue = 0;
- if (!RegOpenKey(HKEY_CURRENT_USER,
- szShutdownSettingPath,
- &hKey))
- {
- dwSize = sizeof(DWORD);
- RegQueryValueEx(hKey, TEXT("Shutdown Setting"), 0, &dwType, (PBYTE) &dwValue, &dwSize);
- RegCloseKey(hKey);
- }
- if (pGlobals->hUserToken)
- {
- RevertToSelf();
- }
- if (!PowerOff)
- {
- ShowWindow(GetDlgItem(hDlg, IDD_CONFIRM_POWEROFF), SW_HIDE);
- }
- if (!pGlobals->hUserToken)
- {
- ShowWindow(GetDlgItem(hDlg, IDD_CONFIRM_LOGOFF), SW_HIDE);
- }
- switch (dwValue)
- {
- case 0:
- if (pGlobals->hUserToken)
- {
- CheckDlgButton(hDlg, IDD_CONFIRM_LOGOFF, 1);
- SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_LOGOFF));
- break;
- }
- case 2:
- CheckDlgButton(hDlg, IDD_CONFIRM_REBOOT, 1);
- SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_REBOOT));
- break;
- case 3:
- if (PowerOff)
- {
- CheckDlgButton(hDlg, IDD_CONFIRM_POWEROFF, 1);
- SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_POWEROFF));
- break;
- }
- default:
- CheckDlgButton(hDlg, IDD_CONFIRM_SHUTDOWN, 1);
- SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_SHUTDOWN));
- }
- CenterWindow(hDlg);
- SetFocus(GetDlgItem(hDlg, IDOK));
- return(1);
- }
- VOID
- UpdateShutdownSettings(
- PGlobals pGlobals,
- DWORD Setting)
- {
- // int err;
- HKEY hKey;
- DWORD Actual;
- switch (Setting)
- {
- default:
- case IDD_CONFIRM_LOGOFF:
- Actual = 0;
- break;
- case IDD_CONFIRM_SHUTDOWN:
- Actual = 1;
- break;
- case IDD_CONFIRM_REBOOT:
- Actual = 2;
- break;
- case IDD_CONFIRM_POWEROFF:
- Actual = 3;
- break;
- }
- if (pGlobals->hUserToken)
- {
- ImpersonateLoggedOnUser(pGlobals->hUserToken);
- }
- if (!RegOpenKey(HKEY_CURRENT_USER,
- szShutdownSettingPath,
- &hKey))
- {
- RegSetValueEx( hKey,
- TEXT("Shutdown Setting"),
- 0,
- REG_DWORD,
- (PBYTE) &Actual,
- sizeof(DWORD) );
- RegCloseKey(hKey);
- }
- if (pGlobals->hUserToken)
- {
- RevertToSelf();
- }
- }
- int
- CALLBACK
- ShutdownDlgProc(
- HWND hDlg,
- UINT Message,
- WPARAM wParam,
- LPARAM lParam)
- {
- PGlobals pGlobals;
- switch (Message)
- {
- case WM_INITDIALOG:
- return(ShutdownDialogInit(hDlg, lParam));
- case WM_COMMAND:
- if (LOWORD(wParam) == IDCANCEL)
- {
- EndDialog(hDlg, WLX_SAS_ACTION_NONE);
- }
- if (LOWORD(wParam) == IDOK)
- {
- pGlobals = (PGlobals) GetWindowLong(hDlg, GWL_USERDATA);
- if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_LOGOFF))
- {
- UpdateShutdownSettings(pGlobals, IDD_CONFIRM_LOGOFF);
- EndDialog(hDlg, WLX_SAS_ACTION_LOGOFF);
- }
- else if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_REBOOT))
- {
- UpdateShutdownSettings(pGlobals, IDD_CONFIRM_REBOOT);
- EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN_REBOOT);
- }
- else if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_POWEROFF))
- {
- UpdateShutdownSettings(pGlobals, IDD_CONFIRM_POWEROFF);
- EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
- }
- else
- {
- UpdateShutdownSettings(pGlobals, IDD_CONFIRM_SHUTDOWN);
- EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN);
- }
- }
- return(TRUE);
- }
- return(FALSE);
- }