eMbedded VB のプログラムにアイコンを付けようと思ったが・・・



【1】結論から言うと、eMbedded VBで作ったソフトにはアイコンは付けられません
eMbedded VBで作ったソフトは *****.vb というファイルになり、このファイルは実行ファイルではなく Pvbload.exe というプログラムのデータという位置づけなので全てPvbload.exeのアイコンが表示されるためです。
ワードのデータが全部同じアイコンになるのと同じ理屈です。
でも、プログラムを複数ランチャーに登録して使おうとすると、全部同じアイコンになってしまってどれが何だかわからなくなってしまいます。

そこで、1つのVBファイルだけを起動するランチャーをC言語を使って書くことにしました。
後で知ったのですがこの方法はマイクロソフトのホームページにのっています。
こちら

プログラムはC言語なので興味のある方だけ見ていただくとして、 こちら、テキストファイルです

使い方を説明します
動作は簡単で自分と同じ名前のvbファイルを実行するだけです
例えば、あるフォルダーに Test.vb というeMbedded VBで作ったソフトがあったとして、同じフォルダーに Test.exe という名前でおいておけば Test.exe は実行されると Test.vb を起動して自分は終了します。
これであたかもTest.vbが起動したかのように見えるというわけです。ランチャーには Test.exe を登録すれば Test.exe のアイコンが表示されるというわけです。

それでは、ソースコードをダウンロードしてコンパイルして下さい・・・、というのは一部のCプログラマー以外には実用性が低そうなので
実行ファイルのアイコンのみ変更する方法を説明します
(1)まず実行ファイルをDLします
右クリックで対象をファイルに保存をしてください、もっともWindowsでは間違って実行してもエラーがでて実行はできませんが。
SimpleLaunch.exe

(2)ファイル名を自分の作ったVBのファイル名と同じにします、拡張子はexeです
もし Test.vb なら Test.exe です

(3)eMbrdded Visual C++を起動します
方法はいろいろありますが、ここではVBといっしょにインスツールされているeMbrdded Visual C++をアイコンエディタの代わりに使います
メニューから「ファイル」「開く」と選んで出たダイアログボックスで
ファイルの種類は"実行可能ファイル"、用途は"リソース"にして読み込む (ここが重要、デフォルトで読み込むとできません)
読み込もうとしている所です、ここではファイル名はSimpleLaunch.exeです



SimpleLaunch.exeというウィンドウのIcon、101とクリックするとアイコンエディターが開きます

これでアイコンの編集が可能です。操作は一般的なグラフィックソフトと同じなので迷うことはないでしょう。
作成ウィンドウ上のコンボボックスで切り替えて、32x32と16x16の両方を作成します。
PocketPCのデバイス上では16x16のほうが多用されるのでこちらのほうに力を入れた方が良いかもです。

編集が終わったら保存して終了です

(4)フリーのアイコンを公開しているページが沢山ありますので、そこから気に入ったアイコンをもらってきて付け替えるという方法もあります。
Windows用のアイコンを付け替えるソフトもあります、これを使えば自分でアイコンを作らずに簡単にアイコンだけ替えることができます。
検索すれば沢山ありますがいくつか試した結果では「KH IconRewrite98」というのが良さそうでした
こちら

【2】配布用のCABファイルを作る
これは上述のマイクロソフトのホームページに書いてありました
が、その通りにするとうまくいきません
多分英語版のPocketPCならうまく行くんでしょうが、日本語版では一部変更が必要です
以下に、コピペとうまく行かない部分を【注意】と赤文字で記載しておきます

 
--------------------------------ここから----------------------------------
[HOWTO] eVB アプリケーションにアイコンを関連付ける方法
対象製品
文書番号 : 268309
最終更新日 : 2002年8月31日 
リビジョン : 1.0 
この記事は、以前は次の ID で公開されていました: JP268309
目次
 概要 
 詳細 
   手順例  
     eVB アプリケーションを作成する  
     eVC アプリケーションを作成する  
     eVB 配布パッケージを準備し構成する  
     複数の CPU に適応させる手順  
 関連情報 
 関連情報 
 この資料は以下の製品について記述したものです。 

