プロが教えるわが家の防犯対策術!

スクリーンセーバーの待ち時間が5分に設定されている環境です。
5分毎に何かを行い、スクリーンセーバーが働かないようにしたいと思っています。
これをエクセルVBAで行うことはできないでしょうか。
何か操作に余り影響の少ない何か、スクリーンセーバーには何か操作をやっていると思わせる。
どのようなVBAを組んだらよろしいでしょうか。
よろしくお願い申し上げます。

A 回答 (4件)

> エクセルVBAで行うことはできないでしょうか。


スクリーンセイバーはキーボード・マウスの入力を検知しているので、
VBAでいくらセル選択を動作させても、難しいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
VBAでは無理なのでしょうか。
キーボード・マウスをエミューレーションすることは
やはり不可能なんですね。

お礼日時:2007/08/04 07:02

こんにちは。



こういう書き方は失礼にも聞こえるかもしれませんが、believe_me さんのご質問は、いつも難しいものが多いです。ある意味、自分で検索して作成可能なものは、ご自身で探して作られたほうがよいのではないか、と思うのです。

「スクリーンセーバーの『5分』設定ありき」という状態から、スクリーンセーバー制御というのは、「C」なら当たり前でも、VBA/VBでは、実験的な分野だと思います。私自身、そういうコードは書けると思いますが、それを得々として回答できるほど、私には自信がありません。VBA/VBで、可能だとはいっても、その分野になると、他の技術を借りなくてはどうしようもないと思うのです。

ヒントを出しておきます。

API関数で、スクリーンセーバーを制御する方法を考えればよいと思います。
「EnumDesktopWindows」とかで、検索したら旧VB系のコードが出てくると思いますので、それをVBAに切り替えれば良いと思います。

ぜひ、がんばってみてください。
    • good
    • 0
この回答へのお礼

いつも回答ありがとうございます。
「スクリーンセーバーの『5分』設定」はありきです。
「C」や「VB」は使えない環境です。
プログラム言語らしきものはOfficeソフトの「VBA」だけが使えます。
簡単にはできそうもないことは予想していました。
少し安直に考えていたかも知れません。
「EnumDesktopWindows」は初めて聞きました。
調べてみます。

お礼日時:2007/08/04 17:57

根本的にはスクリーンセーバーを切ってしまえば良いのでしょうが、


それができない環境ということでしょうか?

操作に影響のなさそうなキー(例えば F16 とか)を SendKeys
してみたら?
アプリケーションレベルでは、実際にキーを押されたものと
SendKeys で送られてきたものとで区別はないですよ。

 # Userform などでも KeyDown イベントはちゃんと発生します

また、その時に次回予約を OnTime で入れておけば良いのですが、
キャンセルさせるための仕組みも必要でしょう。

これで上手くいけるかどうかは検証してませんが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
「スクリーンセーバーの『5分』設定」はありきです。
当社の管理部門からスクリーンセーバーにはパスワード及び待ち時間5分を設定せよとの通達が出ております。
月に数回管理部門担当者による各PCの設定確認が抜き打ちで行われます。
パスワードは10文字以上、英字大文字・小文字・特殊文字を全て使用、1ヶ月毎に変更、過去5回は異なるパスワードを設定、机などに一切付箋などは禁止になっています。
PCを多用する仕事ですが、書類などを調べると直ぐ5分経ってしまい、また長いパスワードを入れなければならずとても効率が悪いです。
いささかグレーゾーン的な対応ですが、スクリーンセーバーの設定を変更せずにセーバーが働かないようにしたいと考えております。
尚、ホストコンピュータのエミュレーションも5分で自動的に落ちますが、5分毎にEnterキーを送るマクロを作った人間がおり、そのマクロを使用しております。
このマクロは公認されているか不明ですが、弊社のイントラネットに掲載されており、ほとんどの社員が使用しております。

お礼日時:2007/08/04 18:15

安直な提案ですがスクリーンセーバの無効・有効を切り替え・・ではダメ?



Private Sub Workbook_Open()
'http://www.microsoft.com/japan/technet/scriptcen …
'↑ネタ元です
Const HKEY_CURRENT_USER As Long = &H80000001
Dim strComputer As String
Dim objReg As Object
Dim strKeyPath As String, ValueName As String
Dim strValueOld As String, strValueNew As String

strComputer = "."

Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "Control Panel\Desktop"
ValueName = "ScreenSaveActive"
strValueNew = "0"'無効にする。有効は1

objReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValueOld
Debug.Print strValueOld

objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValueNew
Debug.Print strValueNew
End Sub

でBookのBeforeCloseイベントで有効にするとか・・・
OS の環境とユーザーの権限によっては出来ない場合も有るかと思います。
当方 WinXP、Admin権限でテスト。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
結局のところ、スクリーンセーバーの設定を15分にすることで解決しました。
PCの設定確認は事前に連絡があることが分かり、当日5分に戻せば良いと(勝手に)判断しました。

お礼日時:2007/09/08 20:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!