by ノッチ » 2006年5月29日(月) 17:48
> > > 出来たら、埋め込んだEXEの実行方法も。
> > 実行ファイルに実行ファイルを埋め込むことはできるんですけど、埋め込んだ実行ファイルの実行方法は分かりません...。
> ・・・・バタッ って感じですね(笑)
> やっぱり、無理なんですかね?
おもしろそうなので試してみたらうまくいきました。
まずは
http://angusj.com/resourcehacker/
ここのページの下のほうにあるJapaneseからResourceHackerをGetする。
でもって、新規のabpファイルに
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
#STRICT
Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hModule As HANDLE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function LoadResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As HGLOBAL
Declare Function LockResource Lib "kernel32" (hResData As HGLOBAL) As VoidPtr
Const RT_RCDATA=10 'ユーザ定義のリソース
Const IDR_TEST=1 'リソースID 適当に変更してください
'↓##### リソース確認用 #####↓
Const RESOURCE_SIZE=558 '追加するリソースのサイズファイルに書き出さなければ必要なし
Const ResourceFileName="Resource.test"'書き出すファイル名
'↑##### リソース確認用 #####↑
Dim hRes As HANDLE
Dim hGlobal As HGLOBAL
Dim pRes As VoidPtr
Dim hFile As HANDLE
Dim Written As DWord
'リソース検索
hRes=FindResource(0,IDR_TEST As BytePtr,RT_RCDATA As BytePtr)
'リソース読み込み
hGlobal=LoadResource(0,hRes)
'リソースのアドレス取得
pRes=LockResource(hGlobal)
'以後pResのアドレスにアクセスすることで使用できます
'使用後の開放も必要なし
'↓##### リソース確認用 #####↓
hFile=CreateFile(ResourceFileName,GENERIC_WRITE,0,ByVal 0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
WriteFile(hFile,pRes,RESOURCE_SIZE,VarPtr(Written),ByVal 0)
SetEndOfFile(hFile)
CloseHandle(hFile)
'↑##### リソース確認用 #####↑
End
上記コードをコピペ後、リリースコンパイルで実行ファイル作成。
ResourceHackerから作成した実行ファイルを読み込む。
アクション->新しいリソースを追加する "リソースを含むファイルを開く" を選択し、
追加したいファイルを選択。
リソースの種類に数字の10、リソース名に数字の1(この辺はそれぞれ適当に)
を入力しリソースを追加する。
追加したら保存をして実行ファイルを実行するだけ。
上記のコードを変更しないで実行すると"Resource.test"というファイルが作成されます。
実行ファイルをリソースに入れたのであれば****.exeにResourceFileNameを
変更して、Execを呼び出すなりするだけでインストーラ的なものが作れます。
こんな感じでどうですか?
> > > 出来たら、埋め込んだEXEの実行方法も。
> > 実行ファイルに実行ファイルを埋め込むことはできるんですけど、埋め込んだ実行ファイルの実行方法は分かりません...。
> ・・・・バタッ って感じですね(笑)
> やっぱり、無理なんですかね?
おもしろそうなので試してみたらうまくいきました。
まずは
[url]http://angusj.com/resourcehacker/[/url]
ここのページの下のほうにあるJapaneseからResourceHackerをGetする。
でもって、新規のabpファイルに
[hide][code]#STRICT
Declare Function FindResource Lib "kernel32" Alias "FindResourceA" (hModule As HANDLE,lpName As BytePtr,lpType As BytePtr) As HANDLE
Declare Function LoadResource Lib "kernel32" (hModule As HANDLE,hResInfo As HANDLE) As HGLOBAL
Declare Function LockResource Lib "kernel32" (hResData As HGLOBAL) As VoidPtr
Const RT_RCDATA=10 'ユーザ定義のリソース
Const IDR_TEST=1 'リソースID 適当に変更してください
'↓##### リソース確認用 #####↓
Const RESOURCE_SIZE=558 '追加するリソースのサイズファイルに書き出さなければ必要なし
Const ResourceFileName="Resource.test"'書き出すファイル名
'↑##### リソース確認用 #####↑
Dim hRes As HANDLE
Dim hGlobal As HGLOBAL
Dim pRes As VoidPtr
Dim hFile As HANDLE
Dim Written As DWord
'リソース検索
hRes=FindResource(0,IDR_TEST As BytePtr,RT_RCDATA As BytePtr)
'リソース読み込み
hGlobal=LoadResource(0,hRes)
'リソースのアドレス取得
pRes=LockResource(hGlobal)
'以後pResのアドレスにアクセスすることで使用できます
'使用後の開放も必要なし
'↓##### リソース確認用 #####↓
hFile=CreateFile(ResourceFileName,GENERIC_WRITE,0,ByVal 0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
WriteFile(hFile,pRes,RESOURCE_SIZE,VarPtr(Written),ByVal 0)
SetEndOfFile(hFile)
CloseHandle(hFile)
'↑##### リソース確認用 #####↑
End[/code][/hide]
上記コードをコピペ後、リリースコンパイルで実行ファイル作成。
ResourceHackerから作成した実行ファイルを読み込む。
アクション->新しいリソースを追加する "リソースを含むファイルを開く" を選択し、
追加したいファイルを選択。
リソースの種類に数字の10、リソース名に数字の1(この辺はそれぞれ適当に)
を入力しリソースを追加する。
追加したら保存をして実行ファイルを実行するだけ。
上記のコードを変更しないで実行すると"Resource.test"というファイルが作成されます。
実行ファイルをリソースに入れたのであれば****.exeにResourceFileNameを
変更して、Execを呼び出すなりするだけでインストーラ的なものが作れます。
こんな感じでどうですか?