概要
この資料では、eMbedded Visual Basic (eVB) アプリケーションを配布し、そのアプリケーションにカスタム アイコンを関連付ける方法を説明します。 
 先頭へ戻る 

詳細
eVB アプリケーションは実行可能ファイルではなく、Pvbload.exe 実行可能ファイルにより解釈されるバイナリ ファイルにコンパイルされます。このため、eVB アプリケーションは、Microsoft Excel のワークシートがアイコンを Excel.exe から使用するのと同じ方法で、Pvbload.exe からアイコンを使用します。アプリケーション アイコンをカスタマイズできるようにするには、オペレーティング システムに対してアプリケーションの実行のみを要求するシェルとして eMbedded Visual C++ (eVC) アプリケーションを作成する必要があります。オペレーティング システムは、Pvbload.exe へのファイルの関連付けがあることを認識します。

eMbedded Visual Basic アプリケーションをカスタム アイコンと一緒に配布するには、次の 4 つの手順を実行しなければなりません。 1. eVB アプリケーションにアイコンを関連付けます。 手順 1. に必要な eVC アプリケーションを eVB 配布パッケージと一緒に配布します。 手順 1. に必要な eVC アプリケーションを [スタート] メニューに置きます。すべてのファイルを複数の CPU に対して正しく配布します。 
2. 手順 1. に必要な eVC アプリケーションを eVB 配布パッケージと一緒に配布します。 手順 1. に必要な eVC アプリケーションを [スタート] メニューに置きます。すべてのファイルを複数の CPU に対して正しく配布します。 
3. 手順 1. に必要な eVC アプリケーションを [スタート] メニューに置きます。すべてのファイルを複数の CPU に対して正しく配布します。 
4. すべてのファイルを複数の CPU に対して正しく配布します。 

 先頭へ戻る 

手順例 
eVB アプリケーションを作成する 
1. eMbedded Visual Basic で、ターゲット プラットフォームに適した新しい Windows CE プロジェクトを開始します。  
2. [ファイル] メニューの [Project1.vb の作成] をクリックし、プロジェクトをコンパイルします。  
3. プロジェクトを保存します。  
4. プロジェクトを閉じ、eVB を終了します。  

eVC アプリケーションを作成する 
1. eMbedded Visual C++ を起動します。  
2. [ファイル] メニューの [新規作成] をクリックします。  
3. [プロジェクト] タブの [WCE Application] をクリックし、プロジェクト名を入力します。この例では、プロジェクトに StubLauncher という名前を付けます。  
4. 画面の指示に従って、単純な Windows CE アプリケーションを作成するためのオプションを選択します。  
5. 次のコードを既存の WinMain 関数に重ねて貼り付けます。 

// StubLauncher.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "shellapi.h"

LPTSTR szAppName = _T("Project1.vb");
//Microsoftの方法では起動するVBファイル名をソースに書き込んでいます、これだとVBファイルを作成するたび再コンパイルが必要になります
LPTSTR szStubName = _T("StubLauncher.exe");

