Tool - DataSection+Data einer Datei per Drop auf den Editor

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Tool - DataSection+Data einer Datei per Drop auf den Editor

Beitrag von STARGÅTE »

Jeder kennt das aus dem Forum:
Da möchte man mal schnell einen Beispiel-Code zeigen, aber blöderweise
benötigt dieser zusätzliche Ressourcen, wie zum Beispiel Bilder.

Ohne die Ressourcen hochladen zu müssen, kann man sich einer DataSection bedienen,
in der die Binärdaten als Quads oder ähnlichem enthalten sind.

Um die Erzeugung von solchen DataSections zu erleichern habe ich dieses Werkzeug geschrieben:

Es ermöglich einfach per Drag&Drop eine oder mehrer beliebige Binärdatei
als DataSection an die aktuelle Position im Editor einzufügen!

Als Sprungmarke wird gleich der Dateiname (mit filterung von Sonderzeichen) genutzt.
Auch die Einrückung wird automatisch aus der PB.perfs gelesen.

Hinweis: Jedoch sollte man eine Größe von 100KB nicht überschreiben, da ansonsten über 2000 Zeilen eingefügt werden.

Hier ist der Quellcode des Tools:

Code: Alles auswählen

EnableExplicit


Enumeration
	#File
	#RegularExpression
EndEnumeration

Structure QuadArray
	q.q[0]
EndStructure


Procedure GetProcessFromWindow(WindowID.i)
	Protected ProcessID.i
	If GetWindowThreadProcessId_(WindowID, @ProcessID)
		ProcedureReturn OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessID)
	EndIf
EndProcedure

