• ベストアンサー
  • すぐに回答を!

拡張子に関連ついているプログラムの特定

現在、いくつかの拡張子(bmpやpdfなど)に関連付いているプログラムのアイコンを取得しようとしています。 アイコン取得自体は、プログラムパスがあれば”ExtractAssociatedIcon”等でいけそうと目星はついています。 ですが、実ファイルがなく、拡張子(bmpやpdfなど)から関連付いているプログラムパスもしくはアイコンを取得するよい方法はないでしょうか? レジストリに登録されている拡張子情報からプログラムを取得し、そのプログラムを別のキーから検索するなどでもいけそうですが、けっこう大変そうなので・・・ レジストリの拡張子情報は、「HKEY_CURRENT_USER→Software→Microsoft→Windows→CurrentVersion→Explorer→FileExts」から取得しようと思っています。 SHGetFileInfoやExtractAssociatedIconに拡張子を渡してみましたが取れなさそうでした。使い方が間違ってるのかもしれません。(EXEパスからはOKでした) なにかご存じの方がいらっしゃいましたら、お教えください!よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数203
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1

拡張子文字列(".bmp" とか ".pdf")からアイコンデータを取得できれば良い、ということでしょうか。 特に私自身は詳しくはないのですが、以下のサイトにサンプルがあるようです(IconFromExtension())。 SHGetFileInfo() で問題なさそうですね、引数をお間違えではないでしょうか。

参考URL:
http://www.codeproject.com/KB/cs/iconhandler.aspx

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございました。 サンプルを試したところ、問題なく取得できました。 引数を完全に理解していなかったようです。 レジストリからやっていたら、コード量がぜんぜん違っているところでした。 ほんとうにありがとうございました。