int WINAPI WinMain(	HINSTANCE hInstance,
			HINSTANCE hPrevInstance,
			LPTSTR    lpCmdLine,
			int       nCmdShow)
{
   long retVal;
   TCHAR szPath[128];
   LPTSTR Instr;
   LPTSTR szVerb = _T("open");

   //Start the Visual Basic application and exit.
   SHELLEXECUTEINFO lpExecInfo;
   memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO));

   lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

   // Get the path to the current directory.
   retVal = GetModuleFileName(hInstance, szPath, 128);
   if (retVal) {
      // Remove the stubs file name to get just the path.
      Instr = wcsstr(szPath, szStubName);

      if (Instr != NULL)
         // Add the target file to the resulting path.
         wcscpy(Instr, szAppName);

      //MessageBox(0, szPath, _T("This is the path I got"), 0);

      // Now use this to start the application.
      lpExecInfo.lpFile = szPath;

      lpExecInfo.nShow = SW_SHOWNORMAL;
      lpExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
      lpExecInfo.lpVerb = szVerb ;

      ShellExecuteEx(&lpExecInfo);
      return(0);
   }

   return(-1);
}

 
6. [WCE Configuration] ツール バーで必要なプラットフォームが選択されていることを確認します。  
7. [挿入] メニューの [リソース] をクリックし、アプリケーション用のアイコンを追加またはインポートします。  
8. そのアイコン用のリソース ウィンドウが開いていることを確認します。  
9. リソースを .rc ファイルとして保存します。  
10. [ビルド] メニューの [Batch Build] をクリックし、必要なプラットフォーム用にコンパイルします。  
11. すべてのファイルを保存し、eVC を終了します。  