Procedure SendText(ScintillaID.i, Text.s)
	Protected ProcessID.i = GetProcessFromWindow(ScintillaID)
	Protected Length.i
	Protected *MemoryID, *Buffer, Format.i
	If ProcessID
		Select SendMessage_(ScintillaID, #SCI_GETCODEPAGE, #Null, #Null)
			Case 0     : Format = #PB_Ascii
			Case 65001 : Format = #PB_UTF8
		EndSelect
		Length.i = StringByteLength(Text, Format)
		*Buffer = AllocateMemory(Length+SizeOf(Character))
		If *Buffer
			PokeS(*Buffer, Text, #PB_Default, Format)
			*MemoryID = VirtualAllocEx_(ProcessID, #Null, Length, #MEM_RESERVE|#MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
			If *MemoryID
				WriteProcessMemory_(ProcessID, *MemoryID, *Buffer, Length, #Null)
				SendMessage_(ScintillaID, #SCI_ADDTEXT, Length, *MemoryID)
				VirtualFreeEx_(ProcessID, *MemoryID, Length, #MEM_RELEASE)
			EndIf
			FreeMemory(*Buffer)
		EndIf
		CloseHandle_(ProcessID)
	EndIf
EndProcedure

Procedure.s GetNamePart(FullPathName.s)
	If GetExtensionPart(FullPathName)
		ProcedureReturn Left(GetFilePart(FullPathName), Len(GetFilePart(FullPathName))-Len(GetExtensionPart(FullPathName))-1)
	Else
		ProcedureReturn GetFilePart(FullPathName)
	EndIf
EndProcedure

Procedure.s GetIndentString()
	OpenPreferences(GetEnvironmentVariable("APPDATA")+"\PureBasic\PureBasic.prefs")
	PreferenceGroup("Global")
	If Val(ReadPreferenceString("RealTab", "1"))
		ProcedureReturn #TAB$
	Else
		ProcedureReturn Space(Val(ReadPreferenceString("TabLength", "2")))
	EndIf
	ClosePreferences()
EndProcedure


Define IndentString.s = GetIndentString()
Define FileName.s = ProgramParameter(0)
Define *Buffer.QuadArray, Length.i
Define Output.s, Index.i, LastIndex.i
Define WindowID.i = Val(GetEnvironmentVariable("PB_TOOL_MAINWINDOW"))
Define Label.s = GetNamePart(FileName)


If Not WindowID
	MessageRequester("IncludeBinary.Tool", "Fehler: Das Programm kann nicht außerhalb von PureBasic gestartet werden!")
	End
EndIf

If Not FileName
	MessageRequester("IncludeBinary.Tool", "Fehler: Es wurde keine Datei übergeben!")
	End
EndIf


CreateRegularExpression(#RegularExpression, "\W")
Label = ReplaceRegularExpression(#RegularExpression, Label, "_")
FreeRegularExpression(#RegularExpression)
CreateRegularExpression(#RegularExpression, "^\d")
If MatchRegularExpression(#RegularExpression, Label)
	Label = "_" + Label
EndIf 
FreeRegularExpression(#RegularExpression)


If ReadFile(#File, FileName)
	Length = Lof(#File)
	If Length % SizeOf(Quad)
		Length + (SizeOf(Quad) - Length % SizeOf(Quad))
	EndIf
	LastIndex = Length / SizeOf(Quad) - 1
	*Buffer = AllocateMemory(Length)
	If *Buffer
		ReadData(#File, *Buffer, Length)
		Output + "DataSection"+#CRLF$
		Output + IndentString + Label+":"
		For Index = 0 To LastIndex
			If Index % 5 = 0
				Output + #CRLF$ + IndentString + "Data.q $"+RSet(Hex(*Buffer\q[Index], #PB_Quad), 16, "0")
			Else
				Output + ",$"+RSet(Hex(*Buffer\q[Index], #PB_Quad), 16, "0")
			EndIf
		Next
		Output + #CRLF$+"EndDataSection"+#CRLF$
		SendText(FindWindowEx_(WindowID,0,"Scintilla",0), Output)
		FreeMemory(*Buffer)
	EndIf
	CloseFile(#File)
EndIf
Einfach eine EXE erzeugen und als Werkzeug mit folgenden Parameter einbinden:
Kommandozeile: [Pfad zu euer EXE]
Name: [Name des Werkzeugs]
Ereignis zum Auslösen des Werkzeugs: "Dateianzeiger ersetzen - Alle Dateien"
(Alle Dateien bezieht sich nicht auf die PB-Dateien)

Hier ein Beispiel, mit per Drop eingefügten DataSection:

Code: Alles auswählen

UsePNGImageDecoder()
OpenWindow(#PB_Any, 0, 0, 128, 128, "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
 ImageGadget(#PB_Any, 48, 48, 32, 32, ImageID(CatchImage(#PB_Any, ?Beispiel)))

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DataSection
	Beispiel:
	Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000020000000,$7A7A730000000608,$47527301000000F4
	Data.q $0000E91CCEAE0042,$FF0044474B620600,$93A7BDA0FF00FF00,$7359487009000000,$130B0000130B0000
	Data.q $000000189C9A0001,$05D907454D497407,$A7CC490C1B1E1309,$54414449E8070000,$E5558C6B56BDC358
	Data.q $E667BEE77F7B5D15,$1006181EF3B99DCE,$4854747411148070,$689B535AB4A34115,$D8D36C3FB68A3FAB
	Data.q $6D1B698DA8D1FD34,$C6A1A3536254D44C,$45F11D0AD56C5B54,$CC280861190531E5,$3DCF7DCCC1E61CF0
	Data.q $3043FBBD9CF735F7,$7F7C9DD350CC0AAD,$AD7BDECEBDAC9CBE,$CF19352F19A611FD,$57568ADEBB2FCBDA
	Data.q $78CE722636A39BFB,$FCDEC4606F7F9522,$E40164398BDCB1C9,$54D1E10BDC00D800,$F741FA3AE6BB3F13
	Data.q $5B9BDF358EEDBA07,$2C128038E8A1B553,$FC6A3D78E03285D7,$672676AB26591CFE,$D48ED2B2BFB633E5
	Data.q $D1FF396550DD66D7,$D6F1BF97ECA6B600,$C7BB95D434D71B07,$B27FEB000023D362,$91E1D8E1FF537A2E
	Data.q $0622555152665131,$1BC3010A38E30A7D,$61C06001AEA781AE,$C46E6AE8BD83F183,$E3EE3B6EBCF5EF65
	Data.q $6043A6B4C59E7600,$10244A1C7FC3A1C5,$11552042B8E1050C,$8281030C42220940,$AFAB10D885213B5D
	Data.q $22E9607E31D34652,$B0EE3B6E27A77DCC,$BE4C33F44978E98F,$DF400056ACF0D250,$19537DBC93EFABED
	Data.q $50175C45401C7110,$2102A044080B8885,$EE62544D45422511,$EC76CB0F3C5D6E24,$3F0C0537B09D1DCB
	Data.q $12F3FC4FFD1D1259,$010C4E6402E97C78,$EDC7EBE2C480BAC1,$5018280154111282,$42906510042B2A88
	Data.q $BC2CB06165AF615C,$EA58343F3FCC31B2,$705F5E19F2ED8B1D,$8ACB713086A2E065,$73544278B32A76FD
	Data.q $98975C14AE3BC8AA,$008804010504C419,$18B9AD1EBABE4110,$BB3DCECF7B809BF7,$97D36572557F867D
	Data.q $004E63BDF60B9B61,$A6F7DAA78C6CB4E9,$A632C04C71DB41B3,$4C2BA4D33017E029,$6FADEA2AACB88504
	Data.q $AC7AD12294726F65,$AABA4F0071E77F7E,$35415553924B9DAF,$BC3C8E67CD004E80,$0925C0A135DEFDA0
	Data.q $EA3671AB04B970A8,$44D6F23163FA02DD,$7DF8020D775B9BE8,$74A15CC9C4F0285B,$86CC86B3DEE03E51
	Data.q $795A6E3FFDFCFD6E,$C97CF1E2FE226377,$962473AD2264A725,$747ED62F0AC2F18C,$09B0011FCEC47628
	Data.q $7A2327FE46000BC0,$2AD7775FEFAA6A36,$77C7C2A9CE72492D,$1B6D0F5EF3363A9C,$A4654AEB8E3DE5CD
	Data.q $6FA002DA22F9631E,$04BF4A913C9A3FED,$3B2A943AC788B9E0,$F0EB1A1BC2728BE5,$26BB725D13DFB6F6
	Data.q $4B9DE154A079BEEE,$F8D6BA68D4EC41EC,$3D415CC955032A99,$1A9D3E6963FDD5EA,$FE3C50C8ECB163C5
	Data.q $BAC59F48008F0017,$939D8D1F7F0EA9B5,$A057EBE7A88C17C0,$E37EDD22205DDDF3,$1D16C95CC866BF55
	Data.q $180EA96D6C6992A2,$2C944AF85C79620B,$BA4155223D033D02,$FBBE7555AD7C6C37,$AD4E253BE97CBDAF
	Data.q $9C54FCBE90F3797A,$D6D605569D63F3BE,$3B2B83853246F044,$00136BD9199ACC97,$6F66190C57AF1862
	Data.q $5C89E1D17C8C1440,$105F32792B2AAA51,$C0CED6405BF62CB5,$DE1F19E6C914763E,$C003B0033F2DB7F0
	Data.q $99237A2305F15B39,$9265B554D22B0002,$7023810A4B88EA14,$E24082888115C489,$02AFB2925DB48361
	Data.q $FBBB97DAF89D709E,$A6ED6308ADC5244E,$57CE7800BA00F5AD,$BF6D2FEB05DD2F81,$1630BCB2CEB70C2F
	Data.q $AC32212C64C4A391,$8C5985969F057160,$BDBC558204889310,$3BDADD36322EA37B,$157802B72727E768
	Data.q $0DE02F3843DA7E40,$B03D5801D72617F6,$5952B7669B1BCAEA,$5F2C328E1FAF5E09,$5D5152E5016CB110
	Data.q $3E81CF426D135417,$89A9437DF18DC92C,$1C87A22DBB4686B7,$82EE97C15217C3D5,$2F36A7801286E6AE
	Data.q $A5F26CDEDED7D85F,$E01FEEF421FC0532,$37177BBDDA3EDF44,$D75434C631AE29DA,$CC3D23B9471389F2
	Data.q $774686B79D26644F,$EBCFC92A7A798C04,$2B03C570D19DBF03,$E5F9F7E082CAEF97,$1DDFCC3E3438E0E0
	Data.q $C019F616C91F8E18,$19B6B6FF3BD2ADBE,$9C17C4FA10B16E2D,$F0C8CEBB23C1CDFC,$A7A045FFF15D539F
	Data.q $400041D7FAAE2173,$5546F3E331D5CEF2,$3EFEEEFC8A644DC9,$FE4B10389E573A7D,$AA78DF7E22EFC015
	Data.q $00074000B0036A58,$06EDC739DD32C84F,$5ED6146CE04517A0,$088E4ABB870DDDBB,$127BCBD8EFD60F19
	Data.q $B3345892D5996931,$E439FFBFBE1F89E5,$60ACF8D7DFB38952,$025E770342E0E4B2,$94EF371B9ABE6FA7
	Data.q $6ACCD717ED7CD72D,$6093030888E4B479,$5501E44F48822A04,$DCF4FE5CE033664E,$AD81F769FCF7B305
	Data.q $3CFF10006FF6F6EB,$7811A9D139098870,$BAC3C3E5BA7CF973,$6EB566CB5DC5EAED,$60A42A390022A077
	Data.q $4C0717E7CB61E361,$D3F18944C0A0B2B9,$A1C18022BAA09288,$3B2BF9F749B14353,$801F69B0D9107DE6
	Data.q $E67E0EB2C2F3AACF,$05B05ECE93D929C8,$FBF0AC186F3BD915,$1D942D5D76C01022,$6CA0B650CCA0B255
	Data.q $590F8F10CCC0B040,$3CB5E02565C99A58,$2AF09391C50672BE,$6FA67A1CD6D5B64E,$40057E9D8F07F5E0
	Data.q $8AD11055502D4A72,$C6673B5E9E1ADB07,$8428557F2A9125BC,$52D86423AC95D974,$112E188096CAC362
	Data.q $812CB5D87B288C43,$3885F2154572A3E5,$06F0BB0B449F4F95,$FA3EEBE399E3B0FC,$98026F52C4EFA7E4
	Data.q $C34754014B81273C,$D79D007CCCF13D55,$F259A86EAEAB4384,$516B47B46733D9FD,$1110A89C8C094654
	Data.q $CC2C5811190B0C94,$54F1E258C6CBC6C2,$AA61B1E3966869B0,$479C26A6369B7BE9,$0061F5595AF93E3E
	Data.q $5E467F503DE74F1F,$78B43ED73D06962B,$DAA2F0BAD139B2FE,$085952F1A3C9A45A,$602F180C35058044
	Data.q $0D6932246143F82C,$CF4A248E8F30EFF7,$8F6A87F005EF1A9F,$20FDA614ECBA4AF5,$C9A3CFFF8D5376F9
	Data.q $B57715812ACB0016,$79B8EBAC6AAD7635,$42525085672B1CF6,$925582FB130885CE,$1FF7007C3A38C64C
	Data.q $78197AA58F752D1F,$4D3488DAE7CD805C,$0FCCB003CC0006D9,$339D9D2D79CBFF5C,$8ADE33AD1C5CCF66
	Data.q $08FC68488F8C4E28,$B7654DEF9C3FD1DF,$8755F05B0294F012,$0046BEBC053568FE,$B7CABAF6F87801D7
	Data.q $5DB0B8DA9B98EB1F,$9FA6F0009CAEAB2F,$1F015F483F2A6BB9,$02AE0015C011A003,$1F4AE0B57E180C50
	Data.q $B4CF05F01ED1DFFE,$6FC4A3A56FF1CA69,$00000000B00122A1,$826042AE444E4549
EndDataSection
Zuletzt geändert von STARGÅTE am 12.09.2011 20:58, insgesamt 2-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von bobobo »

Wenn ein Bild eine Zahl als Name hat gips Probleme mit dem Label ,gell
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von STARGÅTE »

Ah danke für den Hinweis.
Das war aber nicht immer so oder?
Zumindest ging es unter 3.3 noch, dass man folgenden Code ausführen kann:

Code: Alles auswählen

; PB 3.3 !
Goto 1
Debug "Nichts"
1: Debug "Hallo "+Str(?1)
Nagut, habs nun angepasst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von bobobo »

das ging wohl bis ausschließlich 4.41

egal .. 3.3 ist ja sowas von alter Hut :mrgreen:
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von delikanli_19_82 »

das ganze klingt nach einer lösung, das ich suche. aber ich weiß nicht genau, wie das mit dem dragdrop und werkzeug funktionieren soll.

habe das noch nicht sinnvoll zum laufen bringen können.

bitte um aufklärung.

mfg
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von STARGÅTE »

  1. Kopiere dir den Quellcode und speicher ihn bei dir ab.
  2. Erstelle daraus eine Exe, an einem Ort wo du das Werkzeug haben willst.
  3. Geh in den PB-Editor zu: Werkzeuge > Werkzeuge konfigurieren
  4. Klicke oben rechts auf Neu
  5. Gebe in der Kommandozeile links den Pfad der Exe ein, die du erstellt hast
  6. Gebe als Name den Namen des Werkzeugs an, den du haben möchtest.
  7. Wähle bei Ereignis zum Auslösen des Werkzeugs: "Dateianzeiger ersetzen - Alle Dateien"
  8. Klicke auf OK
  9. Klicke noch mal auf OK
Nun ist das Werkzeug erstellt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von NicTheQuick »

Gibt es davon schon eine Version, die auch mit der neuen Beta funktioniert? Ich krieg das gerade auf Anhieb irgendwie nicht hin, ohne den kompletten Code zu überarbeiten. Die Anleitung zur Einrichtung des Werkzeugs scheint auch nicht mehr zu passen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von ts-soft »

Du kannst alternativ auch dies hier nutzen: http://www.purebasic.fr/english/viewtopic.php?p=374183
Source funktioniert mit allen Versionen von PB, Crossplattform!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
TheCube
Beiträge: 150
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von TheCube »

Habe das Tool von Stargate immer gern genutzt, wollte den Code jetzt sogar noch
um eine BriefLZ-Variante erweitern.
Bin2Data (ts-soft) nutzt ja m.W. auschliesslich die ZLib ... k.A. wie man die Daten wieder entpackt.
UseBriefLZPacker() macht die EXE nur 5-6Kb grösser, da lohnt sichs auch mal nur ein 30KB .BMP zu packen.
Bei allen anderen Packern geht da der Packgewinn direkt flöten (UseZipPacker() : +75K (!) / ZLib weiss ich nicht)


Der Code oben lässt sich compilieren (naja ok ... not Filename zu Filename="" ändern)
und scheint weitgehend zu funktionieren. Aber es gibt keinen Scintilla-Output in das Editorfenster.
Mag der Code-Autor Stargate oder ein anderer "Wissender" das vielleicht fixen für PB ab 5.30 ? :praise:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tool - DataSection+Data einer Datei per Drop auf den Edi

Beitrag von STARGÅTE »

Problem ist, dass FindWindowEx_(WindowID,0,"Scintilla",0) mir seit der neuen IDE (5.30 glaube ich) keine gültige ID mehr zurück gibt, und das obwohl es immer noch "Scintilla" gibt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten