- - PR -
アプリケーションアイコンを取得する方法
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-29 17:11
ビルド時の話です。
話の元が遅れましたが、.NETを拡張というか機能追加するDLLを 作成していますので、第3者はそのDLLを使用して.NETでの開発をします。 その.NETで開発されるもののアイコンは.NETのプロパティに アイコン情報を任意で入力することになるので、 アイコンの場所は、第3者が決めることになりませんか? この場合に第3者に配布するときに.icoファイルが必要なのでしょうか? .EXEのアイコンと同じアイコンを使用することが前提ですので、 .EXEからアイコン(アプリケーションアイコン)の 情報を取得する方法を探しているのです。 説明下手で申し訳ありません。 | ||||||||||||||||
|
投稿日時: 2004-12-29 17:57
とあるところのHPに、
「.NET Frameworkではアプリケーションのアイコンを 取得する手段が提供されていない 」 と書かれていたのですが、本当でしょうか? そうすると、アンマネージコードで記述する以外に方法が ないということになってしまうのですが・・・ 知っておられる方がいらっしゃいましたら、できれば MSの公式HPのリンクなどと一緒に教えていただけるとありがたいです。 | ||||||||||||||||
|
投稿日時: 2004-12-29 17:59
ごめんなさい、結局のところ何がしたいのかがよく分かりません。
機能追加する DLL とは何でしょう? クラスライブラリのことでしょうか?
それは DLL 開発者であり、EXE で開発者でないあなたとは関係の無い話ではないでしょうか? DLL を使用する際に「この DLL を使用する EXE では、DLL 作成者の指定するアイコンを実行ファイルおよびメインフォームのアイコンとして使用すること」というルールを課したくて、その実現方法を探しているということなのでしょうか?
場合によってはそれが一番簡単かもしれません。
どこにあるアイコンを取得したいんでしょう? あなたがおっしゃるように、第3者が .ico ファイルの置き場所を定めるなら、DLL 作成者のあなたがケアする問題ではないように思えるのですが。。。 .ico ファイルが提供されていて、そのパスが判明しているなら Icon icon = new Icon (iconFilePathName); で十分ですよね? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||||||
|
投稿日時: 2004-12-30 18:52
答えは知りませんが。
アプリケーション「A」がクラスライブラリ「B」を参照していて、 A側から、Bで定義されたFormを表示したときに、Aに関連付けられている アプリケーションアイコンを、BのFormで表示したいということですよね? どんなアプリケーションから参照されても呼び出し元のアイコンを表示したい、と。 かすみさんはBを作成していて、Aの実装方法は決められないのですよね? 複雑な問題なため理解するのに時間がかかりました。というか、こんなことできるとは 知らなかったのでこういう意味だとは思いもしませんでした。 が、実際に提示されたDllImportのコードを実装するとそうなりますね。
で調べる。下記サイトの一番下参照。 http://dobon.net/vb/dotnet/programing/bitmapresource.html そもそも埋め込みとそうじゃない場合の違いがわかりません。埋め込みでない場合 (ビルドアクションを「埋め込まれたリソース」にしなかった場合)、確かに GetManifestResourceNames() では取得できないですが、.icoファイルがなくても .exeファイルのアイコンはExplorer上でちゃんと表示されますよね? http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17349&forum=7 ここのスレッド、何かの参考になりますかね。
これですかね?「直接的な方法がない」のはいまのところ本当っぽいですね。 出来るとしたらAssemblyからどうにかこうにか出来るのでしょうかね・・ ResourceManagerクラスも気にはなりました。 .NET 2.0になると Icon icon = Icon.ExtractAssociatedIcon("exeファイルのパス") なんていう、ずばりなメソッドで取得出来るみたいです。 [ メッセージ編集済み 編集者: べる 編集日時 2004-12-30 18:59 ] | ||||||||||||||||
|
投稿日時: 2005-01-05 18:13
ご返信ありがとうございます。
べるさんが要約していただいている通りです。 説明下手で申し訳ありません。 また、私が見たHPも同一のHPです。 引用: -------------------------------------------------------------------------------- アプリケーション「A」がクラスライブラリ「B」を参照していて、 A側から、Bで定義されたFormを表示したときに、Aに関連付けられている アプリケーションアイコンを、BのFormで表示したいということですよね? どんなアプリケーションから参照されても呼び出し元のアイコンを表示したい、と。 かすみさんはBを作成していて、Aの実装方法は決められないのですよね? -------------------------------------------------------------------------------- そうです。Aに関連付けられているアイコンをB側で取得?して B側のFormの左上のアイコンにAのアイコンを表示したかったのです。 私が作成している側はBで、Aを作成する方の実装方法は 私には決められないのです。。 現在、.NETFreamwork1.1では直接は出来ない、という 結論で話が通っていきそうなので、深追いをこれ以上はしていません。 渋木さん、べるさん、稚拙な文章に親切に回答いただいてありがとうございました。 また、よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2005-01-05 19:55
Form A と Form B が親子関係にあるなら、Form B の Load イベントのハンドラで this.Icon = ((Form) this.Parent).Icon; とするのでは駄目ですか? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||||||
|
投稿日時: 2005-01-06 09:53
親子関係にはないので、無理でした。。。
(エラーになってしまいました。) |