自己解凍書庫の作り方
Posted: 2006年4月06日(木) 09:46
誰か、自己解凍書庫の作り方を教えてください。
コード: 全て選択
Function GetEXESize(FileName As String) As DWord
Dim hFile As HANDLE,TI As Word,Base As Word,Dummy As DWord
Dim TB As Byte,i As DWord,j As DWord
'ファイルチェック
hFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,ByVal NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0)
If hFile=INVALID_HANDLE_VALUE Then
GetEXESize=0
Exit Function
End If
'MZヘッダを確認
ReadFile(hFile,VarPtr(TI),SizeOf(Word),VarPtr(Dummy),ByVal NULL)
If TI<>&H5A4D Then '「MZ」か?
CloseHandle(hFile)
GetEXESize=0
Exit Function
End If
'PEヘッダを確認
SetFilePointer64(hFile,&H3C,FILE_BEGIN)
ReadFile(hFile,VarPtr(TI),SizeOf(Word),VarPtr(Dummy),ByVal NULL)
Base=TI
SetFilePointer64(hFile,TI,FILE_BEGIN)
ReadFile(hFile,VarPtr(TI),SizeOf(Word),VarPtr(Dummy),ByVal NULL)
If TI<>&H4550 Then
CloseHandle(hFile)
GetEXESize=0
Exit Function
End If
SetFilePointer64(hFile,Base+6,FILE_BEGIN)
ReadFile(hFile,VarPtr(TB),SizeOf(Byte),VarPtr(Dummy),ByVal NULL)
SetFilePointer64(hFile,Base+(TB-1)*40+&HF8+16,FILE_BEGIN)
ReadFile(hFile,VarPtr(i),SizeOf(DWord),VarPtr(Dummy),ByVal NULL)
ReadFile(hFile,VarPtr(j),SizeOf(DWord),VarPtr(Dummy),ByVal NULL)
CloseHandle(hFile)
GetEXESize=i+j
End Function