DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB.NETでのロック機能付きスクリーンセーバー

  • 題名: VB.NETでのロック機能付きスクリーンセーバー
  • 著者: p5
  • 日時: 2011/01/29 19:13:00
  • ID: 28085
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[Windows7、VB.NET、.NET Framework3.5]
分類:[.NET]

はじめまして、p5と申します。

現在ロック機能付きのスクリーンセーバーを作成しています。
環境は以下の通りです。

Windows 7
.NET Framework 3.5(スクリーンセーバー)
VisualSudio2010
VB.NET

スクリーンセーバー自体の作成はできたのですが、Ctrl + Alt + Del を押された際「Windowsのセキュリティ」画面が表示された場合の対応について質問させていただきます。

ロック機能を付けても「Windowsのセキュリティ」画面のタスクマネージャ等でプロセスを止められては意味がないため対応を考えていました。

当初は Ctrl + Alt + Del 自体を抑制しようと考えていたのですが、NT系ではグローバルキーフックができないことや OS の DLL(GINA) を改変する必要があり、このスクリーンセーバーは私個人のみで使うものでないためリスクの高さからやめました。

そのため gpedit.msc を使用してレジストリを操作し、「Windowsのセキュリティ」画面でキャンセルかシャットダウンのみ選択可にすることで対応することとしました。(スクリーンセーバー中にシャットダウンされることは問題ありません)

ビルドした.scrファイルを直接叩いて起動させた際は問題ないのですが、時間経過による OS からの起動時に問題があります。
OSからスクリーンセーバーが起動し、Ctrl + Alt + Del で「Windowsのセキュリティ」画面を起動し、キャンセルボタンで通常画面に戻った際にスクリーンセーバーが終了してしまいます。

通常画面と「Windowsのセキュリティ」画面とスクリーンセーバー画面はそれぞれ別の画面なので、スクリーンセーバーの動作に関わらず OS 側でスクリーンセーバー画面を終了してしまうためこのような挙動になるのだろうという予測はしているのですが、これではそもそものロック機能に意味がなくなってしまいます。

調査しましたが有効な手段が見つからなかったため、別案として、OSから使用される.scrファイルから別プロセスで別の.scrファイルを起動しプロセスを管理する(プログラムとしての起動なら OS によって終了されないため)という方法を考えましたが、あまりスマートではないと考えています。
また、スクリーンセーバーを解除するアカウント、パスワードはWindowsのログインのアカウント、パスワードとは異なるため、Windowsに標準で入っているパスワード付きスクリーンセーバーは使用できません。

何か有効な手段はありましたらご教示いただけますでしょうか。

ご説明不足な点等ありましたら申し訳ありません。
ご指摘いただければ追記いたします。

DOBON.NET | プログラミング道 | プログラミング掲示板