Windows 2000/XP 下实现休眠

原创 2004年01月14日 11:08:00

实现休眠功能很简单,只要在任意想要执行的地方执行如下给出的休眠函数SetPower()就行,其实休眠很简单,只需要API:SetSystemPowerState()就行,就如关机/注销/重启一样,只需要ExitWindowEx(),但这些API可以直接用在98下,却不能用在2000/XP中,因为这里牵涉到了用户权限,没有权限是不能进行这些操作的,所以,首先要取得权限,下面给出代码:

#define RTN_ERROR 13

void  PERR(LPTSTR szAPI, DWORD dwLastError)   //休眠时调用到的一个函数,用来

                                                                             ////记录休眠中遇到的错误

{
    LPTSTR MessageBuffer;
    DWORD dwBufferLength;
    fprintf(stderr,"%s error! (rc=%lu)/n", szAPI, dwLastError);

    if(dwBufferLength=FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                                    FORMAT_MESSAGE_FROM_SYSTEM,
                                    NULL,
                                    dwLastError,
                                    LANG_NEUTRAL,
                                    (LPTSTR) &MessageBuffer,
                                    0,
                                    NULL))
    {

        DWORD dwBytesWritten;

         WriteFile(GetStdHandle(STD_ERROR_HANDLE),
                  MessageBuffer,
                  dwBufferLength,
                  &dwBytesWritten,
                  NULL);
        LocalFree(MessageBuffer);
    }
}

INT SetPower()有       //主要功能函数
{
 
 
   TOKEN_PRIVILEGES tp;
    HANDLE hToken;
 LUID luid;

   LPTSTR MachineName=NULL;

 if(!OpenProcessToken(GetCurrentProcess(),         ////////从这里////////////////////////////
                        TOKEN_ADJUST_PRIVILEGES,
                        &hToken ))
    {
        PERR("OpenProcessToken", GetLastError() );
        return RTN_ERROR;
    }

    if(!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))

    {
        PERR("LookupPrivilegeValue", GetLastError() );
        return RTN_ERROR;
    }

    tp.PrivilegeCount           = 1;
    tp.Privileges[0].Luid       = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
                                NULL, NULL );    ////////////////到这里,是取得权限//////////////////////

        SetSystemPowerState(FALSE,TRUE);      
  return 0;

}

 

这样,在任意需要休眠的时候调用SetPower();即可休眠,但是有一点要注意:必须打开了高级电源管理的休眠支持。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows NT/2000/XP下不用驱动的Ring0代码实现(http://webcrazy.yeah.net)

 Windows NT/2000/XP下不用驱动的Ring0代码实现                  WebCrazy(http://webcrazy.yeah.net/)     大家知道,Win...
  • freexploit
  • freexploit
  • 2005年01月31日 18:17
  • 1346

用VC++实现Windows 2000/XP下的休眠

 实现休眠功能很简单,只要在任意想要执行的地方执行如下给出的休眠函数SetPower()就行,其实休眠很简单,只需要API:SetSystemPowerState()就行,就如关机/注销/重启一样,只...
  • Y___Y
  • Y___Y
  • 2006年09月10日 13:13
  • 858

Windows 2000/XP下的休眠 VC++实现

首先要取得权限,下面给出代码:  #define RTN_ERROR 13  void PERR(LPTSTR szAPI, DWORD dwLastError) //休眠时调用到的一个函数,用来  ...
  • bluewind23
  • bluewind23
  • 2009年07月28日 10:44
  • 360

XP睡眠唤醒后不再要求输入密码(没有测试过)

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER/Software/Policies/Microsoft/Windows/System/Po...
  • tanaya
  • tanaya
  • 2006年06月14日 13:48
  • 2200

Windows下条件变量的实现

条件变量是什么? 是一种同步对象。 条件变量有什么用?用于复杂的、多线程的、多核的程序中,实现多个线程间同步任务。 条件变量与其它同步对象的区别?与事件、互斥锁、segment等同步对象相比,条件变量...
  • leafarmy
  • leafarmy
  • 2009年03月31日 21:06
  • 5732

在预装Win XP的电脑上安装Win 2000

    现在新买的品牌机大多预装了Windows XP,也许你还怀念以前的Windows 2000,或者由于一些需要,你必需安装Windows XP和Windows 2000的双系统。虽然一台电脑上可...
  • 191301587
  • 191301587
  • 2004年12月21日 11:47
  • 774

Windows 2000 Server架设SSH服务器

题记:          在谈到服务器的远程管理时,使用UNIX、linux朋友都应该会毫不犹豫的说,用ssh呀。          不错SSH是UNIX/LINUX下最流行的远程管理方式之一.   ...
  • forlinux
  • forlinux
  • 2006年06月06日 09:10
  • 7104

教你如何合并硬盘分区不用任何工具2000/xp/vista/win7

教你如何合并硬盘分区不用任何工具2000/xp/vista/win7
  • snlying
  • snlying
  • 2011年03月10日 09:31
  • 5016

实现98/2000/XP下的休眠和关机

a.article:link {font-size:13px; color:#0000ff;text-decoration:underline;} a.article:visited {font-s...
  • Aquarius_1983
  • Aquarius_1983
  • 2005年04月11日 16:29
  • 877

Windows XP/2000实现自动登陆

Windows XP/2000实现自动登陆:不管计算机是否已加域,都可以通过更改注册表的方法来实现。 在注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows...
  • chinaxhb
  • chinaxhb
  • 2011年02月21日 09:43
  • 336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows 2000/XP 下实现休眠
举报原因:
原因补充:

(最多只允许输入30个字)