VBA - 如何使用ShellExecute强制计算机进入睡眠状态(不是休眠状态)

时间:2015-08-20 02:33:21

标签: vba shell cmd

我在VBA上使用ShellExecute强制计算机进入睡眠状态(而不是休眠状态),为此我需要禁用休眠模式。我输入了rundll32.exe但是我在“powercfg.cpl -hibernate off”中收到错误。

我也试过了:

powercfg.exe /hibernate off

powercfg -hibernate off
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
                                                                ByVal hwnd As Long, _
                                                                ByVal lpszOp As String, _
                                                                ByVal lpszFile As String, _
                                                                ByVal lpszParams As String, _
                                                                ByVal lpszDir As String, _
                                                                ByVal FsShowCmd As Long) As Long
Const SW_SHOWNORMAL As Long = 1

Sub DoSleep()
    ShellExecute 0, "runas", "C:\WINDOWS\System32\rundll32.exe", "powercfg.cpl -h off", "C:\", SW_SHOWNORMAL
    ShellExecute 0, "runas", "C:\WINDOWS\System32\rundll32.exe", "powrprof.dll,SetSuspendState 0,1,0", "C:\", SW_SHOWNORMAL
    ShellExecute 0, "runas", "C:\WINDOWS\System32\rundll32.exe", "powercfg.cpl -hibernate on", "C:\", SW_SHOWNORMAL
End Sub

1 个答案:

答案 0 :(得分:0)

经过相当多的试验和错误,我找到了解决方案。这将通过VBA将您的计算机置于睡眠模式:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
                                                            ByVal hwnd As Long, _
                                                            ByVal lpszOp As String, _
                                                            ByVal lpszFile As String, _
                                                            ByVal lpszParams As String, _
                                                            ByVal lpszDir As String, _
                                                            ByVal FsShowCmd As Long) As Long
Const SW_SHOWNORMAL As Long = 1

Sub DoSleep()
    ShellExecute 0, "runas", "powercfg.exe", "/hibernate off", "C:\", SW_SHOWNORMAL
    Shell "C:\WINDOWS\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0"
    ShellExecute 0, "runas", "powercfg.exe", "/hibernate on", "C:\", SW_SHOWNORMAL
End Sub