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

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

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

Re[6]: 自身に設定されているアプリケーションアイコンの取得方法


(過去ログ 104 を表示中)

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

■62203 / inTopicNo.1)  自身に設定されているアプリケーションアイコンの取得方法
  
□投稿者/ 竜馬1989 (4回)-(2011/09/28(Wed) 10:36:25)

分類:[VB.NET/VB2005 以降] 

いつもお世話になっております。
VB2008で作成しているツール(Windowsフォーム)の共通ライブラリを作成していますが、
共通ライブラリのダイアログで使うアイコンに、呼び出し元のアプリケーションのアイコンを使いたいと思います。
(My Projectの「アプリケーション」タブ内で設定する、exeファイルに適用されるアイコンです。)
例えば、共通ライブラリの該当クラスのコンストラクタの引数に、該当アイコンを渡すなどの方法で対応しようと思っていますが、
自分自身に設定したアプリケーションアイコンを取得する方法ってあるのでしょうか?

アイコンはイメージが取得できればいいので、System.Drawing.Icon形式でも、System.Drawing.Image形式でも結構です。

宜しくお願い申し上げます。
引用返信 編集キー/
■62204 / inTopicNo.2)  Re[1]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ shu (1018回)-(2011/09/28(Wed) 11:17:25)
No62203 (竜馬1989 さん) に返信

http://www.atmarkit.co.jp/fdotnet/dotnettips/282verinfodlg/verinfodlg.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/280getappicon/getappicon.html

SHGetFileInfoを使用する方法です。直接取得する方法は分かりません。
引用返信 編集キー/
■62205 / inTopicNo.3)  Re[1]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 魔界の仮面弁士 (2364回)-(2011/09/28(Wed) 12:08:16)
No62203 (竜馬1989 さん) に返信
> 共通ライブラリのダイアログで使うアイコンに、呼び出し元のアプリケーションのアイコンを使いたいと思います。

Dim ico As Icon = Icon.ExtractAssociatedIcon(Process.GetCurrentProcess().MainModule.FileName)

で取得できます。
上記を DLL 側から呼び出した場合は、呼び出し元 exe のアイコンが取得されます。


ただし exe から起動するのではなく、開発環境から呼び出した場合には、
WindowsApplication1.exe ではなく
WindowsApplication1.vshost.exe のアイコンが
取得される点に注意してください。

exe 側のプロパティで、[デバッグ]タブ - [デバッガを有効にする] の
[Visual Studio ホスティング プロセスを有効にする] のオプションを
オフにした場合は、開発環境からでも正しいアイコンが得られます。

# 蛇足ですが、作成した DLL を VB6 から呼び出した場合、
# EXE ではなく VB6 開発環境のアイコンが取得されました。
引用返信 編集キー/
■62206 / inTopicNo.4)  Re[2]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 竜馬1989 (5回)-(2011/09/28(Wed) 12:53:51)
shuさん、魔界の仮面弁士さん、御回答ありがとうございます。

いずれの方法でもアプリケーションのアイコンを取得することができました。

ただ、shuさんの方法では16x16または32x32のアイコン、
魔界の仮面弁士さんさんの方法では32x32のアイコンを取得できるようですが、
このアイコンに含まれる本来のサイズは48x48なのです。
48x48のアイコンを取得する方法はありますでしょうか?

どうぞ宜しくお願い申し上げます。
引用返信 編集キー/
■62212 / inTopicNo.5)  Re[3]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 魔界の仮面弁士 (2365回)-(2011/09/28(Wed) 15:26:52)
2011/09/28(Wed) 15:27:20 編集(投稿者)

No62206 (竜馬1989 さん) に返信
> 魔界の仮面弁士さんさんの方法では32x32のアイコンを取得できるようですが、
ExtractAssociatedIcon(Ex) API 自体の仕様に引きずられて、
Icon.ExtractAssociatedIcon メソッドもそうなってしまうようです。


> 48x48のアイコンを取得する方法はありますでしょうか?
LoadResource API + CreateIconFromResourceEx API を使うか、
あるいは SHMapPIDLToSystemImageListIndex あたりでどうでしょうか。
引用返信 編集キー/
■62213 / inTopicNo.6)  Re[4]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 竜馬1989 (6回)-(2011/09/28(Wed) 16:04:20)
魔界の仮面弁士さん、アドバイスありがとうございます。

> LoadResource API + CreateIconFromResourceEx API を使うか、
> あるいは SHMapPIDLToSystemImageListIndex あたりでどうでしょうか。

LoadResource API + CreateIconFromResourceEx API、または、SHMapPIDLToSystemImageListIndexは
どのように使えばよいのでしょうか?
日本語で解説されているサイトは少なく、やっと関連しているサイトを見つけたのですが、
VBでどのように使用すればいいか、肝心なところが分かりませんでした。

http://d.hatena.ne.jp/yuki_endo/20050530

なにとぞ宜しくお願い申し上げます。
引用返信 編集キー/
■62245 / inTopicNo.7)  Re[5]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 竜馬1989 (7回)-(2011/09/29(Thu) 13:59:26)
色々と調べてみましたが、C#でこれを実現できるソースが掲載されているサイトがありましたので、
これを参考にやってみます。

http://www.koders.com/csharp/fidF4D516C45FF4983AD91CB854652FC5FB211BA675.aspx

上記サイトは、以下のブログの「C# ファイル名から特大アイコンを取得」という記事に紹介されていました。
http://iamignorant.blog11.fc2.com/blog-category-1.html

これをVBに変換して、確認してみようと思います。
引用返信 編集キー/
■62288 / inTopicNo.8)  Re[6]: 自身に設定されているアプリケーションアイコンの取得方法
□投稿者/ 竜馬1989 (8回)-(2011/09/30(Fri) 18:51:01)
上記サイトのC#のコードをVBに変換して試してみたところ、48x48のアイコンを取得することに成功しました。
(C#では大文字と小文字を区別するため、VB変換時にクラス名と変数名がごっちゃになってしまい、修正するのに時間がかかりましたが。)

これにて解決済みとします。ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -