定時關機的實現

來源:互聯網
上載者:User

    自從接觸電腦以來,很多時候都不能做到早睡早起身體好,這兩天寫了個小軟體來管理電腦,到了設定的時間就自動關機,至於能不能起到相應的作用那是後話,這裡僅僅談談設計思路。

    程式初始化的時候首先設定預設關機時間是晚上10點到淩晨6點半,接著從註冊表讀取關機時間,並將自己設為開機自啟動,然後建立視窗,風格為WS_EX_LAYERED和 WS_EX_TOOLWINDOW,並調用SetLayeredWindowAttributes設定黑色為透明色,接著隱藏視窗,到了關機時間,顯示視窗,並繪製倒計時提示文字,倒計時結束後就關機。

程式DEMO:點擊下載

設定視窗為透明背景
SetWindowLong( hWnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TOOLWINDOW );SetLayeredWindowAttributes( hWnd, RGB( 0, 0, 0 ), 0, LWA_COLORKEY );

封裝的註冊表操作介面:
BOOL ReadRegValue( HKEY hRootKey, TCHAR* tszSubKey, TCHAR* tszValueName, DWORD dwKeyType, BYTE* byData, DWORD dwDataSize ){HKEY hKey = NULL;BOOL bResult = FALSE;do {REGSAM sam = KEY_ALL_ACCESS;if ( ERROR_SUCCESS != RegOpenKeyEx( hRootKey, tszSubKey, 0, sam, &hKey )){break;}DWORD dwType = dwKeyType;DWORD dwSize = dwDataSize;if ( ERROR_SUCCESS != RegQueryValueEx( hKey, tszValueName, 0, &dwType, byData, &dwSize  )){break;}bResult = TRUE;} while ( 0 );if ( hKey ){RegCloseKey( hKey );hKey = NULL;}return bResult;}BOOL WriteRegValue( HKEY hRootKey, TCHAR* tszSubKey, TCHAR* tszValueName,     DWORD dwKeyType, BYTE* byData, DWORD dwDataSize ){BOOL bResult  = FALSE;HKEY hKey     = NULL;do {DWORD  dwResult = 0;REGSAM sam      = KEY_ALL_ACCESS;if ( ERROR_SUCCESS != RegCreateKeyEx( hRootKey, tszSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, sam, NULL, &hKey, &dwResult )){break;}if ( ERROR_SUCCESS != RegSetValueEx( hKey, tszValueName, 0, dwKeyType, byData, dwDataSize )){break;;}RegFlushKey( hKey );bResult = TRUE;} while ( 0 );if ( hKey ){RegCloseKey( hKey );hKey = NULL;}return bResult;}
封裝的關機介面:
void ShutdownWindows(){HANDLE hToken = NULL;BOOL bResult = FALSE;do {if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken )){break;}TOKEN_PRIVILEGES token_priv;token_priv.PrivilegeCount = 1;if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &token_priv.Privileges[0].Luid )){break;}token_priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;token_priv.PrivilegeCount           = 1;if ( !AdjustTokenPrivileges( hToken, FALSE, &token_priv, 0, NULL, NULL )){break;}bResult = TRUE;} while ( 0 );ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE | EWX_FORCEIFHUNG, SHTDN_REASON_MAJOR_APPLICATION );}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.