1,SetSuspendState不是为rundll32设计的。无法仅用一行rundll32睡眠。可以先取消休眠选项……,那是另话。
2,想仅用一行rundll32休眠,如下即可,不必带参数。
如下煞有介事的写法,也是臆想的:
SetSuspendState函数:
BOOL WINAPI SetSuspendState(BOOL Hibernate,BOOL ForceCritical,BOOL DisableWakeEvent);
简而言之,第一个参数为TRUE,则休眠。为FALSE,则睡眠(待机)。
rundll32接受的函数原型:
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
运行rundll32时,一个进程被开启,该进程(的线程)创建一个隐藏的窗口,该窗口句柄(不会为0)做为第一个参数被传入所调用的函数。讹传的“0,1,0”,是做为第三个参数的。
如果原型不符合,rundll32就生搬硬套,于是:
2,想仅用一行rundll32休眠,如下即可,不必带参数。
rundll32.exe powrprof.dll,SetSuspendState
如下煞有介事的写法,也是臆想的:
rundll32.exe powrprof.dll,SetSuspendState Hibernate
rundll32.exe powrprof.dll,SetSuspendState Sleep
解释机理:
SetSuspendState函数:
BOOL WINAPI SetSuspendState(BOOL Hibernate,BOOL ForceCritical,BOOL DisableWakeEvent);
简而言之,第一个参数为TRUE,则休眠。为FALSE,则睡眠(待机)。
rundll32接受的函数原型:
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
运行rundll32时,一个进程被开启,该进程(的线程)创建一个隐藏的窗口,该窗口句柄(不会为0)做为第一个参数被传入所调用的函数。讹传的“0,1,0”,是做为第三个参数的。
如果原型不符合,rundll32就生搬硬套,于是:
SetSuspendState((BOOL)hwnd, (BOOL)hinst, (BOOL)"0,1,0");
因为第一个参数总是被转换为TRUE,所以总是休眠。因为第二、三个参数也总是被转换为TRUE,所以只有一个结果。