スタンバイ状態への移行(Windows 11)

タグの編集
投稿者 N88-BASIC  (社会人) 投稿日時 2023/2/14 15:09:38
Windows 11 Home (64) ver 22H2 + Visual Studio 2022 (Visual Basic) の環境において、PC をスタンバイ状態(Winodws のスタートメニューの電源ボタンをクリックではスリープ)にしたいと考えております。

Dobon.net さんの情報より、下記のようなコードを利用しています(実際はアプリ内で定刻にサスペンドする予定です)。

 Private Sub Sleep_Click(sender As Object, e As EventArgs) Handles BtSleep.Click
    System.Threading.Thread.Sleep(1000 * iSleep)
    Application.SetSuspendState(PowerState.Suspend, False, False)
    Me.Close()
 End Sub

上記コードにおいて、デスクトップパソコンでは問題なくスタンバイに移行しますが、Windows 11 のノートパソコン(3台)は休止状態になり、WIndows 10 のノートパソコンでは問題なくスタンバイになります。

Winodws 11 搭載のノートパソコンにおいてもスタンバイ状態に移行する方法をご存じでしたらご教授ください。

以上 よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/2/14 17:09:45
> デスクトップパソコンでは問題なくスタンバイに移行しますが、
> Windows 11 のノートパソコン(3台)は休止状態になり、
> WIndows 10 のノートパソコンでは問題なくスタンバイになります。

Windows 11 ノートPC のコマンドラインで「powercfg /a」を実行して、
S3 状態が利用可能な環境であるかどうか、確認してみてください。

Application.SetSuspendState メソッドは、そのまま
SetSuspendState API の呼び出しを行うだけのようです。

そして、SetSuspendState API の仕様によると:
https://learn.microsoft.com/ja-jp/windows/win32/api/powrprof/nf-powrprof-setsuspendstate

• 休止状態パラメーターに応じて、システムは S3 状態(スリープ)または S4 状態(休止状態)に入る。
• 呼び出し元のプロセスには、SE_SHUTDOWN_NAME 特権が必要。

※参考:
S0  稼働
S1  省電力状態
S2  省電力状態 … CPUへの給電オフ、チップセットは給電オン
S3  中断/スリープ状態/スタンバイ状態 …メモリには給電されている
S4  休止状態/ハイバネーション … 高速スタートアップを有効にしているときのシャットダウン状態
S5  シャットダウン状態 …完全シャットダウン
投稿者 N88-BASIC  (社会人) 投稿日時 2023/2/15 10:28:57
魔界の仮面弁士 さん、ご連絡ありがとうございます。

ご提案いただいた状況を確認してみました。状況は以下の通りで S3 状態は不可能なようです。

C:\Users\user>powercfg /a
以下のスリープ状態がこのシステムで利用可能です:
    スタンバイ (S0 低電力アイドル) ネットワークに接続されています
    休止状態
    高速スタートアップ

その後、BIOS で [Sleep State] を [Linux S3] を選択すると、以下の状態になり、質問のコマンドでスリープ状態(キーボート操作ですぐに起動)に移行できました。

C:\Users\user>powercfg /a
以下のスリープ状態がこのシステムで利用可能です:
    スタンバイ (S3)
    休止状態
    高速スタートアップ

ただ、Winodows のスタートメニュー内の電源操作では初期状態(?)でもスリープ状態になるのは不思議な気がしますが、自作アプリに組み込んで遠隔操作ができそうです。

自作アプリを運用するパソコンしか試していませんが最大の目的が達せました。

以上 今後ともよろしくお願いします。