Aktuelle Zeit: 21.04.2019 00:46

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Tool - DataSection+Data einer Datei per Drop auf den Editor
BeitragVerfasst: 11.08.2011 03:34 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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:
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:
Zitat:
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:
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

_________________
Bild
 
BildBildBild


Zuletzt geändert von STARGÅTE am 12.09.2011 20:58, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 11.08.2011 17:03 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
Wenn ein Bild eine Zahl als Name hat gips Probleme mit dem Label ,gell

_________________
‮pb 5.31-3.30(x86) (windoof)7 64 pro
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 11.08.2011 17:26 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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:
; PB 3.3 !
Goto 1
Debug "Nichts"
1: Debug "Hallo "+Str(?1)


Nagut, habs nun angepasst.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 11.08.2011 18:40 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
das ging wohl bis ausschließlich 4.41

egal .. 3.3 ist ja sowas von alter Hut :mrgreen:

_________________
‮pb 5.31-3.30(x86) (windoof)7 64 pro
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 19.12.2011 13:54 
Offline

Registriert: 30.11.2010 02:34
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 19.12.2011 15:08 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
  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.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 16.09.2015 12:11 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 16.09.2015 13:43 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
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.70 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.1 (x64)
"Die Jugend von heute mit ihren Ballerspielen, hocken nur in der Bude - wir haben früher die Leute noch draußen erschossen!"
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 07.11.2015 16:54 
Offline
Benutzeravatar

Registriert: 20.07.2010 23:59
Wohnort: NRW
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:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tool - DataSection+Data einer Datei per Drop auf den Edi
BeitragVerfasst: 07.11.2015 19:08 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye