ファイルを開くプログラムの選択でのレジストリの適用に関する問題

このQ&Aのポイント
  • ファイルを開くプログラムの選択でのレジストリの適用に関して問題が発生しています。
  • 自作ファイルフォーマットを関連付けるために、WindowsAPIを使用してレジストリの設定を行いましたが、予期せぬ問題が発生しています。
  • 特に、「ファイルを開くプログラムの選択」ダイアログによって関連付けが優先され、独自ファイルを開くとメモ帳が開いてしまいます。再起動しても変化がなく、原因を特定できません。
回答を見る
  • ベストアンサー

ファイルを開くプログラムの選択でのレジストリの…

対象としたいのはXP以降です。(そもそも仕様が違ってて、この括り自体がなりたたなかったら済みません。その場合はとりあえずXP限定です。) 自作ファイルフォーマットを作ったので 自分のアプリに関連付けたい、ということで WindowsAPIを使い レジストリの HKEY_CLASSES_ROOTの下に 「.拡張子名」のキーを設置、その(既定)のデータにREG_SGで「飛ばす先のキー名」を指定し 「飛ばす先のキー」の下に DefaultIcon とshell\\open\\command の指定を作り SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, 0, 0 ); としました。 しかし、これによって アイコンが変わったのは確認できましたが 以前に 「ファイルを開くプログラムの選択」ダイアログ で、メモ帳に関連付けていたせいか そっちが優先されて、独自ファイルダブルクリックでやはり現状メモ帳が開いてしまいます。 再起動しても変化はありませんでした。 そこで、逆に .txt形式のテキストファイルは、普通にメモ帳で開くようにしてあったのですが 「ファイルを開くプログラムの選択」 にて 自分のアプリを指定したところ やはり、変化し 結果両者は逆転しました。 このとき、HKEY_CLASSES_ROOT の下の 「.txt」および「txtfile」キーがらみの部分は変化しているように思われませんでした。 ここから この箇所よりも優先されている部分がレジストリにあるのでは? と考えたのですが この考えは正しいのでしょうか? 正しい場合は、「ファイルを開くプログラムの選択」ダイアログ によって、どの部分が変化するのでしょうか? 正しくない場合は、どういった原因がありえるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.1

>この箇所よりも優先されている部分がレジストリにあるのでは? >と考えたのですがこの考えは正しいのでしょうか? 正しいと思いますよ。 詳しくは知りませんがユーザー別のノードに有るんじゃないでしょうか?

LongSecret
質問者

お礼

ありがとうございます♪ >ユーザー別のノードに そういう感じのことでしたかw どうも見つかったっぽいです HKEY_CURRENT_USER の Software\\Microsoft\\CurrentVersion\\Explorer\\FileExts\\.拡張子名 のサブキーの"Application"っていうの が 「ファイルを開くプログラムの選択」ダイアログにおいて 上述のように自分で設定しておいたデフォルト設定(?)じゃないのに設定された場合には出現し デフォルト設定と一致した場合は抹消される という動作をすることを確認しました。 ただ、HKEY_CURRENT_USERとなると 面倒な手順を踏まなければならないと思うので まだコード側からはチェックできていませんが 少なくとも「ファイルを開くプログラムの選択」ダイアログからの間接消去、および regedit を使用して手動消去、をした場合 つまり"Application"サブキーが消えたときに デフォルト設定サイドが反映された結果になる、という事は確認できました。 …ただ、なにぶん今日調べたばかりですし、レジストリ関係に関しては まだ抜けてるところや誤解があるとまずいかもしれないので おそらくこの質問その物については解決とは思いますが、もうしばらく締め切りは待たせてください。

