Microsoft Officeファイルの「読み取り専用で開く」をショートカット化

開発ドキュメントにMicrosoft Officeを使用しているケースは多いと思います。
そのドキュメントを参照する場合、不意の上書き防止やドキュメント作成者の邪魔をしない(普通に開くとドキュメントがロックされてしまう)ためにも「読み取り専用」で開くことが多いんですが、コレが「ファイル」→「開く」を毎回行う必要があって非常に面倒。

そこで、エクスプローラーで右クリックに表示されるショートカットメニューに「読み取り専用で開く」を作ってしまえ!って事にしました。
エクスプローラーからダイレクトで「読み取り専用」で開くことが出来るようになり大変重宝しています。

初めに

ショートカットメニューは、各ドキュメントの拡張子に対してアクションを割り当てることで設定できます。

(説明不要だと思いますが)設定はエクスプローラの「ツール」→「フォルダ オプション」→「ファイル タイプ」で行います。

 

Excel編(拡張子:XLS)

起動スイッチの「/r」を利用すれば簡単に実現できるのですが、それでは芸が無い&別のExcelが毎回起動されるため、たくさんのブックを開くとタスクバーが「Microsoft Excel - 〜」で溢れかえってしまい、どれがどのブックなのか把握できなくなり非常に作業効率が悪くなります。
(私の場合、開発ドキュメントにExcelファイルを多用している事が多いので複数のExcelファイルを開くシチュエーションが多いのです)

そこでDDEを利用することにしました。
具体的には以下のように設定します。

Excelに対して起動スイッチの「/e」を設定しているのは空のブックを開かないようにするためです。

そして、ココで問題になるのが、ファイルタイプの編集で[OK]ボタンをクリックすると、ご丁寧にWindowsが「アクションを実行するアプリケーション」の末尾にパラメータ"%1"を追加してしまいます。(再度、編集すると確認できます)
この状態ではExcelはブックを1度開いてから再度読み取り専用で開きますので、コレでは誰かがロックしていた場合に確認ダイアログが表示されてしまい良ろしくありません。( ̄з ̄)

そこで、レジストリエディタで「アクションを実行するアプリケーション」の値を上記のようにパラメータ"%1"を削除して書き換えます。
(Excel2000の場合、キーは「HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)\command」となります)

 

Word編(拡張子:DOC)

Excel同様に設定で行うと思いましたがエラーとなって上手くいきません。DDEのコマンドリファレンスもないので諦めました。(^^;A
しかも、Excelとは異なりWordには起動スイッチで読み取り専用にする機能がありません。

そこで、WSH(Windows Script Host。最近のWindowsなら実装済み)のVBScriptを使用してOLE操作で読み取り専用で開くことにしました。
以下がVBScriptのソースです。

Dim strDOCFileName
Dim objDOCApp

'引数のチェック
If WScript.Arguments.Count <> 1 Then WScript.Quit

'ファイル名取得
strDOCFileName = WScript.Arguments(0)

'起動
Set objDOCApp = WScript.CreateObject("Word.Application")
objDOCApp.Visible = True

'読み取り専用で開く
Call objDOCApp.Documents.Open(strDOCFileName,,True)

'終了処理
Set objDOCApp = Nothing
WScript.Quit

コレを適当な名前で拡張子VBSのテキストファイルとして保存します。

そしてアクションを追加するわけですが、実行形式でないVBSファイルを「アクションに実行するアプリケーション」に登録することは出来ません。
そこで実際にスクリプトを実行してる「wscript.exe」を指定して引数にVBSファイルを指定します。
(WSHを実装している場合、「wscript.exe」はWindowsのSystemフォルダにあるはずです)

(例:VBSファイルを「D:\Tool\VBS\DOC_ReadOnly.vbs」とした場合)

(上記例の「アクションに実行するアプリケーション」の内容)

wscript.exe "D:\Tool\VBS\DOC_ReadOnly.vbs" "%1"

第1引数はVBSファイル、第2引数にパラメータ"%1"を設定します。
(第2引数のパラメータ"%1"が、VBSファイルへ第1引数として渡されます)

 

PowerPoint編(拡張子:PPT)

Wordと同様です。
WSHを使用してOLE操作で読み取り専用で開いています。
以下がVBScriptのソースです。

Dim strPPTFileName
Dim objPPTApp

'引数のチェック
If WScript.Arguments.Count <> 1 Then WScript.Quit

'ファイル名取得
strPPTFileName = WScript.Arguments(0)

'起動
Set objPPTApp = WScript.CreateObject("Powerpoint.Application")
objPPTApp.Visible = True

'読み取り専用で開く
Call objPPTApp.Presentations.Open(strPPTFileName,True)

'終了処理
Set objPPTApp = Nothing
WScript.Quit

設定方法もWordと同様に

(例:VBSファイルを「D:\Tool\VBS\PPT_ReadOnly.vbs」とした場合)

(上記例の「アクションに実行するアプリケーション」の内容)

wscript.exe "D:\Tool\VBS\PPT_ReadOnly.vbs" "%1"

となります。


[ Window Close ]