操作注册表,关闭计算机
来源:互联网 发布:对编程的认识与看法 编辑:程序博客网 时间:2024/06/03 04:16
写了个定时关机的小程序,到点关机,早睡早起。
#include<Windows.h>BOOL MySystemShutdown(){HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return( FALSE ); // Get the LUID for the shutdown privilege. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError() != ERROR_SUCCESS) return FALSE; // Shut down the system and force all applications to close. if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM |SHTDN_REASON_MINOR_UPGRADE |SHTDN_REASON_FLAG_PLANNED)) return FALSE; return TRUE;}BOOL MyRegeditRun(){//写入注册表,开机自启动 HKEY hKey; //找到系统的启动项 LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; LPCTSTR lpValue = "shutdown";//打开启动项Key long lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_ALL_ACCESS, &hKey); if(lRet == ERROR_SUCCESS) { char buff[MAX_PATH];DWORD dwType = REG_SZ;DWORD dwSize = MAX_PATH; lRet = RegQueryValueExA(hKey, lpValue, 0, &dwType, (LPBYTE)buff, &dwSize);char filePath[MAX_PATH];DWORD dwRet = GetModuleFileName(NULL, filePath, MAX_PATH); if (lRet == ERROR_SUCCESS){if (!strcmp(buff, filePath)){//has key and valueRegCloseKey(hKey);return TRUE;}}//don't has key, set valuelRet = RegSetValueExA(hKey, lpValue, 0, REG_SZ, (BYTE *)filePath, dwRet); if(lRet == ERROR_SUCCESS){RegCloseKey(hKey);return TRUE;}RegCloseKey(hKey);}return FALSE;}LONG SleepTime(UINT hour, UINT minute){SYSTEMTIME time;GetLocalTime(&time);return (hour - time.wHour) * 3600 + (minute - time.wMinute) * 60;}void ReadTimeIni(int& hour, int& minute, bool isWrite = false){wchar_t strPath[MAX_PATH];wchar_t* strApp = L"Time";::GetCurrentDirectoryW(MAX_PATH, strPath);wcscat_s(strPath, MAX_PATH, L"\\time.ini");if (isWrite){::WritePrivateProfileStringW(strApp, L"hour", L"0", strPath);::WritePrivateProfileStringW(strApp, L"minute", L"0", strPath);}else{hour = ::GetPrivateProfileIntW(strApp, L"hour", 0, strPath);minute = ::GetPrivateProfileIntW(strApp, L"minute", 0, strPath);}}int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ) {if(MyRegeditRun()){SYSTEMTIME time;GetLocalTime(&time);int hour, minute;ReadTimeIni(hour, minute);long second = SleepTime(hour, minute);if (second >= 0){::Sleep(second * 1000);if(!MySystemShutdown())::MessageBox(NULL, "Shutdown Fail", "Error", MB_ICONERROR);}}else{::MessageBox(NULL, "Regedit Run Error", "Error", MB_ICONERROR);}return 0;}
- 操作注册表,关闭计算机
- C++ 用注册表可以对计算机实现的操作
- 关闭计算机
- 关闭计算机
- 关闭计算机
- 操作注册表
- 注册表操作
- 注册表操作
- 操作注册表
- 注册表操作
- 注册表操作
- 注册表操作
- 注册表操作
- 注册表操作
- 注册表操作
- 注册表操作
- 注册表操作
- 操作注册表
- 排序算法 (稳定性时间复杂度分析)
- codility上的练习 (4)
- DM642 DSP内存管理的一点经验
- Java验证码 patchca使用配置方法
- 数据结构B-树
- 操作注册表,关闭计算机
- jquery mobile 经验小结 (1)
- 日期时间选择控件配置使用方法
- oracle断电断网出现的问题 .
- C# chart 图解
- 【性能测试思想】如何规避生产环境性能测试风险
- 关键字new和newInstance方法区别
- “当看到一个程序员冥思苦想的时候,不要过去打扰,甚至在极端的情况下,一句友好的问候都是多余的。 ”
- easyui struts后台实现tree返回json数据