请问各位:     怎样在程序中"关闭"显示器(调用哪个 API 才能象 Windows "电源管理"中那样使显示器的指示灯由亮变暗-进入休眠状态)?而不是用"SendMessage(Application->Handle,WM_SYSCOMMAND,SC_MONITORPOWER,2);")之类的发送消息的方法。 多谢!

解决方案 »

  1.   

    SendMessage(Application->Handle,WM_SYSCOMMAND,SC_MONITORPOWER,2)是不是叫显示器变黑,而不是将显示器由亮变暗-进入休眠状态?
      

  2.   

    正是这样,“SendMessage...”的方法完成的功能并不符合要求。
      

  3.   

    Win98下可以, Win2000下失效WIn2000下我只会烧显示器. ^_^
      

  4.   

    procedure TForm1.AdjustToken;
    var
      hdlProcessHandle : Cardinal;
      hdlTokenHandle   : Cardinal;
      tmpLuid          : Int64;
      tkp              : TOKEN_PRIVILEGES;
      tkpNewButIgnored : TOKEN_PRIVILEGES;
      lBufferNeeded    : Cardinal;
      Privilege        : array[0..0] of _LUID_AND_ATTRIBUTES;
    begin
      hdlProcessHandle := GetCurrentProcess;
      OpenProcessToken(hdlProcessHandle,
                       (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),
                       hdlTokenHandle);
      // Get the LUID for shutdown privilege.
      LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
      Privilege[0].Luid := tmpLuid;
      Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
      tkp.PrivilegeCount := 1;   // One privilege to set
      tkp.Privileges[0] := Privilege[0];
      // Enable the shutdown privilege in the access token of this process.
      AdjustTokenPrivileges(hdlTokenHandle,False,tkp,Sizeof(tkpNewButIgnored),
                            tkpNewButIgnored,lBufferNeeded);
    end;procedure TForm1.N22Click(Sender: TObject);
    begin
      if MessageBox(Handle,'确定要休眠吗?','提问:',MB_YESNO+MB_ICONQUESTION)= idYes then
        begin
          AdjustToken;
          SetSystemPowerState(false,True);
        end;
    end;//绝对有效,散分了