Seite 2 von 2

Verfasst: 10.09.2008 14:19
von Knight_Rider_2000
hast du auch schonmal die datei mit dem resHack geoeffnet?
bei mir sieht es so aus:

Code: Alles auswählen

1 VERSIONINFO
FILEVERSION 6,0,6000,16549
PRODUCTVERSION 6,0,6000,16549
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "040904B0"
	{
		VALUE "CompanyName", "Test Company"
		VALUE "FileDescription", "Test FileDescription"
		VALUE "FileVersion", "Test FileVersion"
		VALUE "ProductName", "Test Productname"
		VALUE "ProductVersion", "Test ProductVersion"
		VALUE "InternalName", ""
		VALUE "LegalCopyright", "Test LegalCopyright"
		VALUE "OriginalFilename", "Test OriginalFilename"
	}
}

Verfasst: 10.09.2008 17:14
von Knight_Rider_2000
Und einige weitere Uebersetzungsfehler korrigiert:

Code: Alles auswählen

;Dies Ist der Hauptquellcode um bestehende Versionsinfos in Executables zu aendern.
;Copyright (C) 2007 by Christian Seysen and Felix Kuberjans(C++)
;Website: http://www.desaster-games.com
#RT_VERSION = 16

Structure VS_VERSIONINFO
  wLength.w
  wValueLength.w
  wType.w
  szKey.w[16]
  Padding1.w
  Value.VS_FIXEDFILEINFO
  Padding2.w
  Children.w
EndStructure

Structure VarFileInfo
  wLength.w; 
  wValueLength.w; 
  wType.w; 
  szKey.w[15]; 
  Padding.w; 
  Children.w; 
EndStructure

Structure StringFileInfo
 CompanyName.s
 Productname.s
 ProductVersion.s
 FileVersion.s
 FileDescription.s
 InternalName.s
 OriginalFilename.s
 LegalCopyright.s
 Website.s
EndStructure

Procedure.w MAKELANGID(p.w, s.w)
  ProcedureReturn (s << 10) | p
EndProcedure

Macro MAKEINTRESOURCE(I)
  (I)
EndMacro

