04-03-2007 04:26 AM
04-03-2007 07:10 PM
以前書いた別のものを流用して添付のようなものをこしらえて見ました(LabVIEW6.0.2)。ただ、Windowsのdllの関数呼び出しを使うともっとスマートに書けそうな気がしているのですが。
まずファイル名の拡張子を抽出し、そこからレジストリで「ファイルタイプ」を取得し、さらにファイルタイプから関連付けアプリケーションの呼び出しスタイルを得ています。ほとんどのファイルで「開く(open)」に関連付けられているアプリを得ますが、「編集(edit)」が定義されている場合はそちらを優先させました(というのは、.bmpのように、開くとビューワが立ち上がるだけで編集できないものがあるため。.bmpではeditにペイントが定義されているので、そちらが開くようにした)。レジストリ操作がありますが、基本的にはreadで使用しているので、レジストリが壊れることはないと思いますが。
一部、rundll32.exeを呼び出すタイプのものは、ファイル名を短い形式に直す必要があるようなので、その操作を挿入しています(ここでWindows関数を呼び出しているので、そんなら別の関数でスッとファイルが開けるんじゃないの?という気もする・・・)。
これで、大方のファイルについては所望の動作になりそうですが、いかがでしょうか。出来合いなのでオールマイティではないかも知れませんし、Windows XP以外で走るか良く分かりません。ちょっと試してみてください。
なお、添付は、実行してから、パスに開きたいファイル(~.doc、~.xls、.ppt、.bmp、.txt、.viなど)を設定してから「開く」ボタンを押すと、そのファイルが開くと思います。
04-03-2007 07:38 PM
白石様へ
早速のご回答ありがとうございます。
まさに希望していた動作が行えるものでした(私の環境もWindowsXPです)。
添付のプログラムのようにレジストリにアクセスを行えば
関連づけしたアプリケーションが取得できるとわかり、とても勉強になりました。
Windows2000の環境が準備でき次第、こちらの方も確認してみたいと思います。
ありがとうございました。
04-03-2007 08:12 PM
試行どうもありがとうございます。
Windows2000だと、もしかしたら一部のアプリで開かないケースがあるかも知れません(例えばメモ帳Notepad.exeで、関連付けの定義の中でNotepad.exeのありかに %SystemRoot% という表現があり、レジストリから別途これを得て展開しようとしています。XPではこれを"Windows NT"という文字列を含むレジストリのツリーから探していますが、Win2000だとここが違う可能性が大で、その結果 %SystemRoot% が解決できずに.txtが開けないかも知れません。(OSによらず %SystemRoot% を一般的に展開する方法を探すか、あるいはWin2000の場合にこれがどこで定義しているかをレジストリエディタで探して書き換えるか、といったところでしょうか・・・。その辺のツメが甘くて恐縮ですが、いろいろやれば何とかなりそうな気も?)
04-04-2007 06:32 PM
04-04-2007 08:12 PM
04-08-2007 07:30 PM
その後、「ファイルを、関連付けられたアプリで開く」そのものずばりのWindowsの関数と、その呼び出し方が見つかりましたので、そちらで書いてみました。。。 そういう関数が必ずどこかにあるはず、と思っていましたが、ようやくそこに行き当りました。当然のことながら一番スッキリと表現した書き方なのだろうと思われます・・
shell32.dllのShellExecuteA()関数を、"open"オペレーションで開いています。デフォルトディレクトリは、ファイルの存在するフォルダを与えていますが、この辺は何でも良いかと思います。途中にある空の文字列は、開くファイルが.exeなどの実行形式の時に与えるパラメータ文字列のようです。
なお、常に"open"で指定された開き方になるので、例えば.bmpは、通常ダブルクリックで開くのと同じく、まず簡易ビューワで立ち上がります(前回まで添付していたものは、"edit"が定義されているときはそちらを優先することで編集に対応しやすくする、という書き方でしたが)。その辺さえ気にしなければ、今回の例で普段ダブルクリックで開くのと同じ立ち上がり方になります。
改めてご参考いただければ・・・
04-08-2007 11:40 PM