我们知道在电源选项 属性 里面可以设置
关闭监视器 1分钟之后,...,从不
关闭硬盘 1分钟之后,...,从不
待机时间 1分钟之后,...,从不请问这些设置我怎么用程序来实现
比如我现在要把关闭监视器设成 5分钟之后请问各位大虾,应该怎么办?是不是要调用API?如果是,应该调用什么函数?另外补充说明:如果是调出控制面板让用户自己设置,这种功能我不需要,我要的是在程序里面自动完成这些操作,不需要用户的介入!
关闭监视器 1分钟之后,...,从不
关闭硬盘 1分钟之后,...,从不
待机时间 1分钟之后,...,从不请问这些设置我怎么用程序来实现
比如我现在要把关闭监视器设成 5分钟之后请问各位大虾,应该怎么办?是不是要调用API?如果是,应该调用什么函数?另外补充说明:如果是调出控制面板让用户自己设置,这种功能我不需要,我要的是在程序里面自动完成这些操作,不需要用户的介入!
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
);
SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1); 打开
Power Management Functions没有相关的函数.
上面的那些函数是在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;
}
自己创建一个新的power scheme (WritePwrScheme)
POWER_POLICY中USER_POWER_POLICY结构
VideoTimeoutAc VideoTimeoutDc是控制Display 的AC和Battery Power
Power Control Panel中的“关闭监视器”是通过 VideoTimeoutAc 来设置的,单位为秒
SpindownTimeoutAc SpindownTimeoutDc控制硬盘
原理和上面相同
其他的你可以去msdn.microsoft.com查看,里面有详尽的说明
可是
naughtyboy(重归起跑线) ( ) 信誉:您写的是c的调用方法,可是我没找到在delphi中powrprof.h对应的是什么文件!自己创建一个新的power scheme 这是什么类啊,在哪一个单元里面声明的呢?应该uses谁?
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没起作用!请问有没有人知道应该怎么样才能让系统立即刷新使用新的参数!因为我发现前面的程序已经写注册表成功了,但是就是系统还没有立即执行所修改的参数!
定义的时候你转换成delphi的就可以了
powrprof.lib defined in powrprof.h
这些的说明?!powrprof.dll里面到底定义的多少函数、原形是什么样的,msdn有写吗?是不是要高版本的msdn?
不过我发现用delphi做,工作量比较大,要自己翻译!结贴!我不想做了,放弃了,现在我还不想用这个功能,等要用了在研究了,至少有方向了!如果哪位大哥有现成的delphi程序,可以留言,我另外开贴给分!