Procedure ErrorHandler(Error.s)
 MessageRequester("ERROR",Error.s,#MB_OK | #MB_ICONEXCLAMATION)
EndProcedure

Procedure WriteStringFileInfo(pStringName.s,pValue.s,Buffer2.l,Coursor.l)
bPadding1.b
dwPadding2.l
dwStringNameLength = Len(pStringName);
dwValueLength = Len(pValue);
dwSize.w

If dwValueLength % 2 And Not dwStringNameLength % 2
 bPadding1 = #False;
Else
 bPadding1 = #True;
EndIf


dwSize=10+(dwStringNameLength + dwValueLength + bPadding1) * 2

dwPadding2 = dwSize % SizeOf(Long);

ReAllocateMemory(Buffer2,Coursor + dwSize + dwPadding2)

;1.laenge gesamt
PokeW(Buffer2+Coursor,dwSize) : Coursor=Coursor+2
;2.laenge inhaltslaenge
PokeW(Buffer2+Coursor,dwValueLength+1):Coursor=Coursor+2

;write a 1 ( 01 00)
PokeW(Buffer2+Coursor,1):Coursor=Coursor+2

;StringName
report1$=""
For StringName = 1 To dwStringNameLength
 PokeW(Buffer2+Coursor,Asc(Mid(pStringName,StringName,1))):Coursor=Coursor+2
 report1$=(report1$+Mid(pStringName,StringName,1))
Next
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2

If (bPadding1)
 PokeW(Buffer2+Coursor,0):Coursor=Coursor+2
EndIf

;Value
report2$=""
For ValueName = 1 To dwValueLength
 PokeW(Buffer2+Coursor,Asc(Mid(pValue,ValueName,1))):Coursor=Coursor+2
 report2$=(report2$+Mid(pValue,ValueName,1))
Next
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2

If (dwPadding2)
 ZeroMemory_(Buffer2+Coursor,dwPadding2)
 Coursor=Coursor+dwPadding2
EndIf
ProcedureReturn Coursor
EndProcedure

Procedure ChangeVersionData(pExe.s,*Information.StringFileInfo)

;Laden der Exe und kopieren der Resource in den Buffer1
hExe = LoadLibrary_(pExe); 
If hExe = #Null
    ErrorHandler("Could not load exe."); 
    Goto Except
EndIf
 
hRes = FindResource_(hExe, MAKEINTRESOURCE(#VS_VERSION_INFO), #RT_VERSION)
If hRes = #Null 
    ErrorHandler("Could not locate dialog box."); 
    Goto Except
EndIf 


hResLoad = LoadResource_(hExe, hRes); 
lsz=SizeofResource_(hExe, hRes)
If hResLoad = #Null
    ErrorHandler("Could not load dialog box."); 
    Goto Except
EndIf
 
lpResLock = LockResource_(hResLoad); 
If lpResLock = #Null 
    ErrorHandler("Could not lock dialog box."); 
    Goto Except
EndIf

Buffer1=AllocateMemory(lsz); pointer zu den resource Daten 
MoveMemory(lpResLock, Buffer1, lsz)

;Erstelle Buffer2 fuer unsere neue Resource
Buffer2=AllocateMemory(152)

;#####Create VERSIONINFO#####
;public class Versionsinfo{
;#define SizeOfResource
PokeW(Buffer2,MemorySize(Buffer2))
;kopiere vorhandenes Matterial
For Coursor=2 To 90 Step 2
 PokeW(Buffer2+Coursor,PeekW(Buffer1+Coursor))
Next Coursor
;einige Mathematische Vorkehrungen
;Laenge-160
PokeW(Buffer2+Coursor,(MemorySize(Buffer2)-160)) : Coursor=Coursor+2
;Kopiere
CopyMemory(Buffer1+Coursor,Buffer2+Coursor,34) : Coursor=Coursor+34
;Laenge-196
PokeW(Buffer2+Coursor,(MemorySize(Buffer2)-196)) : Coursor=Coursor+2
;Kopiere
CopyMemory(Buffer1+Coursor,Buffer2+Coursor,20) : Coursor=Coursor+20
;Null
PokeW(Buffer2+Coursor,0):Coursor=Coursor+2



;Schreibe die Informationen in die exe
Coursor=WriteStringFileInfo("CompanyName",*Information\CompanyName,Buffer2,Coursor)
Coursor=WriteStringFileInfo("FileDescription",*Information\FileDescription,Buffer2,Coursor)
Coursor=WriteStringFileInfo("FileVersion",*Information\FileVersion,Buffer2,Coursor)
Coursor=WriteStringFileInfo("InternalName",*Information\InternalName,Buffer2,Coursor)
Coursor=WriteStringFileInfo("LegalCopyright",*Information\LegalCopyright,Buffer2,Coursor)
Coursor=WriteStringFileInfo("OriginalFilename",*Information\OriginalFilename,Buffer2,Coursor)
Coursor=WriteStringFileInfo("ProductName",*Information\Productname,Buffer2,Coursor)
Coursor=WriteStringFileInfo("ProductVersion",*Information\ProductVersion,Buffer2,Coursor)

;
ReAllocateMemory(Buffer2,Coursor+68)
CopyMemory(Buffer1+lsz-68,Buffer2+Coursor,68):Coursor=Coursor+68;68


;Laenge korrigieren
PokeW(Buffer2,MemorySize(Buffer2))
PokeW(Buffer2+92,(MemorySize(Buffer2)-160))
PokeW(Buffer2+128,(MemorySize(Buffer2)-196))
;#####Finished neue Resource#####

FreeResource_(hResLoad)
GetModuleFileName_(hExe,pExe,#MAX_PATH)
FreeLibrary_(hExe)

;Beginne mit dem schreiben der Versionsinfos
hUpdateRes = BeginUpdateResource_(pExe, #False); 
If hUpdateRes = #Null
    ErrorHandler("Could not open file for writing."); 
    Goto Except
EndIf

If Not UpdateResource_(hUpdateRes, #RT_VERSION, MAKEINTRESOURCE(#VS_VERSION_INFO), MAKELANGID(#LANG_ENGLISH, #SUBLANG_ENGLISH_US), Buffer2, MemorySize(Buffer2))
    ErrorHandler("Could not add resource."); 
    Goto Except
EndIf


If Not  EndUpdateResource_(hUpdateRes, #False)
    ErrorHandler("Could not write changes to file."); 
    Goto Except
EndIf

;Wenn alles geklappt hat bekommen wir die Groesse in Bytes zurueck
ProcedureReturn Coursor

;Andernfalls -1
Except:
ProcedureReturn -1

EndProcedure

;Und nun testen wir es:

NewFileversion.StringFileInfo
NewFileversion\CompanyName="Test Company"
NewFileversion\Productname="Test Productname"
NewFileversion\ProductVersion="Test ProductVersion"
NewFileversion\FileVersion="Test FileVersion"
NewFileversion\FileDescription="Test FileDescription"
NewFileversion\InternalName="Test InternalName"
NewFileversion\OriginalFilename="Test OriginalFilename"
NewFileversion\LegalCopyright="Test LegalCopyright"
NewFileversion\Website="Test Website"

CopyFile("C:\WatchNow\test.exe","C:\Test.exe")

change=ChangeVersionData("C:\Test.exe",NewFileversion)
If change
 MessageRequester("Info","Suchsess")
Else
 MessageRequester("Info","Failed")
EndIf
Ressource Hacker sagt dazu:

Code: Alles auswählen

1 VERSIONINFO
FILEVERSION 6,0,6000,16549
PRODUCTVERSION 6,0,6000,16549
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
	BLOCK "040904B0"
	{
		VALUE "CompanyName", "Test Company"
		VALUE "FileDescription", "Test FileDescription"
		VALUE "FileVersion", "Test FileVersion"
		VALUE "InternalName", "Test InternalName"
		VALUE "LegalCopyright", "Test LegalCopyright"
		VALUE "OriginalFilename", "Test OriginalFilename"
		VALUE "ProductName", "Test Productname"
		VALUE "ProductVersion", "Test ProductVersion"
	}
}

BLOCK "VarFileInfo"
{
	VALUE "Translation", 0x0409 0x04B0
}
}
Also mir sagt er damit dass es nun funzt

Verfasst: 13.09.2008 13:31
von X0r
Dir kann er viel sagen. Was sagt dir aber die Exe?

Verfasst: 13.09.2008 16:59
von Knight_Rider_2000
X0r hat geschrieben:Dir kann er viel sagen. Was sagt dir aber die Exe?
Die tuts sowieso

Re: Exe Versions Infos ändern.

Verfasst: 02.08.2011 00:11
von kevv
Die FILEVERSION wird nicht verändert
Weis einer wieso?