Code: Alles auswählen
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1387&highlight=
; Author: Rings
; Date: 17. June 2003, Updated 23.2.2005 for PB 3.92
; *** Hexviewer for Hardisks and files ***
#Window_0 = 0
#MenuBar_2 = 0
#MENU_FileOpen = 1
#MENU_Save = 2
#MENU_HDISK_C = 3
#MENU_Search = 4
#MENU_Replace = 5
#MENU_Back = 6
#MENU_Forward = 7
#MENU_HELP=8
#PositionText=9
#StatusText=10
#DriveGadgets=100
#HexGadget=200
#AsciiGadget=62
#AdressGadget=30
#Suchen=14
#Filtern=15
Global Filename.s
Global LIHwnd.l
Global FHandle.l
Global Buffer.l
Global Offset.l
Global FLen.l
Procedure SROpenFile(AFilename.s)
Fhandle=CreateFile_(@AFilename.s,#GENERIC_READ|#GENERIC_WRITE ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#NULL,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0 )
If FHandle
Buffer=AllocateMemory(512)
Offset=0
ProcedureReturn fHandle
EndIf
EndProcedure
Procedure SRGetData(NewPosition)
Count=0
Result=SetFilePointer_(Fhandle,Newposition,0,#FILE_BEGIN )
Result=ReadFile_(FHandle,Buffer,512,@count,0)
ProcedureReturn Count
EndProcedure
Procedure SRGetDataNext()
Count=0
Result=ReadFile_(FHandle,Buffer,512,@count,0)
ProcedureReturn Count
EndProcedure
Procedure SRGetFilepointer()
ProcedureReturn SetFilePointer_(Fhandle,0,0,#FILE_CURRENT )
EndProcedure
Procedure SRGetDataPrevious()
Count=0
Result=SetFilePointer_(Fhandle,-1024,0,#FILE_CURRENT )
Result=ReadFile_(FHandle,Buffer,512,@count,0)
ProcedureReturn Count
EndProcedure
Procedure SRCloseFile(FHandle1)
If FHandle1<>0
FreeMemory(0)
CloseHandle_(FHandle1)
FHandle=0
ProcedureReturn fHandle1
Else
ProcedureReturn -1
EndIf
EndProcedure
Procedure Open_Window_0()
hwnd=OpenWindow(#Window_0, 252, 113, 620, 580, #PB_Window_SystemMenu | #PB_Window_TitleBar , "PB Hexeditor")
;hWnd = OpenWindow(0,100,100,0,0,#WS_POPUP,"Icon-Show")
If hwnd
If CreateGadgetList(WindowID())
AnfangYLabels=36
If CreateToolBar(0, hwnd)
ToolBarStandardButton(#MENU_FileOpen , #PB_ToolBarIcon_New)
ToolBarStandardButton(#MENU_HDISK_C , #PB_ToolBarIcon_Open)
ToolBarStandardButton(#MENU_Save, #PB_ToolBarIcon_Save)
ToolBarSeparator()
ToolBarStandardButton(#MENU_Back, #PB_ToolBarIcon_undo)
ToolBarStandardButton(#MENU_Forward , #PB_ToolBarIcon_redo)
ToolBarStandardButton(#MENU_Search, #PB_ToolBarIcon_Find)
ToolBarSeparator()
ToolBarStandardButton(#MENU_HELP, #PB_ToolBarIcon_Help )
hGadget=TextGadget(#StatusText,200,3,300,30,"Status:OKay!")
EndIf
;hGadget=TextGadget(#StatusText,150,3,300,30,"Status:OKay!")
If CreatePopupMenu(0)
For I=1 To 26
Parameter.s=Chr(64+I)+":"
Select GetDriveType_(Parameter)
Case 0; Result = Translator("Unknown")
Case 1; Result = Translator("No root dir")
Case 2 ;Result = Translator("Removable")
MenuItem(#DriveGadgets+I, Parameter)
Case 3 ;Result = Translator("Drive Fixed")
MenuItem(#DriveGadgets+I, Parameter)
Case 4 ; Result = Translator("Remote")
Case 5 ; Result = Translator("CDROM")
MenuItem(#DriveGadgets+I, Parameter)
Case 6 ; Result = Translator("Ram disk")
Default ; Result = Translator("Unknown")
EndSelect
Next I
EndIf
Abstand=80
AnfangY=20+AnfangYLabels
YSize=15
HexBreite=22
LoadFont(1,"Times New Roman",8)
LoadFont(1,"Courier New",12)
SetGadgetFont(#PB_Default ,UseFont(1))
TextGadget(0,1,AnfangYLabels,Abstand-5,YSize,"Adress", #PB_Text_RIGHT);|#PB_Text_Border)
TextGadget(0,Abstand+20,AnfangYLabels,336,YSize,"HEX-DATA", 0);|#PB_Text_Border)
TextGadget(#PositionText,300,AnfangYLabels,80,YSize,"")
TextGadget(0,420,AnfangYLabels,180,YSize,"ASCII-DATA", #PB_Text_Center);|#PB_Text_Border)
P=#HexGadget
S=#AsciiGadget
StartDrawing(WindowOutput() )
For I=0 To 31
StringGadget(#AdressGadget+I,0,I*(YSize+1)+AnfangY,Abstand-5,YSize,Hex((P-100)), #PB_String_BorderLess|#PB_Text_RIGHT|#PB_String_Readonly)
For T=0 To 15
P+1
; hwnd=StringGadget(P, Abstand + (T*HexBreite),I*(YSize+1)+AnfangY,20,YSize,"FF",#PB_String_BorderLess |#PB_String_UpperCase )
;hwnd=TextGadget(P, Abstand + (T*HexBreite),I*(YSize+1)+AnfangY,20,YSize,"",0)
Locate( Abstand + (T*HexBreite),I*(YSize+1)+AnfangY)
DrawText("FF")
Next T
StringGadget(#AsciiGadget+I,435,I*(YSize+1)+AnfangY,165,YSize,"", #PB_String_BorderLess)
Next I
StopDrawing()
AddKeyboardShortcut(#Window_0, 1, #PB_Shortcut_Up )
AddKeyboardShortcut(#Window_0, 2, #PB_Shortcut_Down )
EndIf
EndIf
EndProcedure
Procedure FillHex(Startadress,Anzahl)
Shared Buffer
P=#HexGadget
AnfangYLabels=36
Abstand=80
AnfangY=20+AnfangYLabels
YSize=15
HexBreite=22
StartDrawing(WindowOutput() )
DrawingMode(0)
Box(Abstand,AnfangY,(16*HexBreite),32*(YSize+1),$FFFFFF)
DrawingMode(1)
FrontColor(0,0,0)
For I=0 To 31
SetGadgetText(#AdressGadget+I,Hex(Startadress+(I*16)))
ascii.s=""
For T=0 To 15
Newoffset= P - #Hexgadget
P+1
Locate( Abstand + (T*HexBreite),I*(YSize+1)+AnfangY)
If Buffer<>0 And p <=Anzahl+#HexGadget
Wert=PeekB(Buffer + Newoffset)
; SetGadgetText(P,Right("00"+Hex(Wert),2))
DrawText(Right("00"+Hex(Wert),2))
Else
; SetGadgetText(P," ")
DrawText(" ")
Wert=-1;Random(255)
EndIf
If Wert>-1 And Wert<256
ascii.s=ascii.s+Chr(Wert)
Else
ascii.s=ascii.s+" "
EndIf
Next T
SetGadgetText(#AsciiGadget+I,ascii)
Next I
StopDrawing()
If FHandle<>0
SetGadgetText(#PositionText, "Pos="+StrU(SRGetFilepointer()-512,2) )
EndIf
EndProcedure
Open_Window_0()
FillHex(0,0)
Repeat
;-MAINEVENT
Event = WaitWindowEvent()
EM= EventMenuID()
EVT=EventType()
GD=EventGadgetID()
;Debug Str(Event)+":"+Str(EVT)+":"+Str(EM)
If Event=#PB_Event_Menu
Debug EM
If EM>#DriveGadgets And EM <#DriveGadgets+26
Beep_(100,100)
SRCloseFile(FHandle)
Filename.s="\\.\"+Chr(EM-36)+":"
If SROpenFile(Filename.s)
Offset=0
FLen.l=-2
SRGetData(Offset)
Beep_(100,100)
FillHex(Offset,512)
SetGadgetText(#StatusText,"HardDisk drive C:")
EndIf
EM=0
EndIf
EndIf
If Event=#PB_Event_Menu
Select GD
Case #MENU_HELP
MessageRequester("Info about","PureBasic-Hexeditor(viewer) by Siegfried Rings",0)
Case #MENU_Search
Search.s=InputRequester("PB-Hexeditor","Type in String To search For",Search.s)
Beep_(100,100)
Case #MENU_FileOpen
Filename.s=OpenFileRequester("Choose File to examine", DefaultFile$, "*.*",0 )
If Filename<>""
DefaultFile$=Filename
SRCloseFile(FHandle)
If SROpenFile(Filename.s)
FLen.l=FileSize(Filename.s)
Offset=0
SRGetData(Offset)
Beep_(100,100)
FillHex(Offset,FLEN)
SetGadgetText(#StatusText,"File="+Filename.s)
EndIf
EndIf
EM=0
Case #MENU_HDISK_C
DisplayPopupMenu(0, WindowID())
Case #MENU_Back
If FHandle<>0
If Offset<= 512
Offset=0
FillHex(Offset,Result)
Else
Result=SRGetDataPrevious()
If Result<>0
Offset=SRGetFilepointer();-512
FillHex(Offset-512,Result)
EndIf
EndIf
EndIf
Case #MENU_Forward
If FHandle<>0
Result=SRGetDataNext()
If Result>0
Offset=SRGetFilepointer();-512
FillHex(Offset-512,Result)
EndIf
EndIf
EndSelect
If GD>=#HexGadget And GD<=#HexGadget+512
If EVT=#PB_EventType_Change
Len=Len(GetGadgetText(GD))
If Len>2
Beep_(100,100)
SetGadgetText(GD,Left(GetGadgetText(GD),2))
EndIf
EndIf
EndIf
EndIf
Until Event = #PB_EventCloseWindow
SRCloseFile(FHandle)
End
; ExecutableFormat=Windows
; CursorPosition=4
; FirstLine=1
; EOF