如何关机?? 请问如何实现:单击一个按纽,实现关机,重启,注销??都需要那些函数?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL ExitWindowsEx( UINT uFlags, // shutdown operation DWORD dwReserved // reserved);BOOL ExitWindows( DWORD dwReserved, // reserved; must be zero UINT uReserved // reserved; must be zero); ExitWindowsEx可以注销,关机,重启,具体查MSDN吧。 void Shutdown9x(){ switch (shutdown) { case 0: ExitWindowsEx(EWX_SHUTDOWN, 0L); break; case 1: ExitWindowsEx(EWX_REBOOT, 0L); break; default: WinExec("Exit To Dos.pif", SW_SHOWNORMAL); break; }}BOOL ShutdownNT(){HANDLE hToken; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError() != ERROR_SUCCESS) return FALSE; if (shutdown == TRUE) ExitWindowsEx(EWX_SHUTDOWN, 0L); else ExitWindowsEx(EWX_REBOOT, 0L);return TRUE;}其实都是用ExitWindowsEx()退出的shutdown表示是退出还是重起2k下要做都一些安全性的东西只是//判断系统类型BOOL IsWindowsNT(){ BOOL bRet = FALSE; BOOL bOsVersionInfoEx; OSVERSIONINFOEX osvi; // Try calling GetVersionEx using the OSVERSIONINFOEX structure, // If that fails, try using the OSVERSIONINFO structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return bRet; } if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion <= 4) { bRet = TRUE; } return bRet;}BOOL IsWindows2k(){ BOOL bRet = FALSE; BOOL bOsVersionInfoEx; OSVERSIONINFOEX osvi; // Try calling GetVersionEx using the OSVERSIONINFOEX structure, // If that fails, try using the OSVERSIONINFO structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) { // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) return bRet; } if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 5) { bRet = TRUE; } return bRet;} 这代码是我用在别的地方的你不行就不要写这么多了就直接HANDLE hToken; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if (GetLastError() != ERROR_SUCCESS) return FALSE; //不考虑重起的情况了 ExitWindowsEx(EWX_SHUTDOWN, 0L); return TRUE; 完全同意 akiy(winexec) 。以前我也遇到过这样的问题。 2k和xp要取得权限才能重启和关机 如何用RegisterDeviceNotification注册监控网络? 修改xp sp2下raw socket遇到的问题 MFC编程实现对话框 的最大化 "@......$"@起始.$结束?? 宏和函数有什么区别? 请问各位高手,怎么判断一个文件路径是否存在,如果不存在的话就进行创建? VC里不能用CopyMemory? atl有那本好书? ~端口的算法? 一道projection/back projection习题 关于DllGetClassObject的疑问! 有关键盘钩子的问题,up者有分
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);BOOL ExitWindows(
DWORD dwReserved, // reserved; must be zero
UINT uReserved // reserved; must be zero
);
可以注销,关机,重启,具体查MSDN吧。
void Shutdown9x()
{
switch (shutdown)
{
case 0:
ExitWindowsEx(EWX_SHUTDOWN, 0L);
break;
case 1:
ExitWindowsEx(EWX_REBOOT, 0L);
break;
default:
WinExec("Exit To Dos.pif", SW_SHOWNORMAL);
break;
}
}
BOOL ShutdownNT()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
if (shutdown == TRUE)
ExitWindowsEx(EWX_SHUTDOWN, 0L);
else ExitWindowsEx(EWX_REBOOT, 0L);
return TRUE;
}其实都是用ExitWindowsEx()退出的
shutdown表示是退出还是重起
2k下要做都一些安全性的东西
只是
//判断系统类型
BOOL IsWindowsNT()
{
BOOL bRet = FALSE;
BOOL bOsVersionInfoEx;
OSVERSIONINFOEX osvi; // Try calling GetVersionEx using the OSVERSIONINFOEX structure,
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return bRet;
} if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion <= 4)
{
bRet = TRUE;
} return bRet;
}BOOL IsWindows2k()
{
BOOL bRet = FALSE;
BOOL bOsVersionInfoEx;
OSVERSIONINFOEX osvi; // Try calling GetVersionEx using the OSVERSIONINFOEX structure,
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return bRet;
} if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 5)
{
bRet = TRUE;
} return bRet;
}
你不行就不要写这么多了
就直接
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
//不考虑重起的情况了
ExitWindowsEx(EWX_SHUTDOWN, 0L);
return TRUE;