Jump to content

example Updating Resources


wolf9228
 Share

Recommended Posts

Where mistake

UpdatDresources

#Include <WinAPI.au3>
;http://msdn2.microsoft.com/en-us/library/ms648008(VS.85).aspx

;The following example copies a dialog box resource from one executable file, Hand.exe, to another, Foot.exe, by following these steps: 
;Use the LoadLibrary function to load the executable file Hand.exe. 
;Use the FindResource and LoadResource functions to locate and load the dialog box resource. 
;Use the LockResource function to retrieve a pointer to the dialog box resource data. 
;Use the BeginUpdateResource function to open an update handle to Foot.exe. 
;Use the UpdateResource function to copy the dialog box resource from Hand.exe to Foot.exe. 
;Use the EndUpdateResource function to complete the update. 
;The following code implements these steps.
Global Const $RT_CURSOR = 1
Global Const $RT_BITMAP = 2
Global Const $RT_ICON = 3
Global Const $RT_MENU = 4
Global Const $RT_DIALOG = 5
Global Const $RT_STRING = 6
Global Const $RT_FONTDIR = 7
Global Const $RT_FONT = 8
Global Const $RT_ACCELERATORS = 9
Global Const $RT_RCDATA = 10
Global Const $RT_MESSAGETABLE = 11
Global Const $RT_GROUP_CURSOR = 12
Global Const $RT_GROUP_ICON = 14
Global Const $RT_VERSION = 16
Global Const $RT_ANICURSOR = 21
Global Const $RT_ANIICON = 22
Global Const $RT_HTML = 23
Global Const $RT_MANIFEST = 24
Global Const $SND_RESOURCE = 0x00040004
Global Const $SND_SYNC = 0x0
Global Const $SND_ASYNC = 0x1
Global Const $SND_LOOP = 0x8
Global Const $SND_NOSTOP = 0x10
Global Const $SND_NOWAIT = 0x2000
Global Const $SND_PURGE = 0x40
Func Process_Updating_Resources($pFileName = "Hand.exe" _
,$pFileNameUpdat = "Foot.exe" _
,$ResName = "Dialog" _
, $ResType = $RT_DIALOG _
,$LANG_NEUTRAL = 0409 _;English_United_States
,$SUBLANG_NEUTRAL = 0409);English_United_States
;Load the .EXE file that contains the dialog box  you want to copy. 
$hExe = _WinAPI_LoadLibrary($pFileName)
if ($hExe = 0) Then 
MsgBox(0,"LoadLibrary", "Could not load exe.")
Return 0
ENDIF 

 
;Locate the dialog box  resource in the .EXE file. 
$hRes = FindResource($hExe, $ResName, $ResType)

if @error then 
MsgBox(0,"FindResource", "Could not locate dialog box.")
Return 0
ENDIF 
 
;Load the dialog box  into global memory. 
$hResLoad = LoadResource($hExe, $hRes)
if @error then 
MsgBox(0,"LoadResource", "Could not load dialog box.")
Return 0
ENDIF 

;Lock the dialog box  into global memory. 
$lpResLock = LockResource($hResLoad)
if @error Then 
MsgBox(0,"LockResource", "Could not lock dialog box .")
Return 0
ENDIF 

;Open the file to which you want to add the dialog box  resource. 
$hUpdateRes = BeginUpdateResource($pFileNameUpdat, False)
if @error then 
MsgBox(0,"BeginUpdateResource", "Could not open file for writing.")
Return 0
ENDIF 


$MAKELANGID = _WinAPI_MAKELANGID($LANG_NEUTRAL, $SUBLANG_NEUTRAL)
;Add the dialog box  resource to the update list. 
$result = UpdateResource($hUpdateRes, _;update resource handle 
     $ResType, _            ;change dialog box  resource 
     $ResName, _        ;dialog box  name 
     $MAKELANGID, _          ;neutral language
     $lpResLock, _      ;ptr to resource info 
     SizeofResource($hExe, $hRes)); // size of resource info. 

if ($result == FALSE) then
MsgBox(0,"UpdateResource", "Could not add resource.")
Return 0
ENDIF 
 
;Write changes to FOOT.EXE and then close it. 
if (EndUpdateResource($hUpdateRes,True)) Then 
MsgBox(0,"EndUpdateResource", "Could not End Update Resource.")
ENDIF 

;Clean up. 

if Not (_WinAPI_FreeLibrary($hExe)) Then 
MsgBox(0,"FreeLibrary", "Could not free executable.")
Return 0
ELSE 
Return 1
ENDIF 
EndFunc