eVB 配布パッケージを準備し構成する 
1. アプリケーション インストール ウィザードを起動します。以下に示す「マイクロソフトサポート技術情報」 (Microsoft Knowledge Base) の資料の手順に従って、ウィザードの手順 1. 〜 6. を完了します。
194837 (http://support.microsoft.com/kb/194837/EN-US/) HOWTO: Distribute a Visual Basic Windows CE Application 
194837 (http://support.microsoft.com/kb/194837/JA/) [HOW TO] Visual Basic の Windows CE アプリケーションを配布する方法  
2. アプリケーション インストール ウィザードの手順 7. で、eVB アプリケーションの配布先とする CPU 用の .exe ファイルを選択します。  
3. アプリケーション インストール ウィザードを完了します。  
4. .inf ファイルを開き、次の変更を加えます。 
a.  [DefaultInstall] セクションで、次のように CEShortcuts の値を "Shortcuts" から "AddlShortcut" (他の名前を選択してもかまいません) に変更します。
 [DefaultInstall]
CopyFiles=Files.App, Files.Windows
CEShortcuts=AddlShortcut

 
b.  次のように、新しい [AddlShortcut] セクションを追加します。 
[AddlShortcut]
%AppName%,0,"StubLauncher.exe"
【注意】ここは作成したVBファイルの名前の拡張子をexeに変えたものを書く。
もし Test.vb なら Test.exe です
VBのファイ名は[Shortcuts]の項目に書かれているので確認可能です


 
c.  [DestinationDirs] セクションに次の行を追加します。 
AddlShortcut=,%CE11%

注 : PocketPC デバイスでは、次の行を追加します。 
AddlShortcut=,%CE2%\Start Menu
【注意】日本語PocketPC2003の場合は 
AddlShortcut=,%CE2%\スタート メニュー
とする、文字は全角のカタカナ スタートとメニューの間は半角のスペース
これでうまく行く時もありますが、ショートカットがスタートメニューに登録される時もある
AddlShortcut=,%CE2%\スタート メニュー\プログラム
としたほうが確実か?
\は半角、プログラムは全角カタカナ

 
5. .inf ファイルを保存して閉じます。  

6. Readme.txt ファイルに記載されているコマンド ラインを使用して、.cab ファイルを再パッケージ化します。Readme.txt ファイルは、.inf ファイルと同じ場所にあります。  
記述されたコマンドを「"」を含めてすべてコピーし、「スタート」「ファイル名を指定して実行」のテキストボックスにペーストしてOKを押す

7. CD1 ディレクトリにあった元の .cab ファイルを新しくコンパイルした .cab ファイルで置き換えます。  

ここから下は試してません
複数の CPU に適応させる手順 
前述の手順を完了させて配布パッケージを準備したら、次の手順を実行します。 1. 特定の CPU 専用のコンパイル済み .exe ファイルを、パッケージが作成された、その CPU 専用のディレクトリにコピーします。  
2. コンパイル済みの StubLauncher.exe を App フォルダ (パッケージが作成されたディレクトリと同じ場所にあります) から削除します。  
3. .inf ファイルを開き、[SourceDisksFiles] セクションから StubLauncher.exe を削除します。  
4. すべての CPU セクションに StubLauncher.exe を追加します。次に例を示します。 [SourceDisksFiles.SH 3 (1k) v3.00]
[SourceDisksFiles.Mips 4000 (4k) v3.00]

 
5. ディスク番号を適切な設定に変更します。たとえば、[SourceDisksNames.SH 3 (1k) v3.00] セクションは次のようになります。 3=,"SH 3 (1k) v3.00 Files",,SH 3 (1k) v3.00

[SourceDisksFiles.SH 3 (1k) v3.00] セクションを次のように変更します。 StubLauncher.exe=3

 
6. Readme.txt ファイルに記載されているコマンド ラインを使用して、.cab ファイルを再パッケージ化します。Readme.txt ファイルは、.inf ファイルと同じ場所にあります。  
7. CD1 ディレクトリにあった元の .cab ファイルを新しくコンパイルした .cab ファイルで置き換えます。  
これで、インストール パッケージを正常にテストできます。 
 先頭へ戻る 

関連情報
詳細については、『Microsoft Windows CE プログラマーズ ガイド』の第 21 章を参照してください。 

Microsoft Mobile Devices Web サイトの次の資料も参照してください。 
"Assign an Icon to an eMbedded Visual Basic Application" 
http://www.microsoft.com/pocketpc/stepbystep/vbicon.asp (http://www.microsoft.com/pocketpc/stepbystep/vbicon.asp)
 先頭へ戻る 

関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 268309 (http://support.microsoft.com/kb/268309/EN-US/) (最終更新日 2001-05-21) をもとに作成したものです。 

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。 

--------------------------------ここまで----------------------------------

【見にくいのでまとめ】
(1).inf ファイルを開き
a. [DefaultInstall] セクションで、次のように CEShortcuts の値を
"Shortcuts" から "AddlShortcut" に変更。
[DefaultInstall]
CopyFiles=Files.App, Files.Windows
CEShortcuts=AddlShortcut

b. 新しい [AddlShortcut] セクションを追加する。
[AddlShortcut]
%AppName%,0,"StubLauncher.exe"
【注意】ここは作成したVBファイルの名前の拡張子をexeに変えたものを書く。
もし Test.vb なら Test.exe など

c. [DestinationDirs] セクションに次の行を追加する。
AddlShortcut=,%CE2%\スタート メニュー\プログラム

.inf ファイルを保存して閉じる。

(2)Readme.txt を開き、記載されているコマンド ラインを「"」を含めてすべてコピーし、「スタート」「ファイル名を指定して実行」のテキストボックスにペーストしてOKを押す

(3)CD1 ディレクトリにあった元の .cab ファイルを新しくできた .cab ファイルで置きかえる。新しい.cabファイルは.inf ファイルやReadme.txtファイルと同じ所にできる。


【3】VB以外のファイルも起動できるようにする
少し考えれば解る事ですが、同じ方法でワードやHTMLファイルも起動できるはずです。
よく見る文書などはランチャーに登録しておけば探す手間が省けますが、VBと同じ理由でアイコンは全部同じです。
というわけで作ったのが SimpleLaunch2.exe です。
右クリックで対象をファイルに保存をしてください。
SimpleLaunch2.exe
使い方を説明します。
動作は更に簡単で自分の名前から最後の .exe を取り除いてそれを実行するだけです。
例えば、あるフォルダーにある Test.vb というeMbedded VBで作ったソフトを起動しければファイル名を Test.vb.exe とします。
ポケットワードのファイル Hello.psw を起動したいならファイル名は Hello.psw.exe です。
アイコンの変更の仕方は上と同じです。
なおWindowsはデフォルトでは拡張子は表示されませんが、ここでは全て表示されるように設定されていることを前提として書いています。


VBTOPに戻る