WIN2000下
锁定计算机后,我想实现定时自动关机,现在有两个问题:
1:WIN2000关闭系统的程序的路径?
2:如何自动解除锁定?
有没有人做个的程序参考一下。
锁定计算机后,我想实现定时自动关机,现在有两个问题:
1:WIN2000关闭系统的程序的路径?
2:如何自动解除锁定?
有没有人做个的程序参考一下。
解决方案 »
- OnPreCreate函数具体的作用是什么?
- 放了文本控件想用SetDlgItemText(IDC_STATIC, strValue)设置值,IDC_STATIC怎么定义?
- <<Windows NT/2000 Native API Reference>>这本书在哪卖?有没有中文的?
- 有些消息丢了!!??
- 请问已经用MFC编好的应用程序,如何方便的转化成MFC ActiveX控件?
- 在CEditView退出时,如何不让它弹出保存消息框(我不需要保存结果)?
- 怎样将一个普通的DOS界面窗口程序改为WINDOWS窗口程序?
- 字体问题,3:00以前结贴。
- 如何做一个像VC一样的,对话框编辑器,主要是能拖动上面的控件,或者可以改变控件的大小。
- 怎么知道MFC打开对话框的文件类型?
- 很是奇怪的问题!vc + access 数据库的问题!!! 高分求救
- 简单问题
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
LUID sedebugnameValue;
if(!IsWin98())
{
if(!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return ;
if(!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME , &sedebugnameValue ) )
{
CloseHandle( hToken );
return ;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
CloseHandle( hToken );
}
if(!ExitWindowsEx(EWX_LOGOFF,0L))
AfxMessageBox("关闭计算机失败!"); ////EWX_REBOOT可以用其它参数代替来实现关闭电源等功能。
}void CShutDownView::OnExit()
{
CWnd* pMainWindow = AfxGetMainWnd();
::PostMessage(pMainWindow->m_hWnd,WM_CLOSE,0,0);
}void CShutDownView::OnRestart()
{
/*
步骤:
1、opens the access token associated with a process.
*/ HANDLE hToken;
TOKEN_PRIVILEGES tkp;
LUID sedebugnameValue;
if(!IsWin98())
{
if(!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return ;
/* The LookupPrivilegeValue function retrieves the locally unique identifier (LUID)
used on a specified system to locally represent the specified privilege name.
BOOL LookupPrivilegeValue(
LPCTSTR lpSystemName,// address of string specifying the system
LPCTSTR lpName, // address of string specifying the privilege
PLUID lpLuid // address of locally unique identifier
);
*/
if(!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME , &sedebugnameValue ) )
{
CloseHandle( hToken );
return ;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
/*
The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access.
TokenPrivileges(
HANDLE TokenHandle, // handle to token that contains privileges
BOOL DisableAllPrivileges,// flag for disabling all privileges
PTOKEN_PRIVILEGES NewState,// pointer to new privilege information
DWORD BufferLength, // size, in bytes, of the PreviousState buffer
PTOKEN_PRIVILEGES PreviousState, // receives original state of changed privileges
PDWORD ReturnLength // receives required size of the PreviousState buffer
);*/
AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
CloseHandle( hToken );
}
if(!ExitWindowsEx(EWX_REBOOT,0L))
AfxMessageBox("重新启动失败!"); ////EWX_REBOOT可以用其它参数代替来实现关闭电源等功能。
}void CShutDownView::OnShutdown()
{ HANDLE hToken;
TOKEN_PRIVILEGES tkp;
LUID sedebugnameValue;
if(!IsWin98())
{
if(!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return ;
if(!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME , &sedebugnameValue ) )
{
CloseHandle( hToken );
return ;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
CloseHandle( hToken );
}
if(!ExitWindowsEx(EWX_SHUTDOWN,0L))
AfxMessageBox("关闭计算机失败!"); ////EWX_REBOOT可以用其它参数代替来实现关闭电源等功能。 }
void CShutDownView::OnPoweroff()
{ HANDLE hToken;
TOKEN_PRIVILEGES tkp;
LUID sedebugnameValue;
if(!IsWin98())
{ if(!OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
return ;
if(!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME , &sedebugnameValue ) )
{
CloseHandle( hToken );
return ;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
CloseHandle( hToken );
}
if(!ExitWindowsEx(EWX_POWEROFF,0L))
AfxMessageBox("关闭计算机失败!"); ////EWX_REBOOT可以用其它参数代替来实现关闭电源等功能。
}BOOL CShutDownView::IsWin98()
{
DWORD dwVersionNum = GetVersion();
if(dwVersionNum<0x80000000)//NT
return FALSE;
else //WIN98
return TRUE;
}
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
BOOL fResult; // Get the current process token handle so we can get shutdown privilege.
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return FALSE; // Get the LUID for shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); // Cannot test the return value of AdjustTokenPrivileges.
if(GetLastError() != ERROR_SUCCESS)
return FALSE;
// Actually shutdown
fResult = InitiateSystemShutdown(NULL, NULL, 0, TRUE, FALSE);
// to shutdown
// fResult = InitiateSystemShutdown(NULL, NULL, 0, TRUE, TRUE);
// to reboot
if(!fResult)
return FALSE; // Disable shutdown privilege.
tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
if(GetLastError() != ERROR_SUCCESS)
return FALSE;
return TRUE;
}