Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@ktyubeshi

エクスプローラにLabVIEWのバージョンを指定してコードを開くメニューを追加する

はじめに

LabVIEWを複数バージョンで共存させて使っていると、バージョン指定して開きたいと思ったことはありませんか?

LabVIEWの関連付けは最後に起動したLabVIEWのバージョンで書き換わるようになっており、うっかり新しいバージョンでVIを開いて上書きしてしまうと、古いバージョンで開けなくなってしまいます。
 古いバージョンで開くとこうなる.PNG

そこでLabVIEWのバージョンを指定してファイルを開けるようにエクスプローラのメニューに各バージョンで開くメニューを追加する方法を紹介します。

概要

レジストリのWindowsの関連付けの情報を格納している部分を書き換えることで、右クリックメニューを書き換えます。
今回はLabVIEWのファイルタイプのうち、主要な3つのファイルタイプ(.vi,.ctl,*.lvproj)に対してエクスプローラの右クリックメニューに「バージョンを指定して開く」というメニューを追加し、さらにサブメニューでバージョンを選択出来るようにします。

image

※記事の末尾にVIスニペットを追加しました。内容を理解した上で自己責任にてご利用下さい。

手順

レジストリエディタを起動します。
image

image

「HKEY_CLASSES_ROOT」の直下に拡張子が羅列されているので、対象の拡張子のキーを開いて、どのファイルタイプを参照しているか確認します。

image

調べた結果は以下の通りです。

拡張子 ファイルタイプ
.vi LabVIEWInstrument
.ctl LabVIEWControl
.lvproj LabVIEWProject

続いて「HKEY_CLASSES_ROOT」の直下にファイルタイプのキーがあるのでそちらを開きます。

LabVIEWInstrumentを例に見てみると、デフォルトでは
HKEY_CLASSES_ROOT\LabVIEWInstrument\shell の中に「Open」というキーがあります。
これが「開く」と対応するキーであることが分かります。

image

image

同じShellの階層に適当な名前でキーを作成します。
「SpecifyVersion」としておきます。
さらに文字列型で値を作成します。内容は下記の通りです。
ExtendedSubCommandsKeyに設定する値はサブメニューの内容の参照先です。(後で定義します。)

名前 種類 データ
ExtendedSubCommandsKey REG_SZ LabVIEWSpecifyVersion
MUIVerb REG_SZ バージョンを指定して開く

image

この時点で右クリックメニューに「バージョンを指定して開く」が追加されました。

image

続いてサブメニューの内容を作成します。
「HKEY_CLASSES_ROOT」の直下に先程「ExtendedSubCommandsKey」でに設定したデータと同じ名前でキーを作成します。
今回は「LabVIEWSpecifyVersion」という名前で作成します。

さらにその下の階層に「shell」というキーを作成し、その下の階層に自分の環境にインストールしているLabVIEWのバージョン名でキーを作成します。
各LabVIEWのバージョンの下には「command」というキーを作成しておきます。

image

HKEY_CLASSES_ROOT\LabVIEWSpecifyVersion\shell\LabVIEW2014 に以下のように値を作成します。

名前 種類 データ 説明
Icon REG_SZ "C:\Program Files (x86)\National Instruments\LabVIEW 2014\LabVIEW.exe",0 アイコンを指定します。アイコンが不要な場合は省略可能です。
MUIVerb REG_SZ LabVIEW 2014 メニューに表示されるラベルを設定します。省略するとキー名が採用されます。

image

最後に実際にメニューを選択された時に実行するコマンドを設定します。

HKEY_CLASSES_ROOT\LabVIEWSpecifyVersion\shell\LabVIEW2014\command に以下のように値を作成します。

名前 種類 データ
(既定) REG_SZ "C:\Program Files (x86)\National Instruments\LabVIEW 2014\LabVIEW.exe" "%1"

image

あとは同じ要領で各バージョンに対して値を設定して下さい。
全てのバージョンの設定が出来るとこのようになります。

image

あとはLabVIEWProjectやLabVIEWControlのキーでも同じようにExtendedSubCommandsKeyを作成してLabVIEWSpecifyVersionを参照するようにするだけで他のファイルタイプにもメニューを追加出来ます。

image

VIスニペット

手動でやるとかなり面倒だったので、LabVIEWから同様のことが出来るようにVIスニペットを作成してみました。
動作は簡単にしか確認していません。コードの内容を理解の上、自己責任でご活用下さい。
※実行時に設定を間違えてもレジストリエディタで手動で直せる人推奨です。

LabVIEW_SpecifyVersion.png

image
選択されたファイルタイプのshellの下にSpecifyVersionのキーを作成します。

image

サブメニューに「表示名」に入力された項目を追加します。
「表示名」はキーの名前にも使用しているので日本語は使わないで下さい。
選択されたLabVIEWの実行ファイルをアイコンとcommandで呼び出すファイルとして設定します。

※適用範囲を「全ユーザ」にする時はLabVIEWを「管理者として実行」で起動しておく必要があります。

参考情報

http://msdn.microsoft.com/en-us/library/hh127467(v=vs.85).aspx
http://nonsubject.arinco.org/2011/08/5.html#more
http://io-repo.blogspot.jp/2011/05/cascading-context-menus-via-static.html
http://support.microsoft.com/kb/256986/ja
http://news.mynavi.jp/column/windows/115/
http://keicode.com/windows/associate-app-with-file.php

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?