Func FindResource($hModule , _
    $lpName , _
    $lpType)
;http://msdn2.microsoft.com/en-us/library/ms648042(VS.85).aspx
$Callresult = DllCall("kernel32.dll" ,"int", "FindResourceA", "hwnd", $hModule, "str", $lpName _
,"long", $lpType)
MsgBox(0,"FindResourceA", _WinAPI_GetLastErrorMessage())
Return $Callresult[0]
EndFunc

Func LoadResource($hModule, _
    $hResInfo)
;http://msdn2.microsoft.com/en-us/library/ms648046(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "int", "LoadResource", "int", $hModule, "int", $hResInfo)
MsgBox(0,"LoadResource", _WinAPI_GetLastErrorMessage())
Return $Callresult[0]
EndFunc


Func LockResource($hResData)
;http://msdn2.microsoft.com/en-us/library/ms648047(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "int", "LockResource", "int", $hResData)
MsgBox(0,"LockResource", _WinAPI_GetLastErrorMessage())
Return $Callresult[0]
EndFunc

Func SizeofResource($hModule, _
    $hResInfo)
;http://msdn2.microsoft.com/en-us/library/ms648048(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hModule, "int", $hResInfo)
MsgBox(0,"SizeofResource", _WinAPI_GetLastErrorMessage())
Return $Callresult[0]
EndFunc

Func BeginUpdateResource($pFileName , _
$bDeleteExistingResources)
;http://msdn2.microsoft.com/en-us/library/ms648030(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "int", "BeginUpdateResource", "str", $pFileName, "int", _
$bDeleteExistingResources)
Return $Callresult[0]
EndFunc


Func UpdateResource($hUpdate, _
                $lpType, _
                $lpName, _
                $wLanguage, _
                $lpData, _
                $cbData )
;http://msdn2.microsoft.com/en-us/library/ms648049(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "int", "UpdateResource","hwnd",$hUpdate, "str", $lpType, "str", $lpName _
,"short",$wLanguage,"prt",$lpData,"DWORD",$cbData)
MsgBox(0,"UpdateResource", _WinAPI_GetLastErrorMessage())
Return $Callresult
EndFunc

Func EndUpdateResource($hUpdate, _
                      $fDiscard)
;http://msdn2.microsoft.com/en-us/library/ms648032(VS.85).aspx
$Callresult = DllCall("kernel32.dll", "int", "EndUpdateResource","hwnd",$hUpdate,"int",$fDiscard)
MsgBox(0,"EndUpdateResource", _WinAPI_GetLastErrorMessage())
Return $Callresult[0]
EndFunc

Hand.exe

