プロが教える店舗&オフィスのセキュリティ対策術

お世話になっています。

Outlook Expressで事前に指定した特定のフォルダに
新着メールが届いたときに、
それを知らせる機能があればいいと思ったんですが
社内規定によりフリーソフトが使用できない為、
WSH(vbs)でスクリプトを組もうとしています。

当初は特定したいフォルダのdbxファイルのサイズを
時間を空けて比較することで 「新着あり」のメッセージ(MsgBox)を
表示させるように組んだんですが、それだと
タイトルのみのちょっとしたメールを感知しませんでした。
(dbxファイルのサイズが変化しない為)

そこで今度はdbxファイルの最終更新日(最終アクセス日時)で
比較するように組んだんですが、そうすると
Outlook Express上でフォルダをクリックするだけ
(正確にはそのフォルダから違うフォルダをクリックした時)でも
最終更新日が更新され、「新着あり」とメッセージが表示されてしまいます。

ネットで検索してもなかなかいい方法が見つからずに困っています。
他に何かいい方法はありますでしょうか?
ご教授いただけましたら幸いです。

A 回答 (2件)

一つのアイデアですが、WSH(VBS)でDBXファイル中のメッセージ数を参照してはどうでしょうか。



ただし問題があって、OEがDBXを開いているとエラーになります。たぶんその逆も。

WindowsXP Pro SP3 で試しました。

-----
' DBXファイル内のメッセージ数を表示するWSH(VBS)
Const POS = 196 'DBXファイル内のメッセージ数の位置
Dim Buffer(4)
FileName = WScript.Arguments(0) 'ドロップしたDBXファイルを処理
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.LoadFromFile FileName
.Position = POS
For ix = 1 To 4
Buffer(ix) = .Read(1)
Next
.Close
End With

C1 = AscB(Buffer(4))
C2 = AscB(Buffer(3))
C3 = AscB(Buffer(2))
C4 = AscB(Buffer(1))

Count = C1*2^24 + C2*2^16 + C3*2^8 + C4

WScript.Echo Count
-----

参考URL:http://oedbx.aroh.de/index.html
    • good
    • 0
この回答へのお礼

丁寧なお返事をありがとうございます。ただやっぱりファイルの中を読み込むのに時間がかかっちゃいますね。その間CPU使用率もあがっちゃうんで少し難しいかな、と。すいません。

お礼日時:2010/12/26 02:29

回答No.1のスクリプトの変更です。

4バイトを1回でReadするようにしました。

なお、DBXファイルのサイズによっては時間がかかりますのでご注意を。

-----
' DBXファイル内のメッセージ数を表示するWSH(VBS)
Const POS = 196 'DBXファイル内のメッセージ数の位置
FileName = WScript.Arguments(0) 'ドロップしたDBXファイルを処理
Set Stm = CreateObject("ADODB.Stream")
Stm.Type = 1
Stm.Open
Stm.LoadFromFile FileName
Stm.Position = POS
Buffer = Stm.Read(4)
Stm.Close
Set Stm = Nothing

C1 = AscB(MidB(Buffer,4,1))
C2 = AscB(MidB(Buffer,3,1))
C3 = AscB(MidB(Buffer,2,1))
C4 = AscB(MidB(Buffer,1,1))

Count = C1*2^24 + C2*2^16 + C3*2^8 + C4

WScript.Echo Count
-----
    • good
    • 0
この回答へのお礼

ありがとうございます。ほんとにSHIMAPEEさんはお詳しいですね。参考にさせていただきます。

お礼日時:2010/12/26 02:34

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