関連するQ&A

  • ファイル関連付けと表示アイコンを別々に設定したい3

    (訂正版) .iniファイルの関連付けと表示アイコンを別々に設定するには? .iniファイルをメモ帳に関連付けた状態ではアイコンは下記レジストリキーで設定出来ます。 HKEY_CLASSES_ROOT\inifile\DefaultIcon しかし規定のプログラムを秀丸エディタ(或いはほかのプログラム、たとえばワードパッド)にすると上記設定は無視され、次のキーが示すアイコンになってしまいます。 HKEY_CLASSES_ROOT\SystemFileAssociations\text\DefaultIcon ここは.ini以外の他の拡張子にも影響するので書き換えは避けたいです。 規定のプログラムを変更して、なおかつアイコンは.iniファイル独自のものを設定する方法があれば教えて下さい。 (補足) 下記QAを読みましたが、 http://okwave.jp/qa/q6689616.html 最終的に HKEY_CLASSES_ROOT\SystemFileAssociations\text\DefaultIcon を書き換えるのでそれは除外します。

  • CSSファイルをダウンロードできるように

    仕事上必要な機能なのですが、なかなかよい方法が見つからず、困っているのですが・・・ IEのURL欄にCSSファイルのURLを入力したとき、 圧縮ファイルなどのURLを入力したときと同様に、ダウンロードダイアログが出るようにする方法、ないでしょうか? 最初の状態では、FrontPageが立ち上がってしまって・・・ レジストリエディタで「HKEY_CLASSES_ROOT\CSSfile\shell」の中身をすべて消したところ、こんどはメモ帳が立ち上がってしまい、 さらに「HKEY_CLASSES_ROOT\.css\PerceivedType」を消したところ、 「このファイルを開けません・・中略・・一覧からプログラムを選択する」 というダイアログが出るようになったのですが、ダウンロードするという選択肢が出てきません。。

  • 以下の意味がわかりません。レジストリー

    以下のこんな感じでレジストリファイルを作れと指示があるのですが、なんのことやらさっぱりわかりません。 何を起動してどうするか教えてもらえませんか? REGEDIT4 [HKEY_CLASSES_ROOT\htm.dummy] [HKEY_CLASSES_ROOT\.htm] @="htm.dummy" [HKEY_CLASSES_ROOT\http\shell] @="Sleipnir" [HKEY_CLASSES_ROOT\http\shell\Sleipnir] @="Sleipnir" [HKEY_CLASSES_ROOT\http\shell\Sleipnir\command] @="\"C:\\Program Files\\Sleipnir\\bin\\Sleipnir.exe\" \"%1\""

  • VISTA 「ファイルを開くプログラムの選択」でチェックが出来ない

    VISTAです。 txtファイルやHTMLファイルを見る際、「ファイルを開くプログラムの選択」で、「この種類のファイルを開くときは、選択したプログラムをいつも使う(A)」 という項目にチェックが出来ません。 以前、エディタソフトと言うのでしょうか、メモ帳代わりのソフトをパソコン入れました。 そして、ファイルを右クリックした時に、そのエディタソフト名が表示されるように、レジストリをいじりました。 それから問題が起こったのですが、そのままにしていたわけです。 (先ほどそれは解除しました) とにかく、普通にファイルをダブルクリックした時に、そのエディタソフトが開いてほしいわけです。(標準のメモ帳は必要ない) ところが、、「ファイルを開くプログラムの選択」画面がいつも出てしまいます。 そして、前述のように、「いつも使用するソフト」にチェックも出来ないわけで困っております。 いろいろネットで調べましたが、解決は出来ませんでした。 どうか、よろしくお願いいたします。

  • レジストリの値

    どなたかWindows2000を使っておられる方、下のレジストリの値を教えていただけないでしょうか。 HKEY_CLASSES_ROOT→folder→open→command の値です。

  • ファイルを開くプログラムの選択

    各種ファイルを右クリックして、プログラムから開くをクリック、プログラムの選択をクリックすると、プログラムの選択画面「ファイルを開くプログラムの選択」が表示されず、メモ帳が起動してしまいます。どなたか、対処方法をお教え下さい。

  • レジストリ経由のフォント受渡し???

    数日前に類似の質問をさせて頂きました ご親切に3件もご指導の回答を頂きましたが、私の質問の仕方が悪く問題の解決に至っておりません 再度、質問形式を変更してお教えを請いたいと存じます C#のアプリケーションでフォントダイアログを表示してフォントを指定します 指定されたものをレジストリに書込みます FontDialog MyFont = new FontDialog(); if (MyFont.ShowDialog() != DialogResult.Cancel) { key = Registry.CurrentUser; key = key.CreateSubKey(@"MyCompany\MySoft"); key.SetValue("MyKey", MyFont.Font, Microsoft.Win32.RegistryValueKind.Unknown); ← (1) } レジストリの HKEY_CURRENT_USER ⇒ SoftWare ⇒ MyCompany ⇒ MySoft の下の MyKeyには REG_SZ 種類でデータとして [Font: Name=HPG行書体, Size=15.75, Units=3, GdiCharSet=128, GdiVericalFont=False] ← (2) と設定されました これをC++プログラムで読み込み、フォントダイアログで指定されたフォントで印刷します HKEY hKey; DWORD dwDisposition; LONG result; result = RegCreateKeyEx( HKEY_CURRENT_USER,L"MyCompany\\MySoft",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition); HFONT MyHFONT;  ← (3) result = RegQueryValueEx(hKey,L"MyKey",NULL,&dwType,NULL,&dwSize); //データのサイズを取得 result = RegQueryValueEx(hKey,L"MyKey",NULL,&dwType,(LPBYTE)(LPCTSTR)&MYHFONT,&dwSize); ← (4) SelectObject(hdc,MYHFONT); TextOutW (hdc, ~~  ← (5) 質問 (1) フォント指定をレジストリに書込む時、Unknown指定で良いのでしょうか  (2) Unknow指定で書込みましたがREG_SZ種別になっています OKですか それから書き込まれたデータはこれで正常ですか (3) HFONTを指定していますが、この場合OKですか (4) (LPBYTE)(LPCTSTR)&MYHFONTで受けていますが良いのでしょうか? (5) 最大のワカラナイ!!! 印刷された文字はC#のフォントダイアログでしていされたものに変化していない 以前のままです C++は初心者です 特にフォントのハンドリング知識は浅学です 宜しくご指導お願い申し上げます

  • Windows7 ファイルをプログラムに関連付け

    ある拡張子のファイルにあるプログラムを関連付けしたいのですが このファイルを右クリックしてプロパティの全般タブの プログラムの変更ボタンで表示される 「ファイルを開くプログラムの選択」のダイアログで 関連付けしたいプログラムを選択してOKボタンのクリックで 関連付けの登録がされると思いますが、 このダイアログにこのプログラムが表示されていません。 このダイアログにこのプログラムを表示するには どのようにすればよいのでしょうか。 参照ボタンでこのプログラムの実行ファイルを指定しても このダイアログにこのプログラムは表示されません。 この状態でOKボタンをクリックしてプロパティの ダイアログを閉じても関連付けされていません。 レジストリをいじらずに このファイルにこのプログラムを関連付けするには どのようにすればよいでしょうか。(Windows7)

  • レジストリの読み込み

    レジストリの読み込みのソースを教えてください。 例えば、 [HKEY_CLASSES_ROOT\.avi] @="avifile" "Content Type"="video/x-msvideo" の2つの値をメッセージボックスに表示するソースを教えてください。 HKEY hKey; RegOpenKeyEx(HKEY_CLASSES_ROOT, ".avi", 0, KEY_READ, &hKey); wsprintf(str1, "%", ); MessageBox(hWnd, str1, "標準の値", MB_OK); wsprintf(str2, "%", ); MessageBox(hWnd, str2, "コンテンツタイプの値", MB_OK); RegCloseKey(hKey);

  • ラジオボタンで選択したファイルをダウンロードするプログラム教えてください

    プログラミング超初心者です。分からないので、教えてください。 いくつかのラジオボタンを作り そのラジオボタンにより選択したファイル(テキストファイル)を ダウンロードするプログラムを 知りたいので、教えてください。 ファイルは 指定したフォルダに全て存在するものとし、1つの項目に対して複数のファイル選択は不可とします。 宜しくお願いします。 例)各々、DLしたいファイルを選択せよ(A,Bともに複数選択不可) Aに関するファイル ○1.txt ○2.txt ○3.txt Bに関するファイル ○4.txt ○5.txt ○6.txt 【2つのファイルをダウンロードする】←ボタン