TOMOYUKI-K
@TOMOYUKI-K

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

windows11PCで任意時間にスリープ起動/解除する方法

パソコンでとあるプログラムを毎日使っているのですが使っていない時間は節約のため
スリープしたいと考えております。人が手動でやるのではなく自動で行う方法を探しております。

OSはwindows11 homeで2023年1月に購入したDELL XPSのノートパソコンです。

調べたところwindowsの標準機能であるタスクスケジューラが有効と分かりました。
タスクスケジューラにて起動と解除の二つのタスクを作成し、任意時間に発動させる。
以下自分で試したことです。

[スリープ状態にする(起動)]

こちらのメソッドでできることが分かりました。
https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.setsuspendstate?view=windowsdesktop-8.0

当方C++の書き方がわからずpythonは少し知っていたのでCHAT-GPTに聞いてpythonで上記メソッドを起動するようにしました。

sleep_on.py
import ctypes

kernel32 = ctypes.WinDLL('kernel32')
powrprof = ctypes.WinDLL('powrprof.dll')

# 自動起動したいで引数はこのように指定しました。
result = powrprof.SetSuspendState(False, False, False)

このpythonファイルをタスクスケジューラから起動させました。
結果、成功しスリープ状態になりました。

[スリープから復帰(解除)]

こちらのURLを参考に設定しました。
https://sawada-cpta.com/blog/%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%AE%E3%82%B9%E3%83%AA%E3%83%BC%E3%83%97%E3%82%92%E6%AF%8E%E6%97%A5%E5%90%8C%E3%81%98%E6%99%82%E9%96%93%E3%81%AB%E8%A7%A3%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9/

結果、解除されましたが画面スタンバイがオフのままでした。
適当なキーを押下してスタンバイを解除しました。

[お聞きしたいこと]

①起動を外部ファイルではなく、タスクスケジューラの操作のみで完結できないか?
アセット 1-100.jpg

ネット情報から試しに以下のように打ってみましたがスリープ起動するものの解除はされませんでした。
プログラム/スクリプト(P)  C:\WINDOWS\system32\rundll32.exe
引数の追加(オプション)(A) PowrProf.dll,SetSuspendState FALSE,FALSE,FALSE

もし方法が無ければ諦めて外部ファイルを起動しようと思います、、、

②解除時に画面スタンバイも同時に解除できないか?
画面スタンバイ状態だとスリープ解除されているか一見してわからないので同時に解除したいのですが、こちらは調べても全く方法がわかりませんでした。
せめて同時ではなくとも、二つのタスクを登録して時差で発動でも構いません。

ちなみに
縁がありDELLサポート,Lenovoサポート,PCなんでも屋さんの3社に同じことを聞きましたが全てできないor分からないと言われました。重要ありそうな事なのに結構難しいことなんだと実感させられました。

どなたかご回答いただければ幸いです。
何卒宜しくお願い致します。

0

1Answer

やりたいことはおよそ理解出来ますが
「スリープ起動」はスリープできたのか スリープから復帰に成功したのかスリープ解除時間を設定出来たのか
さっぱりわからなくなるのでわかりやすい単語を使うようにしてください

まずスリープ、休止状態、モニタの電源を切る省エネ、スクリーンセーバー
などの機能はWindows95時代から用意されており
各メーカーも指定時間に起動して何かを実行するという機能を持たせていました
ただし残念ながらユーザー側でそれらの機能を使う場合メーカー毎に動作が異なるので
こちらの環境で動作したとしても、ほかの環境では動作しません

「スリープ起動するものの解除はされませんでした」の「解除」が何を指しているのかわかりませんが
スリープは解除出来たが、スクリーンセーバーまたはモニタ電源オフの状態になっていて
マウスやキーボードを触らないと画面が表示されない
ということでしたら その外部ファイル というかコマンドプロンプトにHelloを送るだけですが
それで無理矢理状態を解除してるのかと思われます
それでもモニタ電源オフからの解除、スクリーンセーバーの解除がうまく動かない場合は
自分で解除するプログラムを作る必要があります
解除する方法は用意されていますが、これも最近はうまく動きません
スクリーンセーバーはマウス座標を覚えておいて 少し違う座標に移動させてまた元の座標に戻す
と言う方法で昔は解除出来ましたが今は解除できません
また、マウス座標を勝手に触るのをOSが嫌がるので移動も出来ないかもしれません

モニタの電源のON/OFFはWindowsで専用命令が用意されています
これもWindowsXPでは動いていましたがWindows7からは動きません

そもそもこの仕組みは指定時間にスリープ解除してプログラムを実行して自分でスリープに戻る
という動作に使われることが多いです

1Like

Comments

  1. @TOMOYUKI-K

    Questioner

    アドバイスいただきありがとうございます。
    やはり簡単な事ではないのですね、、、
    各PCによっても検証しなければいけないのであれば
    今回は断念しようと思います。

    参考になりました、ありがとうございます。

Your answer might help someone💌