スリープ状態でのプログラム実行

タグの編集
投稿者 たかくん  (社会人) 投稿日時 2011/9/13 09:11:50
こんにちは、スリープの状態でプログラムを動かす事は可能でしょうか?

スリープ状態でシステム時間を見て指定時間になったらパソコンを復帰させたいのです。

VBで可能なら是非教えて下さい。

投稿者 (削除されました)  () 投稿日時 2011/9/13 09:45:33
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/9/13 09:46:28
> スリープ状態でシステム時間を見て指定時間になったらパソコンを復帰させたいのです。

ここでいうスリープとは、下記の (3) のことでしょうか。
 (1) System.Threading.Thread.Sleep メソッド
 (2) Sleep API
 (3) PC の電源状態


(3) だとしたら、「タスク」に起動時間をスケジュール登録しておき、
『タスクの実行時にスリープを解除する』にチェックを付与すれば良いかと思います。
起動時間については、再開までのタイムラグも計算した上で設定してみてください。

なお、電源管理が不十分なハードウェアが混在している場合、
電源復帰が期待動作しないケースもあります。
投稿者 たかくん  (社会人) 投稿日時 2011/9/13 12:21:05
ありがとうございます。

(3)でいいのですがVBのコードで全てをまかなう方法はないでしょうか?

自分のソフトに実装したいのです。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/9/13 13:09:30
> VBのコードで全てをまかなう方法はないでしょうか?
プログラムからの割り当ては、Vista 以降では ITaskService インターフェイスを利用します。
http://msdn.microsoft.com/en-us/library/aa381832%28VS.85%29.aspx

それより前の OS では、ITaskScheduler インターフェイスですね。
http://msdn.microsoft.com/en-us/library/aa381811%28VS.85%29.aspx


> 自分のソフトに実装したいのです。
「ACPI」という電源管理機構は御存知でしょうか。
電源状態に応じて、G0 とか G1 といったステータスがあります。

そして スリープ/スタンバイ/サスペンド などと呼ばれるのは S3、
休止状態/ハイバネーション などと呼ばれるのは S4 の状態です。

それぞれの細かい違いについては、ここでは省略しておきますが、
いわゆるスリープ状態では、そもそも CPU にすら給電されていません。
チップセット(メモリ以外)への電源供給すら止められていますので、
当然ながら、VB 製のアプリの実行も停止状態となっています。

それゆえ、今回のような要件ではハードウェア側の対応も必要となります。
また、アプリはシステム側から呼び出してもらう必要があるわけで、
そのためにタスクを利用できるというわけです。
投稿者 たかくん  (社会人) 投稿日時 2011/9/16 06:34:03
返事が遅くなりました。

VBでは厳しい案件みたいですね。

ありがとうございました。
投稿者 RHNO  (社会人) 投稿日時 2017/4/13 23:31:37
VBプログラムにて TaskSchduler を操作すれば、復帰させて復帰後に Task は可能と思います。
先ず TaskSchduer に Task を作成します。
VBプログラムにて SCHTASKS.EXEのCommand を使用してスリープ前に Task の復帰時刻を書き換えれば希望時間に復帰し、Task を実行するでしょう。 スリープは簡単に VB からできますが、スリープ後 VB は動かないので TaskSchduler に任せるわけです。
当方、VS-VB2015 により Task を登録し、希望時間に Sleep/Wake を行うプログラムを試行錯誤して作成して使用しています。これは Wake だけで、Task はさせていません。