関連するQ&A

  •  ファイルの拡張子の関連付けについて

     ファイルの拡張子の関連付けについて    初心者なのでよくわからないところもあるのですが。(まちがっていたらすみません。)    自分の認識では、拡張子の関連付けの設定は、      HKEY_CLASSES_ROOT¥.exe このようにレジストリに設定されていると思うのですが、   たとえば abcdef.ssk というファイルがあったとして、    HKEY_CLASSES_ROOT¥.ssk という設定がされていなくも、プログラムの実行上問題ないのでしょうか?   もし問題があるとして、レジストリの設定をできるフリーソフトなどはあるのですか。   わかるようでしたら、よろしくお願いします。      

  • 関連付けされたアプリケーションの解除

    一度ファイルを実行したプログラムは、コンテキストメニューの「プログラムから開く」に追加されるようになって関連付けされていきますが、逆にそれを削除する場合 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts の当該拡張子から削除したいプログラムを削除すれば消えますが、最初に関連付けしたプログラムはどうやっても消えてくれません。コレだけまた別のところに登録されているようなのですが、どなたかご存知の方いらっしゃいましたらよろしくお願いいたします。

  • 拡張子に対するプログラムの関連付けについて

    拡張子に対して、ファイルのプロパティもしくはフォルダのプロパティ上でアプリケーションを関連付けすることができる機能について質問です。 アプリケーションを変更しようとしても、一覧に関連付けしたいプログラムが登録されておらず、自分で探して登録しようとするのですが目的のプログラムを選択しても登録がなされず、一覧にも表示されません。 目的のプログラムはインストーラがついていない、zipを解凍するだけのプログラムです。 これはレジストリに記録されていないから無理ということでしょうか? 因みにファイル拡張子はflvで、プログラムはflvプレイヤーです。

  • 拡張子とプログラムの関連付けを削除したい【Win8

    Windows8です。 (FAQだと思うのですがうまく検索できません) 不明の拡張子のファイルがあったので、メモ帳で見られないかと思い、「プログラムから開く」で開いてみましたが、だめでした。「いつも開く」のチェックを外し忘れたため、アイコンがメモ帳になってしまいました。 これを再び不明なアプリケーションに戻すにはどうしたら良いのでしょうか? (古いOSでは簡単にできたと記憶しますが、レジストリをいじる必要があったとどこかで読んだのですが、見つけられません) よろしくお願い致します。

  • ファイルの拡張子の関連付けが変更できません

    環境はwindows7です。 今まで、ある拡張子のファイルをあるフリーソフトの.exeに関連付けで使用していました。 フリーソフトのバージョンが新しくなり、新しい.exeに拡張子のを関連付けを変更しようとして、当該拡張子のファイルを右クリック>「プログラムから開く」>「既定のプログラムの選択」の「参照」から新しいバージョンの.exeを参照して「OK」をクリックしました。 しかし、関連付け先の.exeが変わっていないようで、ファイルをクリックで開くと古いバージョンの.exeを使用して起動してしまいます。 どうすれば、こういう症状のときに正常に関連付けを変更できるのでしょうか。 教えてください、よろしくお願いします。 古いバージョンの.exeなどを新しいバージョンのもので上書きすれば良いのかもしれませんが、古いバージョンも使用することがあり、また.exeのパスにソフトのバージョンが含まれているため上書きや古いバージョンの場所を移動するようなことはしない方法でお願いします。 また、レジストリを直接変更するという方法もあると思いますが、もっと簡単な方法があれば教えてください。

  • 拡張子の関連付け解除

    現在Windows7を使用しているのですが、 あるアプリをインストールしたら該当の拡張子がプログラムと 関連付けされてしまいました。 ダブルクリックをしても該当プログラムで開かないようにしたいです。 コントロールパネル→既定のプログラム→関連付けを設定する で解除しようと思いましたができませんでした。 Win XPならすぐ出来たんですけどね… 該当の拡張子は何のプログラムとも関連付けをしたくありません。 解除方法を教えていただければと思います。 よろしくお願いします。

  • Windows7で拡張子の関連付けを

    Windows7で拡張子の関連付けの方法を教えてください。HTML文をホームページビルダで編集できるようにしたいのです。 ホームページビルダV9をインストールしたのですが、IE8のツール⇒インターネットオプションで「プログラム」で「HTMLの編集」を見てもワードやExcelはありますが、ホームページビルダがありません。 レジストリをいじらなくても何とかできないでしょうか?

  • WindowsXPでは、関連付けされていない拡張子のファイルにアイコン

    WindowsXPでは、関連付けされていない拡張子のファイルにアイコンのみを関連付け出来ましたが、 Windows7も同じように、関連付けされていない拡張子(ファイル)をアイコンのみ関連付け出来ないでしょうか。 (関連付けされていないファイル(拡張子)とアプリケーションを関連付けする方法はわかります。) XPでの上記の方法は、以下ことを言っております。 (1)マイコンピュータ→ツール→ファイルの種類→新規→拡張子入力→OK (2)新たに追加された拡張子を一覧から選択→詳細設定→アイコンの変更 以上で、アプリケーションに関連付けすることなく、登録されていない拡張子のファイルを アイコンのみ変更が可能でした。 Windows7でも同様の事が出来ないでしょうか?

  • 拡張子の関連付けしてもアイコンが変わらない

    拡張子.GCAのアイコンが関連付けしてない状態になってしまいました。関連付けは出来ているのですが表示されるアイコンが.GCAの物になりません。 なぜか関連付けの推奨されたプログラムの中に、dvd decrypterがはいっていました。 実害は無いと思うのですが、気になってしかたが有りません。どうやったら表示アイコンを元の状態に戻せるんですか?

  • windows98で拡張子とプログラムの関連付けがおかしいです。

    こんばんは。お世話になります。lzhファイルを開こうと思い、クリックしたら「このプログラムは有効なwin32アプリケーションではありません」とダイアログボックスが出てしまいます。コンテキストメニューの送るからLhazを選ぶとうまく解凍できますが、lzhファイルをダブルクリックして、開けるようにしたいのです。 拡張子と関連アプリケーションの関連付けはどうやるんですか?Windows98はほとんど使ったことがないので、わかりません。だれかおしえてください。よろしくおねがいします。