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

わんくま同盟

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

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


(過去ログ 38 を表示中)
■19353 / )  Re[7]: ショートカットファイルのアイコン設定
□投稿者/ こみ (4回)-(2008/05/22(Thu) 14:46:01)
No19347 (とっちゃん さん) に返信
> ■No19311 (シャノン さん) に返信
>>無理です。
>>SHGetFileInfo で取得できるのは「ファイル中のアイコンインデックス」ではなく「システムイメージリスト内のイメージインデックス」です。
> 違いますよ。システムイメージリストのインデックスを取得するのが主な用途ですが、
> 特定のファイルのアイコンを抽出すること「も」できますし、特定のファイルの種類のアイコン「も」取得できます。
> 結構幅広い用途で使えるので、まぁやろうと思えばいろいろできます。癖が強いのでお勧めはできませんがねw
>
>
>
> ■No19306 (こみ さん) に返信
>>やりたいことは外部アプリケーションのショートカットを作りたいのですが、対象によってはアイコンが正常に設定できないので
>>対象となるファイルのアイコンインデックスをプログラム内で取得して、作成するショートカットファイルに適応したいです。
>>
> ショートカットの作成は、.lnk ファイルの作成ですか?
> であれば、アイコンをセットしないことで、デフォルトのアイコンを引っ張る機能がOSにあるので意識しなくてもいいと思います。
> が、アイコンが取得したいという用途から考えるとそうではないんでしょうね...
>
> 任意のアイコンではなくてもいいのなら、System.Drawing.Icon クラスの ExtractAssociatedIcon メソッドで引っ張れるんですが...
> それじゃダメなんですかね?
>
> 難しいこと考えなくていいし、.NET のクラスなので使うの楽ですけど...
>
> アイコンが正常に設定できないというのがどういうことなのかもうちょっと詳しく書いてもらうと
> きっとみんなわかるんじゃないかと。
> ちなみに、VSで、うまくいかないEXEファイルをファイル-開くから開くと、アイコンを持っているかどうかを確認できます。
> インデックスも含めてね。
>
> そこに入っていない場合、そもそもアイコンを抱えていないので、どんなAPIを駆使しても望む機能は実現できません。
>

アドバイスありがとうございます。
複雑になってきたので、今やっている事をまとめてみます。

外部アプリケーションのショートカット(*.lnk)を作成したのですが、物によってうまくいきません。
普通ならリンク先のアイコンが表示されるのですが、私の場合は
リンク先は「C:\Windows\notepad.exe」
アイコンは「C:\Windows\regedit.exe」
のように、実際のリンク先と違うアイコンを表示させたくて
「Windows Scripting Host Object」で
    .IconLocation = "C:\Windows\regedit.exe"
.TargetPath = "C:\Windows\notepad.exe"
.Save()
としてショートカットを作成しています。

しかし、ファイルのアイコンがDLLから呼び出されている場合、(例がVBのプロジェクトファイル *.sln )
「IconLocation」でそのファイルを指定しても、アイコンは真っ白な四角のアイコンになってしまいます。

これを回避するために「SHGetFileInfo」から指定のファイルのアイコンインデックスを取得しようとしています。
また、レジストリも確認しましたが、ここからは不可能です。

「System.Drawing.Icon クラスの ExtractAssociatedIcon」ここからアイコンの取得はできたのですが、
イメージでの取得となるので、ショートカットに適応させることはできまでんでした。
返信 編集キー/


管理者用

- Child Tree -