- - PR -
アプリケーションアイコンを取得する方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-28 19:39
かすみです。
Windowsフォームのタイトルバーのアイコンに、 csprojのプロパティで指定しているアイコンを 表示させたいと思っています。 ただし、アプリケーション側で指定するのではなく アプリケーションが参照するDLL側で タイトルバーのアイコンを指定させたいのです。 そこで質問なのですが、DLLを参照しているアプリケーション側に 指定しているアプリケーションアイコンファイルをDLL側で、 Windowsフォームのタイトルバーのアイコンに表示するには どのようにしたらよいのでしょうか? 質問が下手かもしれませんが、わかる方がいらっしゃいましたら よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-12-28 22:40
と
って、相反することを言ってませんか? 要するにやりたいことは
だとして、コードで実現するのはそれほど難しくないはずです。 大まかには ・DLL に、アイコンを取得する関数かクラスメソッドを実装する。 ・フォームの Load イベントで↑を呼び出し、Icon プロパティに設定する。 という手順でできるんじゃないでしょうか。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://www.hidori.jp/ // Microsoft MVP for Visual C# # Visual Studio2005 の全エディションに UnitTest 機能を!投票募集中↓ # http://lab.msdn.microsoft.com/ProductFeedback/viewFeedback.aspx?feedbackId=FD [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2004-12-29 15:35 ] | ||||||||||||
|
投稿日時: 2004-12-29 09:56
お返事ありがとうございます。
すいません。質問が下手でしたね。。。 アイコンを取得する関数かクラスメソッドの実装とありますが、 .NETFreamWorkには該当メソッドは存在しないのでしょうか? ヘルプとGoogleで調べてみたのですが、上手くHITしなかったので。。。 Loadイベントは実装しています。 あとはアイコンが設定できれば完成・・・なんです。 Freamworkにないとしたら、アイコン情報はどのように 取得できるのでしょうか?(具体的なコードが見てみたいです) 何度も質問して申し訳ありませんが、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-12-29 12:00
「どこに」「どうやって」アイコンが格納されているのか分からないと回答は難しいです。 dll の中に、リソースとして取り込んであるんですか? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||||||
|
投稿日時: 2004-12-29 13:52
アイコンは、アプリケーション側のcsprojのプロパティ内の
アプリケーションアイコンで指定された位置に格納しています。 つまりアプリケーションによって、「どこに」は変わります。 「どうやって」は・・・.icoファイルとして、フォルダ内に保存してあります。 dllのリソースではないです。 回答になっていますでしょうか? 先ほど、とあるページで見つけたソースコードがあり、それで 動作上は問題なしで動いていたのですが、アンマネージドコードなので コード規約に反するということで、まだ調べています。 とりあえず、動作しているソースコードを下記に記します。 ------------------------------------------------------------------------------- [DllImport( "shell32.dll", EntryPoint = "ExtractAssociatedIcon" )] private extern static IntPtr ExtractAssociatedIcon ( IntPtr hInst, [MarshalAs(UnmanagedType.LPStr)] string lpIconPath, ref int lpiIcon ); private void LoadViewState() { Assembly assembly; assembly = Assembly.GetEntryAssembly(); string iconPath = assembly.Location; IntPtr hInst = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly().GetModules()[0] ); Int32 iIcon = 0; IntPtr hIcon; // ファイルに関連付けられたアイコンのハンドルを取得する hIcon = ExtractAssociatedIcon( hInst, iconPath, ref iIcon ); // アイコンハンドルからIconオブジェクトを作成する this.Icon = Icon.FromHandle( hIcon ); -------------------------------------------------------------------------------- 上記はdll内のソースです。 LoadViewStateは、dll内のWindowsフォームをロードする際の関数です。 dll内から、アプリケーションのアセンブリを取得して、アイコンのハンドルを 取得するという方法のようですが、まだ完全には把握していません。。。 ExtractAssociatedIcon()がSDKのメソッドなので、 .NETFreamworkでは、どのようにして、アイコン情報が 取得できるのか、が問題として残っておりますが、 何か方法はご存知でしょうか? | ||||||||||||
|
投稿日時: 2004-12-29 14:47
追記でわかったことと、質問です。
assembly = Assembly.GetExecutingAssembly(); this.Icon = new Icon(assembly.GetManifestResourceStream("アイコン名")); で、アイコンの情報が取得できることがわかりました。 アプリケーション側で指定したアイコンの名前を、DLL側で取得できる メソッドはあるのでしょうか? わかるかたおられましたら、よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-12-29 15:08
自分への返答。。。
アイコン名だけでは、リソース埋め込みではないので取れないようでした。 失礼しました。 | ||||||||||||
|
投稿日時: 2004-12-29 15:40
それはビルド時の話ですよね? 第3者にアプリケーションを配布した時などに、どうやって .ico ファイルの置いてある位置を検出するつもりでしょうか?(あなたが決めることです) .exe と同じフォルダですか? _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ |