C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 拡張子に関連付けられたアイコンの取得


(過去ログ 55 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■31067 / inTopicNo.1)  拡張子に関連付けられたアイコンの取得
  
□投稿者/ めろぱん (13回)-(2009/01/14(Wed) 23:21:40)

分類:[C#] 

開発環境:Visual Studio 2008
言語:Visual C#

こんばんは、めろぱんと申します。

ファイルに関連付けられたアイコンの取得方法として、
以下の方法が広く紹介されていると思います。

Icon icon = Icon.ExtractAssociatedIcon(@"C:\abc.txt");

ただし、この方法だと、ディスク上に実在するファイルを
指定しないといけません。
実在のファイルを指定せず、拡張子だけを(たとえば ".txt" だけ)
頼りにアイコンの画像を取得する方法はありますでしょうか?

tempフォルダかどこかにサイズ0のダミーのファイルを作って
Icon.ExtractAssociatedIcon()で取得する方法を考えましたが、
もっと手っ取り早い方法があれば、と思い質問しました。

よろしくお願いします。
引用返信 編集キー/
■31068 / inTopicNo.2)  Re[1]: 拡張子に関連付けられたアイコンの取得
□投稿者/ オショウ (72回)-(2009/01/15(Thu) 00:09:57)
> ただし、この方法だと、ディスク上に実在するファイルを
> 指定しないといけません。
> 実在のファイルを指定せず、拡張子だけを(たとえば ".txt" だけ)
> 頼りにアイコンの画像を取得する方法はありますでしょうか?

  Win32 API の、AssocQueryString を使えばファイルが無くても
  パス取得できます。

※ VISTA でも動作しましたので大丈夫でしょう
  XP でエラーすると言う記述は見つけましたが・・・

  お試し下さい。

※ 宣言(VBで)

<Flags()> _
Private Enum AssocF As Integer
Init_NoRemapCLSID = 1
Init_ByExeName = 2
Open_ByExeName = 2
Init_DefaultToStar = 4
Init_DefaultToFolder = 8
NoUserSettings = &H10
NoTruncate = &H20
Verify = &H40
RemapRunDll = &H80
NoFixUps = &H100
IgnoreBaseClass = &H200
End Enum

Private Enum AssocStr As Integer
Command = 1
Executable
FriendlyDocName
FriendlyAppName
NoOpen
ShellNewValue
DDECommand
DDEIfExec
DDEApplication
DDETopic
End Enum

<DllImport("Shlwapi.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function AssocQueryString(ByVal flags As AssocF, ByVal str As AssocStr, ByVal pszAssoc As String, ByVal pszExtra As String, ByVal pszOut As String, ByRef pcchOut As Integer) As Integer
End Function

以上。
引用返信 編集キー/
■31072 / inTopicNo.3)  Re[2]: 拡張子に関連付けられたアイコンの取得
□投稿者/ Azulean (264回)-(2009/01/15(Thu) 07:55:30)
用途次第ですが、拡張子だけでは断定できないケースがあるということで書いておきます。

Visual Studioでは、slnファイル(ソリューションファイル)のアイコンを、バージョン毎に分けています。
同じslnという拡張子なのに、2005のslnファイルだと8、2008のslnファイルだと9とアイコンに見えるかと思います。

このように、そのファイルの中身によってアイコンを差し替えるような仕組みがある場合、拡張子だけでは正しく取得できないことがあり得ます。
引用返信 編集キー/
■31232 / inTopicNo.4)  Re[3]: 拡張子に関連付けられたアイコンの取得
□投稿者/ めろぱん (14回)-(2009/01/18(Sun) 11:40:29)
オショウさん、Azuleanさん
ご回答ありがとうございます。

>オショウさん
拡張子から関連付けられたアプリのパスをとってきて
そこからアイコンを取得する、って感じですね。
Vistaで試しましたが、問題なく動作しました。
ありがとうございました。

>Azuleanさん
その辺の認識がありませんでした。
試しにからっぽのslnファイルを作ってアイコンを取得したら
Visual Studioのデフォルトっぽいアイコンがとれました。
(8とか9とかの数字が出てないです)
今回はそれでもよいと考えています。
解決済み
引用返信 編集キー/
■31244 / inTopicNo.5)  Re[4]: 拡張子に関連付けられたアイコンの取得
□投稿者/ 魔界の仮面弁士 (965回)-(2009/01/18(Sun) 23:30:06)
No31232 (めろぱん さん) に返信
>> 拡張子だけでは断定できないケースがあるということで書いておきます。
> その辺の認識がありませんでした。

sln 以外では、拡張子 ico や cur なども。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -