- PR -

スクリーンセーバーの解除

1
投稿者投稿内容
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-04-15 02:42
VisualStudio.NET2005 (VB) の環境で、あるイベントによりスクリーンセーバーを
開始する、または解除するには、どのクラスを使用したらよいでしょうか?
スクリーンセーバーは、各PCで登録されているスクリーンセーバーを採用します。
ただしスクリーンセーバーにパスワード設定されている場合は、解除しようとした
ときにパスワード入力画面を表示します。パスワード設定されているかどうかとい
うこともプログラム側のどのクラスで取得できるのでしょうか?


[ メッセージ編集済み 編集者: ハムスター 編集日時 2007-04-15 02:45 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-15 12:01
引用:

ハムスターさんの書き込み (2007-04-15 02:42) より:

VisualStudio.NET2005 (VB) の環境で、あるイベントによりスクリーンセーバーを開始する、または解除するには、どのクラスを使用したらよいでしょうか?


普通にプロセスとして起動してしまえば良いのではないでしょうか。

コード:

    Using screenSaver As System.Diagnostics.Process = System.Diagnostics.Process.Start("logon.scr")
        screenSaver.WaitForInputIdle(2000)

        ' 5 秒待つ
        System.Threading.Thread.Sleep(5000)

        If screenSaver Is Nothing Then
            Return
        End If

        If screenSaver.HasExited Then
            Return
        End If

        ' 解除
        If Not screenSaver.CloseMainWindow() Then
            screenSaver.Kill()
        End If

        screenSaver.Close()
    End Using


解除なんて考慮する必要はないかも。

引用:

スクリーンセーバーは、各PCで登録されているスクリーンセーバーを採用します。
ただしスクリーンセーバーにパスワード設定されている場合は、解除しようとしたときにパスワード入力画面を表示します。パスワード設定されているかどうかということもプログラム側のどのクラスで取得できるのでしょうか?


とりあえず、.NET Framework にはありません。
Windows API としてもあるのかどうか不明です。

Windows API に SystemParametersInfo 関数というのがありますが、
これだとタイムアウトなどの時間しか取れないと思います。(たぶん)

何が目的で、このような制御をなさるおつもりかわかりませんが、よろしくないソリューションだと思います。
(起動するだけならともかく、解除する意味が良くわからないです)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-04-15 20:41
ちょうどそういったことをしていたところだったので。

スクリーンセーバーを起動したり抑制したりする方法については、以下の
解説が役に立つと思います。
http://support.microsoft.com/kb/403844/ja

ただ、スクリーンセーバーによっては止める方法は役に立ちません。
Windows 標準のスクリーンセーバーも 3D モノはこの方法ではダメみた
いですし。
止めるのはスクリーンセーバーが自主的に止まるのを待つしかないですか
らね。どうしてもやりたければ、プロセス一覧から拡張子が .scr のプロセ
スを KILL するという「荒技」もあります。というかそれしかなさそうです。

パスワードが設定されているかどうかはレジストリを参照するとわかります。
HKCU\Control Panel\Desktop あたりかな。

ただ

引用:

じゃんぬねっとさんの書き込み (2007-04-15 12:01) より:

何が目的で、このような制御をなさるおつもりかわかりませんが、よろしくないソリューションだと思います。
(起動するだけならともかく、解除する意味が良くわからないです)


この辺にはちょっと賛成かも。
(同じことをやろうとしている自分が言うのもアレですけど)
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-04-15 22:54
引用:

スクリーンセーバーを起動したり抑制したりする方法については、以下の
解説が役に立つと思います。
http://support.microsoft.com/kb/403844/ja

ただ、スクリーンセーバーによっては止める方法は役に立ちません。
Windows 標準のスクリーンセーバーも 3D モノはこの方法ではダメみた
いですし。
止めるのはスクリーンセーバーが自主的に止まるのを待つしかないですか
らね。どうしてもやりたければ、プロセス一覧から拡張子が .scr のプロセ
スを KILL するという「荒技」もあります。というかそれしかなさそうです。



提示のサイトの方法ではカーソル位置を制御しているようですので、
この発想であれば、他にマウスのクリックをエミュレートする、
キーダウンをエミュレートするなどの方法を併用すれば、
基本的にはいけませんかね?

それで止まらないスクリーンセーバーもありますのでやはり完全にとは行きませんけど。
例えば、あるスクリーンセーバーはマウス操作+Stop用ボタン押下でストップ
するようなものを見たことがあります。(VAIOのある機種付属のスクリーンセーバーです)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-16 22:02
引用:

じゃんぬねっとさんの書き込み (2007-04-15 12:01) より:
引用:

ハムスターさんの書き込み (2007-04-15 02:42) より:
VisualStudio.NET2005 (VB) の環境で、あるイベントによりスクリーンセーバーを開始する、または解除するには、どのクラスを使用したらよいでしょうか?


何が目的で、このような制御をなさるおつもりかわかりませんが、よろしくないソリューションだと思います。
(起動するだけならともかく、解除する意味が良くわからないです)


 大昔、Solaris でやりました。ので、メインの話には助言できません。
 CRT の焼き付き防止のためにスクリーンセーバーを起動しますが、その端末には「受付カメラ」がついていました。受付に人が来ると(ごめん。インターホンを押すと)、カメラ ウインドウがポップアップ、同時にスクリーンセーバーを解除、と。
 また、スクリーンセーバーは、自動的にも人為的にも起動できるようになっていました。

 他のスレッドで、COM ポートの話をされていることから、COM ポートに接続された機器の状態変化によって、スクリーンセーバーを解除したいのかと。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)