#AutoIt3Wrapper_useupx=n
#AutoIt3Wrapper_run_after="AddRes.exe "%out%""
#include <GUIConstants.au3>
#Include "resources.au3"
$TXT = _ResourceGetAsString("AboutBox", $RT_RCDATA,0)
$TXT = StringSplit($TXT,@CRLF)
$Form1 = GUICreate("AboutBox Hand.exe", 324, 234, 210, 161)
$GroupBox1 = GUICtrlCreateGroup("", 8, 8, 305, 185)
$Image1 = GUICtrlCreatePic("", 16, 24, 105, 97)
$Label1 = GUICtrlCreateLabel("Product Name", 152, 24, 72, 17, $WS_GROUP)
$Label2 = GUICtrlCreateLabel("Version " & $TXT[3], 152, 48, 300, 17, $WS_GROUP)
$Label4 = GUICtrlCreateLabel("Comments", 16, 160, 53, 17, $WS_GROUP)
$Label3 = GUICtrlCreateLabel("Copyright " & $TXT[1], 16, 136, 300, 17, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button2 = GUICtrlCreateButton("Chk_Update",152, 100, 75, 25 )
$Button1 = GUICtrlCreateButton("&ok", 112, 208, 75, 25)
GUISetState(@SW_SHOW)
_ResourceSetImageToCtrl($Image1, "AboutBoximage", 2)
While 1
    $nMsg = GUIGetMsg()
    Select 
        Case $nMsg = $GUI_EVENT_CLOSE OR $nMsg = $Button1
            Exit
        Case $nMsg = $Button2
        MsgBox(0,"Hand.exe","thes Box For Hand.exe" & @CRLF & "Version 1.1.1.0" _
        & @CRLF & "Copyright Wolf Microsoft" )
    EndSelect
WEnd

TXTBox.txt ===> Hand.exe

Wolf Microsoft
1.1.1.0

Foot.exe

#AutoIt3Wrapper_useupx=n
#AutoIt3Wrapper_run_after="AddRes.exe "%out%""
#include <GUIConstants.au3>
#Include "resources.au3"
$TXT = _ResourceGetAsString("AboutBox", $RT_RCDATA,0)
$TXT = StringSplit($TXT,@CRLF)
$Form1 = GUICreate("AboutBox Foot.exe", 324, 234, 210, 161)
$GroupBox1 = GUICtrlCreateGroup("", 8, 8, 305, 185)
$Image1 = GUICtrlCreatePic("", 16, 24, 105, 97)
$Label1 = GUICtrlCreateLabel("Product Name", 152, 24, 72, 17, $WS_GROUP)
$Label2 = GUICtrlCreateLabel("Version " & $TXT[3], 152, 48, 300, 17, $WS_GROUP)
$Label4 = GUICtrlCreateLabel("Comments", 16, 160, 53, 17, $WS_GROUP)
$Label3 = GUICtrlCreateLabel("Copyright " & $TXT[1], 16, 136, 300, 17, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button2 = GUICtrlCreateButton("Chk_Update",152, 100, 75, 25 )
$Button1 = GUICtrlCreateButton("&ok", 112, 208, 75, 25)
GUISetState(@SW_SHOW)
_ResourceSetImageToCtrl($Image1, "AboutBoximage", 2)
While 1
    $nMsg = GUIGetMsg()
    Select 
        Case $nMsg = $GUI_EVENT_CLOSE OR $nMsg = $Button1
            Exit
        Case $nMsg = $Button2
        MsgBox(0,"Foot.exe","thes Box For Foot.exe" & @CRLF & "Version 0.0.0.0" _
        & @CRLF & "Copyright Bill Microsoft" )
    EndSelect
WEnd

TXTBox.txt ===> Foot.exe

Bill Microsoft
0.0.0.0

AddRes.exe

$ResName = "AboutBox"
$ResType = "RCDATA"
$COMMAND = "ResHacker.exe -addoverwrite AU3.EXE, AU3.EXE, TXTBox.TXT," & $ResType & ", " & $ResName & ", 0"
IF Run($COMMAND ,"",@SW_HIDE) THEN _
MsgBox(0,"err", "AddRes.exe Done1")

$ResName = "AboutBoximage"
$ResType = "BITMAP"
$COMMAND = "ResHacker.exe -addoverwrite AU3.EXE, AU3.EXE, AboutBoxImage.bmp," & $ResType & ", " & $ResName & ", 0"
IF Run($COMMAND ,"",@SW_HIDE) THEN _
MsgBox(0,"err", "AddRes.exe Done2")

STARTUpdatDresources

#include "UpdatDresources.AU3"
Global $pFileName = @ScriptDir & "\Wolf\Hand.exe"
Global $pFileNameUpdat = @ScriptDir & "\Bill\Foot.exe"
FileCopy($pFileNameUpdat, @ScriptDir & "\UpdatFoot.exe",1)
FileCopy($pFileName, @ScriptDir & "\Hand.exe",1)
Sleep(3000)
Global $pFileNameUpdat = "UpdatFoot.exe"
Global $pFileName = "Hand.exe"
Process_Updating_Resources($pFileName _
,$pFileNameUpdat _
,"AboutBox" _
,$RT_RCDATA _
,0409 _
,0409)

UpdatRes.zip

http://www.2shared.com/file/2997750/7387c7ce/UpdatRes.html

Edited by wolf9228

صرح السماء كان هنا

 

Link to comment
Share on other sites

What is the mistake? I haven't even tried running the code due to the amount of scripts I would have to arrange...

Edit: I just noticed this is in Example Scripts... So maybe "Where mistake" isn't supposed to mean "Where is the mistake?" like I assumed.

Edited by Achilles
My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list]
Link to comment
Share on other sites

What is the mistake? I haven't even tried running the code due to the amount of scripts I would have to arrange...

Edit: I just noticed this is in Example Scripts... So maybe "Where mistake" isn't supposed to mean "Where is the mistake?" like I assumed.

http://www.2shared.com/file/2997750/7387c7ce/UpdatRes.html

Edited by wolf9228

صرح السماء كان هنا

 

Link to comment
Share on other sites

Hi

any possibilities of a function that reads the language of the resources before patching ? like bitmap 101 has 4019 and icon 2 has neutral.

thanks

HJW

EDIT: EnumResLangProc Function should be it. Any know how how to setup this in autoit ?

Edited by HJW
Link to comment
Share on other sites

Hi

any possibilities of a function that reads the language of the resources before patching ? like bitmap 101 has 4019 and icon 2 has neutral.

thanks

HJW

EDIT: EnumResLangProc Function should be it. Any know how how to setup this in autoit ?

All the files on this link

http://www.2shared.com/file/3032894/2f15b909/Res_Update.html

Res_Update.au3

#include-once
#Include <WinAPI.au3>
Global Const $Afrikaans = 1078 
Global Const $Albanian = 1052 
Global Const $Arabic_Algeria = 5121 
Global Const $Arabic_Bahrain = 15361 
Global Const $Arabic_Egypt = 3073 
Global Const $Arabic_Iraq = 2049 
Global Const $Arabic_Jordan = 11265 
Global Const $Arabic_Kuwait = 13313 
Global Const $Arabic_Lebanon = 12289 
Global Const $Arabic_Libya = 4097 
Global Const $Arabic_Morocco = 6145 
Global Const $Arabic_Oman = 8193 
Global Const $Arabic_Qatar = 16385 
Global Const $Arabic_Saudi_Arabia = 1025 
Global Const $Arabic_Syria = 10241 
Global Const $Arabic_Tunisia = 7169 
Global Const $Arabic_U_A_E = 14337 
Global Const $Arabic_Yemen = 9217 
Global Const $Basque = 1069 
Global Const $Belarusian = 1059 
Global Const $Bulgarian = 1026 
Global Const $Catalan = 1027 
Global Const $Chinese_Hong_Kong_SAR = 3076 
Global Const $Chinese_PRC = 2052 
Global Const $Chinese_Singapore = 4100 
Global Const $Chinese_Taiwan = 1028 
Global Const $Croatian = 1050 
Global Const $Czech = 1029 
Global Const $Danish = 1030 
Global Const $Dutch = 1043 
Global Const $Dutch_Belgium = 2067
Global Const $English_Australia = 3081 
Global Const $English_Belize = 10249 
Global Const $English_Canada = 4105 
Global Const $English_Ireland = 6153 
Global Const $English_Jamaica = 8201 
Global Const $English_New_Zealand = 5129 
Global Const $English_South_Africa = 7177 
Global Const $English_Trinidad = 11273 
Global Const $English_United_Kingdom = 2057 
Global Const $English_United_States = 1033 
Global Const $Estonian = 1061 
Global Const $Faeroese = 1080 
Global Const $Farsi = 1065 
Global Const $Finnish = 1035 
Global Const $French_Standard = 1036 
Global Const $French_Belgium = 2060 
Global Const $French_Canada = 3084 
Global Const $French_Luxembourg = 5132 
Global Const $French_Switzerland = 4108 
Global Const $Gaelic_Scotland = 1084 
Global Const $German_Standard = 1031 
Global Const $German_Austrian = 3079 
Global Const $German_Liechtenstein = 5127 
Global Const $German_Luxembourg = 4103 
Global Const $German_Switzerland = 2055 
Global Const $Greek = 1032 
Global Const $Hebrew = 1037 
Global Const $Hindi = 1081 
Global Const $Hungarian = 1038
Global Const $Icelandic = 1039 
Global Const $Indonesian = 1057 
Global Const $Italian_Standard = 1040 
Global Const $Italian_Switzerland = 2064 
Global Const $Japanese = 1041 
Global Const $Korean = 1042 
Global Const $Latvian = 1062 
Global Const $Lithuanian = 1063 
Global Const $Macedonian_FYROM = 1071 
Global Const $Malay_Malaysia = 1086 
Global Const $Maltese = 1082 
Global Const $Norwegian_Bokml = 1044 
Global Const $Polish = 1045 
Global Const $Portuguese_Brazil = 1046 
Global Const $Portuguese_Portugal = 2070 
Global Const $Raeto_Romance = 1047 
Global Const $Romanian = 1048 
Global Const $Romanian_Moldova = 2072 
Global Const $Russian = 1049 
Global Const $Russian_Moldova = 2073 
Global Const $Serbian_Cyrillic = 3098 
Global Const $Setsuana = 1074 
Global Const $Slovak = 1051 
Global Const $Slovenian = 1060 
Global Const $Sorbian = 1070
Global Const $Spanish_Argentina = 11274 
Global Const $Spanish_Bolivia = 16394 
Global Const $Spanish_Chile = 13322 
Global Const $Spanish_Columbia = 9226 
Global Const $Spanish_Costa_Rica = 5130 
Global Const $Spanish_Dominican_Republic = 7178 
Global Const $Spanish_Ecuador = 12298 
Global Const $Spanish_El_Salvador = 17418 
Global Const $Spanish_Guatemala = 4106 
Global Const $Spanish_Honduras = 18442 
Global Const $Spanish_Mexico = 2058 
Global Const $Spanish_Nicaragua = 19466 
Global Const $Spanish_Panama = 6154 
Global Const $Spanish_Paraguay = 15370 
Global Const $Spanish_Peru = 10250 
Global Const $Spanish_Puerto_Rico = 20490 
Global Const $Spanish_Spain = 1034 
Global Const $Spanish_Uruguay = 14346 
Global Const $Spanish_Venezuela = 8202 
Global Const $Sutu = 1072 
Global Const $Swedish = 1053 
Global Const $Swedish_Finland = 2077 
Global Const $Thai = 1054 
Global Const $Turkish = 1055 
Global Const $Tsonga = 1073 
Global Const $Ukranian = 1058 
Global Const $Urdu_Pakistan = 1056 
Global Const $Vietnamese = 1066 
Global Const $Xhosa = 1076 
Global Const $Yiddish = 1085 
Global Const $Zulu = 1077

Global Const $RT_CURSOR = 1
Global Const $RT_BITMAP = 2
Global Const $RT_ICON = 3
Global Const $RT_MENU = 4
Global Const $RT_DIALOG = 5
Global Const $RT_STRING = 6
Global Const $RT_FONTDIR = 7
Global Const $RT_FONT = 8
Global Const $RT_ACCELERATORS = 9
Global Const $RT_RCDATA = 10
Global Const $RT_MESSAGETABLE = 11
Global Const $RT_GROUP_CURSOR = 12
Global Const $RT_GROUP_ICON = 14
Global Const $RT_VERSION = 16

Global Const $RT_ANICURSOR = 21
Global Const $RT_ANIICON = 22
Global Const $RT_HTML = 23
Global Const $RT_MANIFEST = 24

Global Const $SND_RESOURCE = 0x00040004
Global Const $SND_SYNC = 0x0
Global Const $SND_ASYNC = 0x1
Global Const $SND_LOOP = 0x8
Global Const $SND_NOSTOP = 0x10 
Global Const $SND_NOWAIT = 0x2000
Global Const $SND_PURGE = 0x40

FileCopy(@ScriptDir & "\original\msgbox.exe" , @ScriptDir & "\AUTOIT.EXE",1)
_UpdateResource()
FileCopy(@ScriptDir & "\original\TapEditor.exe" , @ScriptDir & "\C++.exe",1)
_UpdateResource("C++.exe")
Func _UpdateResource($sFile = "AUTOIT.EXE",$lpType = $RT_RCDATA ,$lpName = "DATA_1", _
$wLanguage = $English_United_Kingdom,$bDiscard = False,$InpResFile = "TXT.TXT")

$hUpdate =  _BeginUpdateResource($sFile)
Local $result, $hFile, $tSize, $tBuffer, $pBuffer,$bread = 0
Select
Case $lpType = 10 OR $lpType = 16 OR $lpType = 24;RT_RCDATA, RT_VERSION and RT_MANIFEST
$hFile = _WinAPI_CreateFile($InpResFile, 2, 2)
IF @error THEN Return 0
$tSize = FileGetSize($InpResFile)
IF @error THEN Return 0
$tBuffer = DllStructCreate("char Text[" & $tSize & "]") 
IF @error THEN Return 0
$pBuffer = DllStructGetPtr($tBuffer)
IF @error THEN Return 0
_WinAPI_ReadFile($hFile, $pBuffer, FileGetSize($InpResFile), $bread, 0)
IF @error THEN Return 0
_WinAPI_CloseHandle($hFile)
IF @error THEN Return 0
$result = DllCall("kernel32.dll","int","UpdateResource", _
                                    "hwnd",$hUpdate, _
                                    "long",$lpType, _
                                    "str",$lpName, _
                                    "short",$wLanguage, _
                                    "ptr",$pBuffer, _
                                    "DWORD",$tSize)
IF @error THEN 
Return 0
Else
_EndUpdateResource($hUpdate,$bDiscard)
Return 1
EndIf
EndSelect
EndFunc


Func _BeginUpdateResource($sFile)
$aReturn = DllCall("kernel32.dll","int","BeginUpdateResource","str",$sFile,"int",False)
Return $aReturn[0]
EndFunc

Func _EndUpdateResource($hResource,$bDiscard = 0)
$result = DllCall("kernel32.dll", "int", "EndUpdateResource", "int", $hResource, "int", $bDiscard)
EndFunc

AUTOIT.EXE

Posted Image

When opening the file shows the letter

Posted Image

C++.EXE

Posted Image

the file open without errors

Posted Image

صرح السماء كان هنا

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...