![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.10ベストアンサー
- 回答日時:
>一言だけさらなる要望を述べれば、私の探求も含めて「現状ではこのようである」というだけで、
MSの仕様とは直接関係していないところが弱いと思います
マイクロソフトのページでも調べたんですけど、見つからなかったんですよねぇ~。
もしかしたら、非公開かもしれませんね。
>Windws9xや、次期Windwsでコロリと変わってしまうかも
そうそう、書くのをすっかり忘れていましたけど、
調べたのは、Windows2000です。
確か、Windows95やWindows98では、あのApplicationキーは無かった気がします。
レジストリも、9X系とNT系では、少し違っている気がしました。
>そろそろポイント発行の時期かもしれませんが、面白い話が続いたので、
もうしばらくオープンにしておきます。
構いませんよ。
お役に立てなかったので(笑)。
No.9
- 回答日時:
いろいろ試したところ、2つの方法があるようです。
よく見たら、これは既に#1の補足に書いてありましたね(^^;
(まずい、無駄骨をおらせてしまったかも。。)
一応、試した結果は、
〇拡張子未登録のファイルに対し、
「アプリケーションから開く」-「これらのファイルを開いたときは、いつもこのアプリケーションを~」
をチェックすると、Applicationというキーが作られる。
〇既にファイルタイプが登録されているものに対し、
「アプリケーションから開く」-「これらのファイルを開いたときは、いつもこのアプリケーションを~」
をチェックすると、Applicationというキーは作られない。
〇Applicationキーと、ファイルタイプの両方がレジストリに登録されている場合は、
Applicationキーから優先的に参照される。
〇Applicationキーにあるプログラム・ファイル名のパス名は、
\HKEY_CLASSES_ROOT\Application\(アプリ名)\shell\open\command
にある。
〇\HKEY_LOCAL_MACHINEと\HKEY_CLASSES_ROOTは、これはどっちでもいいみたい。
*レジストリエディタで、一方を変えてみたところ、すぐにもう一方にも反映されていました。
結局、あまりお役に立てず、時間を無駄に使ってしまったようです。
すみません(^^;
色々お調べ頂き有り難うございます。特に今回「レジュメ」が出たのが貴重です。今後も時々参照するかと思います。
一言だけさらなる要望を述べれば、私の探求も含めて「現状ではこのようである」というだけで、MSの仕様とは直接関係していないところが弱いと思います。Windws9xや、次期Windwsでコロリと変わってしまうかも。
ただ拙アプリケーションでは、この部分はあくまでも「お手伝い、サービス」で、アプリケーションを最終選択するのはユーザーの責任ということなので、それほど深刻な問題ではありません。
そろそろポイント発行の時期かもしれませんが、面白い話が続いたので、もうしばらくオープンにしておきます。
No.8
- 回答日時:
こんにちは。
だいたい理解したつもりなので、今回は考えを述べさせてもらうことにします。
処理の概略は、
1.アプリに登録されたファイルがクリック(?)される。
2.そのファイルの拡張子を取得。
3.アプリ内DBの中から、その拡張子の情報を取得。
4.その情報の起動区分が、
・Windowsデフォルトの場合
->Windowsレジストリから起動対象アプリ名を取得。
・Windowsデフォルトではない場合
->自作アプリ内DBから起動対象アプリ名を取得。
5.アプリを起動。
となるでしょう。
さて、問題になっているのは、4の
「->Windowsレジストリから起動対象アプリ名を取得。」
の箇所だと思います。
どうやって取得するかというと、やはり私が最初に書いた通り、
<指定された拡張子に関連付けされたアプリ名を取得>
1.レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.拡張子
からファイルタイプを取得。
2.HKEY_LOCAL_MACHINE\SOFTWARE\Classes\(ファイルタイプ)\shell\open\command
を取得。
となるでしょう。
エクスプローラーでファイルを右クリックして表示されるメニューの、
「開く」に関連付けされているのは、ここのはずです。
試しに、レジストリを書き換えて、実験してみてください。
プログラム名を適当に変えて、クリックをすると直ぐに反映されているはずです。
ところで、ファイルタイプやプログラム名を取得するには、
キーに対しての「名前」が(標準)である値を取得しなければならないわけですが、
この「(標準)」というのをプログラムでどのように指定するのかは、
残念ながらお答えできません。
(現在Cの環境がないもので。。。)
これでどうでしょうか?
疑問点はどうぞ。
この回答への補足
長らくお付き合い頂き感謝しております。しかし、何か話が噛み合わず、具体的に追いかけてみました。まず 「.doc」
マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.doc
(標準)Word.Document.8
でした。そこで
\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\shell\Open\command
に
"C:\Program Files\Microsoft Office\Office\WINWORD.EXE" /n
で問題ありません。
しかし「.jpg」を追いかけるとファイルタイプが「jpegfile」となり
\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jpegfile\shell\Open\command
の値は
"C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "%1"
となり、私がエクスプローラーで結び付けているものとは異なりディフォルトのものです。
では求めるものがレジストリのどこに書かれているか?
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.JPG
の「Application」に、「iGximg.exe」が書かれていて、これが求めるものです。
しかし、これは探し回って見付かっただけで、此処を見れば良いとの裏付けがある話ではなく、そこら辺が問題ですが。
あとngsvxさんのご提示は
\HKEY_LOCAL_MACHINE
でしたが、私は通常
\HKEY_CLASSES_ROOT
から探しています。どちらが良いのだろう?
No.7
- 回答日時:
>しかし僅かながら気になる箇所をもう一度執拗に書きますと(^^;
これは非常に大事なことですね。
>「(拙作データベースの)利用者(不特定多数)が自分の利用するファイルを登録する」です。
あれっ? 誤解があるかも。。。
もしかしたら、関連付けはファイル毎に行うのですか?
例えば、a.csvはNotepad.exeだけど、b.csvはエクセルが起動するとか。
>「ファイルタイプとの関連付」はそのままにしておきたいということです
本物のレジストリは書き換えないということですね。
これは理解しています。
*関連付けの件が明確になったら、私の考えを伝えようと思います。
この回答への補足
>もしかしたら、関連付けはファイル毎に行うのですか?
>例えば、a.csvはNotepad.exeだけど、b.csvはエクセルが起動するとか
イエイエ違います(^^;説明が拙くて申し訳ありません。今のところあくまでも一拡張子、一アプリケーションです。
ということでご意見、楽しみにしております。
No.6
- 回答日時:
書き忘れました。
すみません、#5と合わせて見てください。
環境設定では、
拡張子毎に対して、
・Windowデフォルトを使用
・独自に設定
として、独自に設定の場合はアプリケーションを指定。
と、こんな感じでしょうか?
この回答への補足
旅に出ておりました関係で、補足が遅くなり失礼しました。
#5,#6併せてほぼご理解の通りだと思います。しかし僅かながら気になる箇所をもう一度執拗に書きますと(^^;
>自作アプリ内にレジストリのようなものを持っておくということですね
ウーン、レジストリを持つというよりも、何しろ作っているのがデータベースですから
>1.自作ソフトに、test1.csvというファイルを登録する
私の思うように正確に言い換えると
「(拙作データベースの)利用者(不特定多数)が自分の利用するファイルを登録する」です。
2.以下#6も正しいご理解と思います。さらに一言追加するならば、「ファイルタイプとの関連付」は(既にご理解頂いていると思いますが)そのままにしておきたいということです。ご提示頂いた例でいえば、拙作データベースから .csv は Notepad が、エクスプローラーからは相変わらずエクセルが起動されるといった想定です。
No.5
- 回答日時:
理解のゴールが見えてきました(^^;
自作アプリ内にレジストリのようなものを持っておくということですね、きっと。
例えば、
1.自作ソフトに、test1.csvというファイルを登録する。
2.test1.csvを選択すると、エクセルが起動。
(現在.csvはエクセルが起動する設定)
2.環境設定で.csvの起動をエクセルからNotepadに変更する。
3.既に登録してあるtest2.csvを選択すると、Notepadが起動。
こんな動作でしょうか?
No.4
- 回答日時:
#2です。
うーん、こんな感じかな?
1.自作ランチャーには、プログラムではなくファイルを登録しておく。
2.登録されたファイルの1つをクリックすると、全てのプログラムの一覧が
表示され、ユーザーはその中から起動したいプログラムを選ぶ。
ただし、既にファイルタイプでアプリケーションと関連付がされている場合、
それをデフォルトとする。
この回答への補足
概ね(^^;
作ろうとしているのはランチャーというよりファイル管理アプリケーションです。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1009098
こちらに構想を記述しています。
作り始めると、すぐに判ったことは「ファイルを管理」するというより、各種データ(ファイル)を使用して「仕事をする」ということです。従って、必要なファイルが見付かれば、すぐにそれを処理するアプリケーションを経由して開きたい。
>2.登録されたファイルの1つをクリックすると、全てのプログラムの一覧が
>表示され、ユーザーはその中から起動したいプログラムを選ぶ。
>ただし、既にファイルタイプでアプリケーションと関連付がされている場合、それをデフォルトとする
この部分はちょっと違います。拡張子に結びつけられたアプリケーションは一つで、それが直ちに起動します。これは変更可能で、「環境設定」的なところでユーザーが行います。ですから「ファイルタイプ」辺りを調べなくても、一からユーザーが探せば済むのですが、それも余りに不親切と思い、サービスとしてディフォルトを提示しているわけです。何しろ90%以上はディフォルトで済むでしょうから。
No.3
- 回答日時:
#2です。
???
すみません、さっぱり意味がわかりません。
最初の質問の、
>ユーザーが独自におこなった関連付「フォルダオプションには示されている」をプログラム的に探す方法を
これは、
「Windowエクスプローラーの「ツール」-「フォルダーオプション」の「ファイルタイプ」
で表示される内容が知りたい」
という意味ではないのですか?
前回の回答は、そのためのものです。
(やりたいことがよく分からなかったので、あのような書き方になりました)
で、今回いただいた補足の、
>通常はファイルタイプで関連付られているもので良いのですが、
例えば .htm で関連付の方は Internet Explorer のままで、
かつこのデータベースからは「Front Page で編集したい」
といった要望に応えようとしています。
の部分が理解できません。
Windowエクスプローラーでクリックすると、Internet Explorerが起動するのはそのままで、
自作ランチャー(?)でクリックすると、Front Pageが起動するということ?
とすると、Front Pageとそのファイルの関係はどこで定義されてますか?
その関連付けをレジストリから探すのでしょうか?
それなら、前回の回答の箇所を見たらわかるはずだし・・・。
この回答への補足
誤解が深まっているようです(^^;
>Windowエクスプローラーでクリックすると、Internet Explorerが起動するのはそのままで、
>自作ランチャー(?)でクリックすると、Front Pageが起動するということ
この点にほぼ間違いはありません。しかし.htm とFront Pageはあくまでも一例として挙げただけで、ユーザーがどの拡張子とどのアプリケーションを結び着けるかはプログラム側は感知しません。またそのアプリケーションがレジストリに何か情報を書き込んでいる保証もありません。
その点ではほとんど100%ユーザー任せですが、既にファイルタイプでアプリケーションと関連付がされていて、かつユーザーに不満がない場合はそれをそのまま利用しようという構想です。
ウーンまだお判り頂けないかな?
No.2
- 回答日時:
私が登録をするときは、いつも次の手順で行ってますけど。
。。例えば、拡張子.xmlの編集を\Editor.exeにする場合、
1.HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.拡張子を登録。
2.名前が(標準)にデータを「xmlfile」にする。
3.HKEY_LOCAL_MACHINE\SOFTWARE\xmlfileを追加。
名前(標準)のデータを「XMLファイル」にする。
4.HKEY_LOCAL_MACHINE\SOFTWARE\xmlfile\shell\edit\commandを追加
名前(標準)のデータを\Editor.exeにする。
5.HKEY_LOCAL_MACHINE\SOFTWARE\xmlfile\shell\editの、
名前(標準)の値を、「編集(&E)」にする。
参考になりますか?
この回答への補足
参考になりますが意味合いがちょっと異なります。
ファイル管理データベースを作成中です。で、ユーザーは自分が管理したいファイルを登録し、必要に応じてアプリケーションから開きます。通常はファイルタイプで関連付られているもので良いのですが、例えば .htm で関連付の方は Internet Explorer のままで、かつこのデータベースからは「Front Page で編集したい」といった要望に応えようとしています。
つまりレジストリは読むだけで、ユーザーに「現在はこのアプリケーションが呼ばれます」と提示しておいて、後はユーザーが必要に応じて自分の好きなアプリケーションを指定します(データベースには登録するがレジストリは書き換えません)。
やろうとしていることがお判り頂けたでしょうか?
No.1
- 回答日時:
レジストリはどの場所を見たのでしょうか?
フォルダオプションの表示もレジストリの値を見ています。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.拡張子\OpenWithList
↑
これを展開すると、名前がa~でアプリ名のデータが並んでいると思います。
MRUListの中に順番が書かれていて、どのアプリでテキストを開くかを判断していると思われ。
MRUListは通常はひとつだけ入っているはずです。
テキストファイルとか特定のものだけは .TXT と .txt_ 2種類あるみたいですが、この場合は、.txt_ を見るようです。
※過去質問がこれと同じで、それで解決できなかった故の再質問だったら御容赦あれ。
この回答への補足
>レジストリはどの場所を見たのでしょうか?
ギョ(^^; HKEY_CLASSES_ROOT を見ていました。過去の回答情報は(私の探した範囲では)それだったので。
>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.拡張子\OpenWithList
早速見ました。 .bmp で見ると a~j のアプリケーション名があり、.bmp を使用したアプリケーションのようです。MRUListは cebihadjf で左ほど最近利用したアプリケーションを意味するようです。
で、一段上の\FileExts\.bmp のところに Application なる値があり、ここに決め打ちのアプリケーション名が書いてあるようです。点数を出したいところですが、締め切られてしまうので、もう少し詳細を調べて報告と共に。有り難うございました。
御礼というよりも補足です(^^;
HKEY_CURRENT_USER
の方にはフォルダオプションでユーザーがディフォルト以外のアプリケーションを指定した時のみ
Application
に値が入るようです。それ以外の場合(ディフォルト)は
HKEY_CLASSES_ROOT
の方を追いかけて
(標準)(regedt32だと名前なし)の値に加えて
\shell\Open\command
まで見に行かないと駄目みたいです。
MSDN あたりでちゃんと調べたわけではないので、もう少し情報が欲しい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- その他(OS) DOSコマンド『dir』の『/o』オプション 3 2023/03/10 09:29
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- フリーソフト ffmpegのパラメーター『-i』について 1 2023/03/09 07:19
- Windows 10 フォルダの新規作成を必ず「ドキュメント」にする方法 1 2023/06/24 09:08
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/03 16:07
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/10/26 17:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Windows 10 Windows10で、フォルダにあるすべてのファイルを、下層フォルダも含め一つの階層へ配置し直したい 3 2022/05/31 09:50
- Windows 10 ファイルのサムネイルが表示されない 1 2022/08/01 05:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
エラー この変数は宣言されて...
-
jspのエラーが修正できません。
-
AccessのMDBファイルを自動で最...
-
別のAccessファイルのフォーム...
-
VBA Application visibleの...
-
起動中の全てのアプリ名の取得...
-
量子化学計算ソフト GAMESS の...
-
*.asp の拡張子名がついたht...
-
Eclipseで、プロジェクト名のと...
-
eclipseでスタックサイズを変更...
-
JSPのクラスをコンパイルできな...
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
classファイルについて
-
Eclipse・プロジェクトで、フォ...
-
Eclipse(JAVA)のデバッグで他...
-
eclipseのショトカットキー
-
タグが閉じてないというエラー...
-
コンパイル時にエラーが出てし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
jspのエラーが修正できません。
-
VBA Application visibleの...
-
Access VBAよりシート名を取得...
-
別のAccessファイルのフォーム...
-
量子化学計算ソフト GAMESS の...
-
*.asp の拡張子名がついたht...
-
VBAで作成したマクロをデスクト...
-
system.mdwを見つけることが出...
-
HTMLファイルからexeファイルを...
-
RPA(PowerAutomate)の実装について
-
LabVIEWでEXCELファイルを操作...
-
エラー この変数は宣言されて...
-
このファイルを開く方法で困っ...
-
Session_OnStartを見てくれなか...
-
VBでエクセルをOPEN
-
VS内で問題ないexeファイルが、...
-
EXE間で同期をとりながらデータ...
-
AccessのMDBファイルを自動で最...
-
GUIアプリをコマンドラインで使...
おすすめ情報