我们知道在电源选项 属性 里面可以设置 
  关闭监视器  1分钟之后,...,从不
  关闭硬盘    1分钟之后,...,从不
  待机时间    1分钟之后,...,从不请问这些设置我怎么用程序来实现
 
  比如我现在要把关闭监视器设成 5分钟之后请问各位大虾,应该怎么办?是不是要调用API?如果是,应该调用什么函数?另外补充说明:如果是调出控制面板让用户自己设置,这种功能我不需要,我要的是在程序里面自动完成这些操作,不需要用户的介入!

解决方案 »

  1.   

    试试这个
    BOOL SystemParametersInfo(
        UINT uiAction, // system parameter to query or set
        UINT uiParam, // depends on action to be taken
        PVOID pvParam, // depends on action to be taken
        UINT fWinIni  // user profile update flag
       );
      

  2.   

    To update an existing power scheme, call the WritePwrScheme, WriteGlobalPwrPolicy, or WriteProcessorPwrScheme function. Note that changes to the active power scheme do not automatically take effect. You must always call SetActivePwrScheme to update the active power scheme.
      

  3.   

    SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2); 关闭显示器
    SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); 打开
      

  4.   

    奇怪Delphi Win32 Developer's Recerences的
    Power Management Functions没有相关的函数.
      

  5.   

    jiangsheng(蒋晟.MSMVP2004Jan)     奇怪,你说的那些函数,好象都不存在?!
      

  6.   

    继续关注中
    上面的那些函数是在sdk里面的
    powrprof.lib   defined in powrprof.h我用EnumPwrSchemes做了一下测试,结果uiIndex能正确输出,但是其他一些字符或者字符串出现了乱码,
    #include <stdio.h>
    #include <tchar.h>
    #include <windows.h>
    #include <powrprof.h>
    BOOLEAN __stdcall EnumPowerScheme(  UINT uiIndex, 
    DWORD dwName, 
    LPTSTR sName,
    DWORD dwDesc, 
    LPTSTR sDesc,
    PPOWER_POLICY pp,
    LPARAM lParam)
    {
    _tprintf(__T("uiIndex :%d\n"),uiIndex);
    _tprintf(__T("dwName  :%d\n"),dwName);
    _tprintf(__T("sName :%s\n"),sName);
    _tprintf(__T("dwDesc :%d\n"),dwDesc);
    _tprintf(__T("sDesc :%c\n"),sDesc);
    //printf("uiIndex :%d\n",uiIndex);
    _tprintf(__T("\n"));
        return true;
    }
    int main()
    {
    LPARAM lparam=0;
    EnumPwrSchemes((PWRSCHEMESENUMPROC)EnumPowerScheme,lparam);
    return 0;
    }
      

  7.   

    按照 jiangsheng(蒋晟.MSMVP2004Jan) 的方法可以实现
    自己创建一个新的power scheme  (WritePwrScheme)
    POWER_POLICY中USER_POWER_POLICY结构
    VideoTimeoutAc VideoTimeoutDc是控制Display 的AC和Battery Power
    Power Control Panel中的“关闭监视器”是通过 VideoTimeoutAc 来设置的,单位为秒
    SpindownTimeoutAc SpindownTimeoutDc控制硬盘
    原理和上面相同
    其他的你可以去msdn.microsoft.com查看,里面有详尽的说明
      

  8.   

    很感谢各位大虾的帮助!!
      可是
    naughtyboy(重归起跑线) ( ) 信誉:您写的是c的调用方法,可是我没找到在delphi中powrprof.h对应的是什么文件!自己创建一个新的power scheme  这是什么类啊,在哪一个单元里面声明的呢?应该uses谁?
      

  9.   

    我找到一个方法,就是直接写注册表
    procedure TForm1.Button1Click(Sender: TObject);
    var reg:TRegistry;
        buffer:string;
        lpdwResult:Cardinal;
    begin
      reg:=TRegistry.Create;
      reg.RootKey:=HKEY_CURRENT_USER;
      reg.OpenKey('\Control Panel\PowerCfg\PowerPolicies\0\',True);
      buffer:=#$01#$00#$00#$00#$00#$00#$00#$00+
              #$01#$00#$00#$00#$00#$00#$00#$00+
              #$02#$00#$00#$00#$00#$00#$00#$00+
              #$00#$00#$00#$00#$00#$00#$00#$00+
              #$2c#$01#$00#$00#$32#$32#$00#$03+
              #$02#$00#$00#$00#$02#$00#$00#$00+
              #$00#$00#$18#$77#$2e#$f2#$07#$00+
              #$3c#$00#$00#$00#$00#$00#$00#$00+
              #$00#$00#$00#$00#$58#$02#$00#$00+
              #$01#$01#$64#$64#$64#$64#$93#$7c;
      reg.WriteBinaryData('Policies',(@buffer[1])^,80);
      reg.CloseKey;
      reg.Free;
      SendMessageTimeout(HWND_TOPMOST,WM_SETTINGCHANGE,0,0,SMTO_Normal,0,lpdwResult);//***
      ShowMessage('ok');
    end;
    但是还有个问题,就是要让系统参数立即刷新,没办法刷新!因为我发现SendMessageTimeOut没起作用!请问有没有人知道应该怎么样才能让系统立即刷新使用新的参数!因为我发现前面的程序已经写注册表成功了,但是就是系统还没有立即执行所修改的参数!
      

  10.   

    所有的函数都在powrprof.dll里面
    定义的时候你转换成delphi的就可以了
      

  11.   

    我手头上的msdn是2000年的,是不是版本太低了,居然找不到有关
    powrprof.lib   defined in powrprof.h
    这些的说明?!powrprof.dll里面到底定义的多少函数、原形是什么样的,msdn有写吗?是不是要高版本的msdn?
      

  12.   

    msdn.microsoft.com 里面是找到了,可是密密麻麻的,看了头大,只好慢慢研究了!如果有谁研究出来了具体在delphi中怎么实现,请留言,好吗?
      

  13.   

    根据 naughtyboy(重归起跑线) 提供的线索应该可以解决的
    不过我发现用delphi做,工作量比较大,要自己翻译!结贴!我不想做了,放弃了,现在我还不想用这个功能,等要用了在研究了,至少有方向了!如果哪位大哥有现成的delphi程序,可以留言,我另外开贴给分!