Foro | | | | Georg Teles | ¡Hola Allerseits, tener mich hier seit el Anmeldung desafortunadamente nie geblickt, aber hobbymäßig trotzdem algunos Programas geschrieben (tal vez poste Yo el en Gelegenheit veces), nu tener Yo una Cuestión Weiß alguien como Función MapFileAndCheckSum genau funktioniert ? KompilierenMarcaSeparación ... por Probieren Yo una Code geschrieben, pero en gewissen Größen rechnet él me el "Checksumme" falso en: (en Byte) 8, 12, 16, 20, 28, 32, ... 722 más tener Yo no ausprobiert ...
a dahin tener Yo con Textdateien probiert, aber auch con otro Dateitypen, EXE JPG y esta ha él auch en algunos Archivos correcto, en otro falso gerechnet ...
... el Grund wozu ch el brauche es, dass Yo anstatt cada vez el Expediente a escribir en esta con el oben genannten Función abzurufen, esta Función mittels Zona intern berechnen dejar möchte.
hier natürlich el todo Code inklusive Ventana Drag & Drop y alles Schnickschnack, el Función, el "MapFileAndChecksum" sustituir se, heisst "CR2", el Werte voluntad en el Liste bajo "meine CRC" aufgelistet, el con "MapFileCheckSum" bajo "CheckSum" natürlich KompilierenMarcaSeparación $H windows.ph
'Set("ErrorLevel", 0)
Def DragAcceptFiles(2) !"SHELL32","DragAcceptFiles"
Def DragFinish(1) !"SHELL32","DragFinish"
Def DragQueryFile(4) !"SHELL32","DragQueryFileA"
DEF MapFileAndCheckSum(3) ! "Imagehlp","MapFileAndCheckSumA"
Declare HeadSum&,CheckSum&
Declare E%, PFn#, anz&, zah&, B01%, lstB&, winico&, lst$
WinMain(510,260)
Cls ~Getsyscolor(15)
Objects()
Activities()
Proc WinMain
Parameters x&,y&
Windowtitle "Checksum - Drag & Drop"
Windowstyle 8+16+512
Window ((%MaxX/2)-(x&/2)),((%MaxY/2)-(y&/2))-x&,y&
winico& = Create("hIcon",Par$(0),0)
SendMessage(%hwnd,$80,1,winico&)
~SetWindowLong(%hwnd,-16,$92CA0000)
PopUp "&Datei"
AppendMenu 100,"Öffne Liste"
AppendMenu 101,"Speichere Liste"
Separator
AppendMenu 102,"Beenden"
PopUp "&Liste"
AppendMenu 200,"Auswahl löschen"
AppendMenu 201,"Löschen"
Endproc
Proc Objects
lstB& = Create("GridBox",%HWnd,"Datei;0;115;Größe in Byte;1;100;CheckSum;1;80;meine CRC;1;80;Vergleich;1;75",2,5,5,493,200)
DragAcceptFiles(%HWnd,1)
EndProc
Proc Activities
Usermessages 563
CheckList
Clear E%
WhileNot E%
Waitinput
If %Message = 563
Drag()
ElseIf %Key = 2
Inc E%
ElseIf MenuItem(100)
lst$ = LoadFile$("Öffne Datei:","Alle Dateien |*.*")
If %Button = 1
op_(lst$)
EndIf
ElseIf MenuItem(101)
sa_()
ElseIf MenuItem(102)
Inc E%
ElseIf MenuItem(200)
del_(GetCount(lstB&),1)
ElseIf MenuItem(201)
del_(GetCount(lstB&))
EndIf
CheckList()
Endwhile
DragAcceptFiles(%HWnd,0)
EndProc
Proc Drag
DIM PFn#,261
anz& = DragQueryFile(&UWParam,$FFFFFFFF,PFn#,261)
Clear zah&
While zah&<anz&
Clear PFn#
DragQueryFile(&UWParam,zah&,PFn#,261)
Ad_(String$(PFn#,0))
Inc zah&
EndWhile
Dispose PFn#
DragFinish(&UWParam)
EndProc
Proc op_
parameters file$, z$
Assign #1,file$
Reset #1
If %IOResult
Messagebox("Datei kann nicht gelesen werden!","Fehler",16)
Else
WhileNot EOF(#1)
Input #1, z$
AddString(lstB&,z$)
EndWhile
EndIf
Close #1
EndProc
Proc sa_
Parameters file$
file$ = $progdir+"list_"+Date$(3)+"_"+Left$(Time$(0),2)+"."+Right$(Time$(0),2)+"."+Left$(Time$(1),2)+".txt"
Assign #1,file$
OpenRw #1
Close #1
Assign #1,file$
Append #1
WhileLoop 0,GetCount(lstB&)-1
Print #1,GetText$(lstB&,&loop,0)+"|"+GetText$(lstB&,&loop,1)+"|"+GetText$(lstB&,&loop,2)+"|"+GetText$(lstB&,&loop,3)+"|"+GetText$(lstB&,&loop,4)
EndWhile
Close #1
EndProc
Proc Ad_
Parameters file$, size&, crc&, cr2&, msg$
crc& = crc(file$)
cr2& = cr2(file$)
size& = FileSize(file$)
file$ = SubStr$(file$,-1,"\\")
If crc& = cr2&
msg$ = "gleich"
Else
msg$ = "UNgleich"
EndIf
AddString(lstB&,file$+"|"+Str$(size&)+"|"+Str$(crc&)+"|"+Str$(cr2&)+"|"+msg$)
EndProc
Proc crc
Parameters File$
Clear Headsum&, Checksum&
MapFileAndCheckSum(Addr(File$),addr(Headsum&),addr(Checksum&))
Return Checksum&
EndProc
Proc cr2
Parameters File$,fs&,fs#,p%
Clear fs&,p%
fs& = Filesize(file$)
Dim fs#, fs&
Clear fs#
Assign #2,file$
Openrw #2
Blockread(#2,fs#,0,fs&)
Close #2
WhileLoop 0,fs&\2
p% = p%+word(fs#,&loop*2)
If p% >= 65535
p% = (p%-65535)
endif
EndWhile
p% = (p%+fs&)
Dispose fs#
Return p%
EndProc
proc del_
Parameters c&, p&
If p& = 1
WhileLoop 0,(c&-1)
If GetState(lstB&,(c&-1)-&loop) >= 2
DeleteString(lstB&,(c&-1)-&loop)
EndIf
EndWHile
Else
WhileLoop 0,(c&-1)
DeleteString(lstB&,(c&-1)-&loop)
EndWHile
EndIf
EndProc
Proc CheckList
If GetCount(lstB&)
EnableMenu 200,0
EnableMenu 201,0
Else
EnableMenu 200,1
EnableMenu >201,1
EndIf
ENDPROC
FIN
El Función scheint no simplemente a ser, aber más que Probieren kann Yo no, en el Netz es auch no mehr darüber. |
| | | | |
| | | ¡Hola Georg,
Yo lo verstehe es por lo tanto de Exen oder DLL una Signatur a erzeugen, más no de otro Archivos. MSDN
This function is used by any application that creates or modifies a executable image. Checksums are required for kernel-mode drivers and some system DLL.
Was genau möchtest Usted letztendlich erzielen? |
| | | | |
| | Georg Teles | Hi IF,
sí korrekt, lo es son DLL y EXE, el Checksumme se bajo Anderem en el Encabezamiento el DLL / EXE "mitgeschleppt" y antes el Ausführen se el Checksumme gebildet y el verglichen, lo se also geprüft, si el Programa manipuliert wurde o si überhaupt kompatibel es al jeweiligen PC, lo wäre sí unschön si beim Ausführen des Programms para Choque des PC kommen sería neech ...
früher tener Soy un Contribución hier gelesen, lo ging por lo tanto esta Función a nutzen, en propio Programas oder Archivos a schützen, ändert uno wenigstens 1 Byte, así ändert el komplette Summe, y esta "Summe" es el Yo mi, esta Función puede ser scheinbar para cada Dateityp uso, sólo se esta Summe no en el Expediente hinterlegt beispiel TXT, uno kann profano dijo el Summe de beliebigen Archivos forma.
Was Yo erzielen möchte erkläre Yo otra vez kurz: Como el CheckSum Función zwangsläufig una Pfad a Expediente benötigt möchte Yo mittels el eigenen Función el gleiche Ergebnis erziehen, a una Bereichs anstatt el Expediente.
El Función se eben intern en el Programa el Checksumme forma puede sin una Expediente a escribir ... Yo merke gerade, dass lo en größeren Archivos bastante largo dauert a Yo el Summe habe ... naja egal, Yo antes una Archivierer a escribir, y esta Función voluntad Yo para muy kleine Bereiche uso, y zwar para el Contraseña Yo ya 2 Archivierer geschrieben, uno con Passwortschutz aber el speichert él desafortunadamente con, y yo voluntad esta Función irgendwie anstatt des Passwortes nutzen ...
Yo merke sí todavía qué, Yo costumbre el Función así sí garnicht como Checksum, lo funktioniert sí ya Yo lo voluntad, Yo teste veces si él correcto kodiert y dekodiert ... |
| | | | |
| | | Tal vez wäre qué Findus hier Nuevo ha hilfreich(él): [...] |
| | | | |
| | Georg Teles | Schöner Code, desafortunadamente arbeite I, con XProfan 10 y "encode64" hay como no naja el Ejemplo zeigt Textverschlüsselung por Umsortieren, el voluntad Yo sí vermeiden, passt ya, Yo tüftel veces más ... |
| | | | |
| | | Tomar doch FreeProfan: [...] |
| | | | |
| | Georg Teles | Gracias IF, 64 Bit hay en efecto Juhuuuu
tener ahora el Solución ... Mi Función macht genau el, qué MapFileAndCheckSum auch allerdings muy langsam, para 1 MByte braucht el Programa 22,875 Sekunden, aber el es egal, Yo wende el sólo para kleine Bereiche a
Anscheinend rechnet el Función el Rest el Summe uno Expediente WORD para WORD zusammen... BZW como Yo verstanden habe, sobald el Summe des ersten WORD con el zweiten Max. erreicht oder größer es (65535), se lo abgezogen, danach se el Rest el restos con el nächsten WORD addiert, después de cada Summe se lo otra vez geprüft, si el Summe Max. erreicht oder größer es, en diesem Fall se el Valor otra vez abgezogen usw ... KompilierenMarcaSeparación
Proc cr2
Parameters File$,fs&,fs#,p%,s%
Clear fs&,p%,s%
fs& = Filesize(file$)
Dim fs#, fs&
Clear fs#
Assign #2,file$
Openrw #2
Blockread(#2,fs#,0,fs&)
Close #2
If fs& MOD 2 = 0
s% = (fs&\2)-1
ElseIf fs& MOD 2 = 1
s% = (fs&\2)
EndIf
WhileLoop 0,s%
p% = p%+word(fs#,&loop*2)
If p% > 65534
p% = (p%-65535)
endif
EndWhile
p% = (p%+fs&)
Dispose fs#
Return p%
ENDPROC
|
| | | | |
| | | Dann sería Yo el Función (el Teil el rechnet) en un nProc packen -
el va entonces más rápido como el Blitz. |
| | | | |
| | Georg Teles | ¡Hola, Voy a veces hier el Thema auffrischen tener veces para media Archivierer una Passwortsystem überlegt, funktioniert en etwa después de diesem Principio...
Wer Lust para Testen ha ^ ^ el Test schreibt sólo el Head meines Archivierers y Contraseña + abierto y Passwortabfrage ... lo se una Expediente creado asd.tew
Descargar |
| | | | |
| | | Yo bin no sicher, si el Contraseña sicher hinterlegt se.
Wenn Yo, el Bytewert uno individual Passwortzeichens en 1 erhöhe entonces debería se en el Expediente no auch simplemente sólo 1 Bytewert en 1 erhöhen. So debería el Contraseña incluso garnicht en el Expediente posición pero más una Prüfsumme y sólo si Prüfsummen übereinstimmen entonces stimmen el Passworte überein. |
| | | | |
| | Georg Teles | Naja el es sí el Sache, dass el Passowrt garnicht con drin es kannst veces el Expediente con Notepad abierto y después de el Contraseña suchen, como findest du nichts.
habe fast vergessen, una Leerzeichen debería uno no benutzen, el funktioniert entonces meistens no, Yo teste veces más ...
Editar: drin es auch sólo el Prüfsumme, allerdings es ellos con allen Anderen Parametern verknüpft sodass si uno intenta el Encabezamiento a manipulieren, se el Programa darauf auch reagieren, theoretisch tener Yo el ya überlegt |
| | | | |
|
RespuestaTema opciones | 11.039 Views |
ThemeninformationenDieses Thema ha 2 subscriber: |