★★★如何让硬盘进入休眠状态?

wan_ming 2003-06-20 03:36:47
有没有这样的函数及方法呢?请给出具体的代码,谢谢!
我知道用SendMessage来使显示器休眠,可是如何让硬盘休眠啊,而不是让系统进入休眠状态,救命啊!

我在delphi区问了3个月了没人能解决,救命!!!!!
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wan_ming 2003-06-30
  • 打赏
  • 举报
回复
up
wan_ming 2003-06-25
  • 打赏
  • 举报
回复
to:Skt32(荒城之月)
谢谢指导。但是SetSystemPowerState这个函数是让系统进入休眠状态,而我需要的是只让硬盘进入休眠状态(硬盘停转)而不是让系统休眠,就像是电源管理中的关闭硬盘。如何实现呢?
另外SetSuspendState这个函数我在delphi的帮助中没有查到,不会调用,不知道能不能实现我的要求?(我的硬盘地方不够,没装MSDN。)
在win98中能使硬盘关闭的函数应该是在Powrprof.dll中,但是里面很多的函数不知道该调用哪个,也不知道该用什么参数,请帮忙!
wan_ming 2003-06-21
  • 打赏
  • 举报
回复
等我回家试一下。

请问你用的是哪个版本的msdn,听说有的版本不是很好!
Skt32 2003-06-20
  • 打赏
  • 举报
回复

1。
msdn上搜APM

2。

用这个函数:
BOOL SetSystemPowerState( BOOL fSuspend, BOOL fForce);
只适用于win nt, 2000和xp,这是MSDN上说的,我没在98底下试过
又查了一下,SetSuspendState这个API可以在98底下用

3。

#include "stdafx.h"

#include <windows.h>

int main(int argc, char* argv[])
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE;

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

//ExitWindowsEx(EWX_REBOOT, 0L);
SetSystemPowerState( FALSE, TRUE );
return 1;
}

2000下测试通过
msdn上说:98/95也支持,只不过第一个参数忽略。


2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