1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • SciTE - Toolsammlung: EditOperations ( RepeatChar, SwapLine, Go-nWords left/right, ... )

    • BugFix
    • 28. November 2011 um 21:34

    Neue Funktionen, s. Post #1

  • Der_Doc und BugFix haben Geburtstag

    • BugFix
    • 28. November 2011 um 10:09

    Hmm,
    da steht der Oscar extra um 4 Uhr morgens auf zum Gratulieren, Respekt. :thumbup:

    Also Vielen Dank für diese ersten Grüße und wie man sieht stimmt es: Das Internet vergißt nichts. (nicht mal Geburtstage)
    (Das Geburtstagsdatum habe ich eigentlich nur aus einem recht leidigen Grund entfernt: Die Zunahme von Identitätsdiebstahl im INet. Aus einem Forum das Geburtsdatum geholt, über Denice noch Name und Anschrift des Users holen - wenn er 'ne Website hat - und schon kannst du auf dessen Kosten in jedem Versandhaus einkaufen.)

  • SciTE - Toolsammlung: EditOperations ( RepeatChar, SwapLine, Go-nWords left/right, ... )

    • BugFix
    • 28. November 2011 um 09:59
    Zitat von progandy

    Warum baust du nicht alle vi-Befehle ein?


    Schöner Gedanke... :rolleyes:
    Die geile Tastatursteuerung ist etwas, was mir an vi schon immer sehr gefallen hat. Mal sehen, was sich da noch alles machen läßt. :thumbup:

  • SciTE - Toolsammlung: EditOperations ( RepeatChar, SwapLine, Go-nWords left/right, ... )

    • BugFix
    • 27. November 2011 um 13:20

    Hi,

    Edit 28.11.2011
    aus der einen Funktion RepeatChar habe ich nun eine kleine Sammlung gemacht. Die Syntax habe ich auch etwas verändert.
    Ich wollte mich erst an vi orientieren, habe nun aber eine eigene Syntax erstellt, die meines Erachtens nachvollziehbar ist.

    Edit 29.11.2011
    Sry, war ein kleiner Bug drin - mit "!" wurde Sequenz aktiviert und nicht abgebrochen, wenn kein Zeichen einer Sequenz folgte - gefixt.
    Neu: n-Worte links/rechts Löschen

    -- Generell: Kennzeichnung Operationen nach links(vorher): Kleinbuchstaben, nach rechts(hinterher): Großbuchstaben
    -- Trigger für alle Operationen: "!seq"
    --
    -- Wiederholen n-mal...........seq: "!COUNTrCHAR"...."!5r*" = "*****"
    -- Gehe n-Worte nach links.....seq: "!COUNTg"........"!5g" = 5 Worte nach links
    -- Gehe n-Worte nach rechts....seq: "!COUNTG"........"!5G" = 5 Worte nach rechts
    -- Lösche ein Wort links.......seq: "!w" ( w-Word )
    -- Lösche ein Wort rechts......seq: "!W"
    -- Lösche n-Worte links........seq: "!COUNTw"........"!5w" = 5 Worte links löschen
    -- Lösche n-Worte rechts.......seq: "!COUNTW"........"!5W" = 5 Worte rechts löschen
    -- Lösche Zeile nach links.....seq: "!l" ( l-Line )
    -- Lösche Zeile nach rechts....seq: "!L"
    -- Tausche Zeile mit voriger...seq: "!s" ( s-Swap )
    -- Tausche Zeile mit nächster..seq: "!S"

    EditOperations.lua(0.4)
    Code
    -- TIME_STAMP   2011-11-29 10:02:12   v 0.4
    -- by BugFix
    
    
    
    
    EvtOnChar = EventClass:new(Common)
    --------------------------------------------------------------------------------
    -- OnChar(charAdded)
    --
    -- Generell: Kennzeichnung Operationen nach links(vorher): Kleinbuchstaben, nach rechts(hinterher): Großbuchstaben
    -- Trigger operations by: "!seq"
    --
    --   repeat n-times...............seq:  "!COUNTrCHAR".."!5r*"....= "*****"
    --   go n-words left..............seq:  "!Countg"......"!5g".....= 5 words to left
    --   go n-words right.............seq:  "!CountG"......"!5G".....= 5 words to right
    --   delete one word left.........seq:  "!w"..........."!w"......= one word left delete
    --   delete n-words left..........seq:  "!COUNTw"......"!5w".....= 5 words left delete
    --   delete one word right........seq:  "!W"..........."!W"......= one word right delete
    --   delete n-words right.........seq:  "!CountW"......"!5W".....= 5 words right delete
    --   delete line to start.........seq:  "!l"
    --   delete line to end...........seq:  "!L"
    --   swap line with line before...seq:  "!s"
    --   swap line with line after....seq:  "!S"
    --
    -- Parameters:
    --    charAdded - The character typed.
    --------------------------------------------------------------------------------
    
    
    ------------------- Deklarationen ---------------------------------------
    -- Ausrufezeichen (exclamation mark) als Trigger für Operationen
    local fTrigger = false
    -- Warten auf Zahleneingabe nach Trigger
    local fGo = false
    -- Warten auf Repeat-Char
    local fRepeat = false
    -- Sammelstring Zahleneingabe
    local sNr = ''
    -- table sequences
    local tSeq = { ['w']='w',['W']='W',['l']='l',['L']='L',['g']='g',['G']='G',['s']='s',['S']='S',['r']='r' }
    -- table der Zahlen
    local tNum = { ['0']='0',['1']='1',['2']='2',['3']='3',['4']='4',['5']='5',['6']='6',['7']='7',['8']='8',['9']='9' }
    -- Zeichen, die (wenn Skript dafür aktiviert) paarig ausgegeben werden
    tPairs  = { ['(']='(',['{']='{',['[']='[',['"']='"',["'"]="'" }
    ------------------------------------------------------------------------
    
    
    ------------------------------------------------------------------------
    function SetVarsBack()
    	fTrigger = false
    	fGo = false
    	fRepeat = false
    	sNr = ''
    end
    ------------------------------------------------------------------------
    
    
    ------------------------------------------------------------------------
    function SwapLine(_line, _direction)
    	editor:BeginUndoAction()
    	local caret = editor.CurrentPos
    	local diff, pos, textSwap, lenSwap
    	local textBase, lenBase = editor:GetLine(_line)
    	if lenBase == nil then lenBase = 0 end
    	if _direction == nil then _direction = 1 end
    	textSwap, lenSwap = editor:GetLine(_line +(_direction))
    	if lenSwap == nil then lenSwap = 0 end
    	editor:GotoLine(_line)
    	pos = editor.CurrentPos
    	diff = caret - pos
    	editor:SetSel(pos, pos +lenBase)
    	editor:ReplaceSel(textSwap)
    	editor:GotoLine(_line +(_direction))
    	pos = editor.CurrentPos
    	editor:SetSel(pos, pos +lenSwap)
    	editor:ReplaceSel(textBase)
    	editor:GotoLine(_line)
    	editor:GotoPos(editor.CurrentPos + diff)
    	editor:EndUndoAction()
    end
    ------------------------------------------------------------------------
    
    
    ------------------------------------------------------------------------
    function RepeatChar(_pos, _charAdded)
    	editor:BeginUndoAction()
    	editor:SetSel(_pos -(string.len(sNr) +3) , _pos)
    	editor:ReplaceSel(string.rep(_charAdded, tonumber(sNr)))
    	if tPairs[_charAdded] ~= nil then _pos = editor.CurrentPos editor:SetSel(_pos, _pos+1) editor:ReplaceSel('') end
    	editor:EndUndoAction()
    	SetVarsBack()
    end
    ------------------------------------------------------------------------
    
    
    ------------------------------------------------------------------------
    function DeleteSeq(_pos, _addLen)
    	if _addLen == nil then _addLen = 0 end
    	editor:SetSel(_pos -(2 +_addLen), _pos)
    	editor:ReplaceSel('')
    end
    ------------------------------------------------------------------------
    
    
    ------------------------------------------------------------------------
    function EvtOnChar:OnChar(_charAdded)
    	local pos = editor.CurrentPos
    	if fRepeat == true then
    		RepeatChar(pos, _charAdded) SetVarsBack()                         -- Zeichen sNr -mal wiederholen
    	elseif fTrigger == true then                                          -- Ausrufezeichen wurde vorher gesetzt, Trigger ist aktiv
    		if tNum[_charAdded] ~= nil then                                   -- Ziffer eingegeben
    			if fRepeat == false and fGo == false then                     -- kein Repeat oder Go aktiv
    				sNr = sNr..tNum[_charAdded]                               -- Ziffer zum Zahlenstring hinzufügen
    			elseif fRepeat == true then                                   -- diese Ziffer ist das zu wiederholende Zeichen
    				RepeatChar(pos, _charAdded) SetVarsBack()                 -- Ziffer sNr -mal wiederholen
    			end
    		elseif tSeq[_charAdded] ~= nil then                               -- Zeichen einer Sequenz eingegeben, Aktion ausführen
    			if _charAdded == 'w' then
    				if sNr ~= '' then                                         -- sNr -Worte links löschen
    					DeleteSeq(pos, string.len(sNr)) for i = 1, tonumber(sNr) do editor:DelWordLeft() end
    				else
    					DeleteSeq(pos) editor:DelWordLeft()                   -- ein Wort links löschen
    				end
    			elseif _charAdded == 'W' then
    				if sNr ~= '' then                                         -- sNr -Worte rechts löschen
    					DeleteSeq(pos, string.len(sNr)) for i = 1, tonumber(sNr) do editor:DelWordRight() end
    				else
    					DeleteSeq(pos) editor:DelWordRight()                  -- ein Wort rechts löschen
    				end
    			elseif _charAdded == 'l' then                                 -- Zeile bis zum Anfang löschen
    				editor:DelLineLeft()
    			elseif _charAdded == 'L' then                                 -- Zeile bis zum Ende löschen
    				DeleteSeq(pos) editor:DelLineRight()
    			elseif _charAdded == 's' then                                 -- Zeile mit voriger tauschen
    				DeleteSeq(pos) SwapLine(editor:LineFromPosition(pos), -1)
    			elseif _charAdded == 'S' then                                 -- Zeile mit nächster tauschen
    				DeleteSeq(pos) SwapLine(editor:LineFromPosition(pos))
    			elseif _charAdded == 'g' or _charAdded == 'G' then            -- gehe sNr -Worte nach links/rechts
    				if sNr == '' then SetVarsBack() return end
    				DeleteSeq(pos, string.len(sNr))
    				if _charAdded == 'g' then for i = 1, tonumber(sNr) do editor:WordLeft() end end
    				if _charAdded == 'G' then for i = 1, tonumber(sNr) do editor:WordRight() end end
    			elseif _charAdded == 'r' then                                 -- Repeat aktivieren, nächstes Zeichen wird sNr -mal wiederholt
    				fRepeat = true return false
    			end
    			SetVarsBack()
    		else
    			SetVarsBack()
    		end
    	end
    	if _charAdded == '!' then fTrigger = true end                         -- Trigger wird aktiviert
    	return false
    end  --> EvtOnChar
    ------------------------------------------------------------------------
    Alles anzeigen

    Integration in SciTE:
    - Das Skript im SciTE-Ordner speichern.
    - Eintrag im "SciTEStartup.lua" vornehmen: LoadLuaFile("RepeatChar.lua")LoadLuaFile("EditOperations.lua")
    Die Datei sollte dann etwa so aussehen:

    SciTEStartup.lua
    Code
    -- TIME_STAMP   2011-11-27 11:51:04   v 0.1
    
    
    --------------------------------------------------------------------------------
    -- SciTE startup script.
    --------------------------------------------------------------------------------
    -- A table listing all loaded files.
    LoadLuaFileList = { }
    --------------------------------------------------------------------------------
    -- LoadLuaFile(file, directory)
    --
    -- Helper function for easily loading Lua files.
    --
    -- Parameters:
    --	file - The name of a Lua file to load.
    --	directory - If specified, file is looked for in that directory.  By default,
    -- 		this directory is $(SciTEDefaultHome)\Lua.
    --------------------------------------------------------------------------------
    function LoadLuaFile(file, directory)
    	if directory == nil then
    		directory = props["SciteDefaultHome"] .. "\\Lua\\"
    	end
    	table.insert(LoadLuaFileList, directory .. file)
    	dofile(directory .. file)
    end	-- LoadLuaFile()
    
    
    -- Load all the Lua files.
    LoadLuaFile("Class.lua")	-- Always load first.
    LoadLuaFile("Common.lua")	-- Always load second.
    LoadLuaFile("AutoItPixmap.lua")
    LoadLuaFile("AutoHScroll.lua")
    LoadLuaFile("AutoItAutoComplete.lua")
    LoadLuaFile("LoadSession.lua")
    LoadLuaFile("AutoItIndentFix.lua")
    LoadLuaFile("EdgeMode.lua")
    LoadLuaFile("SmartAutoCompleteHide.lua")
    LoadLuaFile("Tools.lua")
    LoadLuaFile("AutoItTools.lua")
    LoadLuaFile("AutoItGotoDefinition.lua")
    --~ LoadLuaFile("AutoCloseBraces.lua")  -- don't use together with "EdgingSelection.lua"
    
    
    -- Start up the events (Calls OnStartup()).
    EventClass:BeginEvents()
    
    
    -- Files are using EventClass must load after Events startup
    LoadLuaFile("AutoStampSaveVersion.lua")  -- use Event: "OnBeforeSave"
    LoadLuaFile("MyDebug.lua")
    LoadLuaFile("EdgingSelection.lua")       -- use Event: "OnKey"
    LoadLuaFile("EditOperations.lua")        -- use Event: "OnChar"
    Alles anzeigen

    Anschließend SciTE neu starten (oder wenn vorhanden das ReloadStartup ausführen), dann ist das Tool aktiv.

    Dateien

    EditOperations[0.4].lua 7,04 kB – 412 Downloads
  • [Beispiel] - Fenster Sliden (hinein- hinausgeleiten) auf dem Desktop - optimiert für Multi-Monitorlösungen

    • BugFix
    • 26. November 2011 um 11:48

    Erinnert mich an eine Bastelei, die ich vor ~4,5 Jahren mal gemacht habe: Slide Window

  • Hintergrundfarbe von GroupBox ändern

    • BugFix
    • 25. November 2011 um 21:50
    Zitat von Crys

    Wir das Skript dadurch nicht bedeutend langsamer, wenn ich das so mache?


    Kaum, denn schließlich ist jedes Control real ein Childwindow. Somit sollte es keine Rolle spielen, wenn du das ebenso händelst.

  • Im Array Einträge suchen, die vom anderen Array stammen und bei Misserfolg Datei kopieren.

    • BugFix
    • 25. November 2011 um 10:42

    Sag mal, hast du Angst davor, die Funktion aufzurufen? :whistling:
    Probier doch einfach aus und schau, was du als Ergebnis bekommst.
    Bsp.
    - dein Array1 (Quellordner) enthält: [datei1,datei2,datei3,datei4,datei5,datei6,datei7]
    - dein Array2 (Zielordner) enthält: [datei1,datei2,datei3,datei4]

    Somit erwartest du als Ergebnis: "datei5,datei6,datei7" ==> Elemente, die NUR in Menge 1 vorkommen.

    Ruf die Funktion auf:

    [autoit]

    $ErgebnisArray = _GetIntersection($Array1, $Array2)

    [/autoit]


    Was sagt dir die Funktionsbeschreibung?

    Zitat

    ; Description:: Aus 2 gegebenen Mengen werden ermittelt
    ; - die Schnittmenge (Elemente, die in beiden Mengen enthalten sind)
    ; - die Differenzmenge 1 (Elemente, die nur in Menge 1 vorkommen)
    ; - die Differenzmenge 2 (Elemente, die nur in Menge 2 vorkommen)
    ;.....
    ; Return Value(s): Erfolg 2D-Array [n][0]=Schnittmenge
    ; [n][1]=Differenzmenge 1
    ; [n][2]=Differenzmenge 2

    Alles anzeigen


    Also ist das, was du suchst, im Ergebnissarry in der Spalte Nummer 2 (Index 1) zu finden.

    [ Ich frage mich ernsthaft, wozu ich meine Funktionen so präzise kommentiere. Wenn es keiner liest, kann ich mir den Aufwand auch sparen. ;( ]

  • Im Array Einträge suchen, die vom anderen Array stammen und bei Misserfolg Datei kopieren.

    • BugFix
    • 24. November 2011 um 22:41

    Ruf die Funktion mit deinen beiden Arrays auf, dann erhältst du ein 2D-Array mit den Unterschieden. Ist doch in dem Bsp. das bei der Funktion bei ist zu sehen, wie es aufgerufen wird.

  • Im Array Einträge suchen, die vom anderen Array stammen und bei Misserfolg Datei kopieren.

    • BugFix
    • 24. November 2011 um 22:23

    Wenn du 2 1D-Arrays hast, kannst du diese z.B. hiermit vergleichen.

  • Eigenes Tab-Register (OwnTab-UDF)

    • BugFix
    • 23. November 2011 um 23:44

    Hallo funkey,
    ich habe die UDF mal um einen Parameter erweitert. Du kannst jetzt einen Funktionsnamen übergeben, der genutzt wird für die Verwendung der Funktion im OnEventMode. Ohne Funktionsnamen (Leerstring) arbeitet die Funktion, wie vorher.
    Aber vielleicht kannst du mal draufschauen, warum es beim Beenden dann zu einem fehlerhaften Ende kommt. Soweit habe ich mich jetzt noch nicht in deinen Code hineingekniet.
    Angehängt die geänderte OwnTab.au3 und das OnEvent-Bsp.

    Dateien

    OwnTab.au3 19,67 kB – 296 Downloads OwnTab_Example_OnEvent.au3 7,36 kB – 299 Downloads
  • OpenSource Programm zum erstellen von Hilfedateien

    • BugFix
    • 21. November 2011 um 22:42

    Ich verwende HelpMaker, enthält auch noch einen schönen IconMaker ;)

  • Kompletter Anfänger brauch Hilfe

    • BugFix
    • 19. November 2011 um 20:43

    Liebe Mit-User,
    ihr solltet euch entscheiden, was wir wollen:
    - eure (möglicherweise mit Glaskugel erhaltene) Deutung von Threadhintergründen ist das Maß aller Dinge
    oder
    - der hier gepostete Inhalt ist gültig.

    Ich plädiere ganz klar für Letzteres (und lasse Ersteres nicht zu)!
    Solange ein Thread nicht mit dem dort veröffentlichten Inhalt gegen unsere Regeln verstößt, werde ich ihn auch nicht schließen. Nicht aufgrund von Vermutungen.
    Wenn eure Glaskugel sagt, dass dies ein Bot ist - dann bietet halt keinen Support. Aber meldet bitte nicht jeden Thread wegen eures "Bauchgefühls".

    Danke.

  • _ChooseFont ohne Schriftgrad, größe und Farbe aufrufen

    • BugFix
    • 18. November 2011 um 15:24
    Zitat von oh-ha

    brauche nur die Schriftenauswahl.


    Na dann rufst du eben nur

    [autoit]

    _ChooseFont("Arial") ; oder welche Schriftart es sein soll

    [/autoit]

    auf. Alle Parameter dieser Funktion sind optional - steht auch so in der Hilfe - Lesen bildet. ;)

    Ahh, mir schwant, was du meinst: Im Auswahl-Dialog soll nur die Schriftart stehen? Wenn du das möchtest,mußt du es selbst erstellen.

  • GUICtrlSetData mit GUICtrlRead auslesen

    • BugFix
    • 18. November 2011 um 15:04

    Warum um Himmels Willen verwendest du hier RegExp?
    Da hast du nun schon das Glück, dass die Daten sauber geordnet in einer csv-Datei vorliegen und recht leicht in eine Array gelesen werden können - weshalb willst du das per RegEx lösen? ;)

    So kannst du alles in ein schönes 3D-Array lesen (Bsp. Datei ek.csv)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    $sPath = '..\ek.csv'
    Local $aAll
    _FileReadToArray($sPath, $aAll)
    Local $aStadt[$aAll[0]][7][4]
    ;~ $aStadt[X][0][0] = Stadt
    ;~ $aStadt[X][Y][0] = Ware
    ;~ $aStadt[X][Y][1] = Stufe
    ;~ $aStadt[X][Y][2] = Preis
    ;~ $aStadt[X][Y][3] = Gewicht

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $aSplit, $n
    For $i = 1 To $aAll[0]
    $aSplit = StringSplit($aAll[$i], ',')
    $aStadt[$i-1][0][0] = $aSplit[1] ; == Stadt
    $n = 1
    For $j = 2 To $aSplit[0] Step 4
    $aStadt[$i-1][$n][0] = $aSplit[$j] ; == Ware
    $aStadt[$i-1][$n][1] = $aSplit[$j+1] ; == Stufe
    $aStadt[$i-1][$n][2] = $aSplit[$j+2] ; == Preis
    $aStadt[$i-1][$n][3] = $aSplit[$j+3] ; == Gewicht
    $n += 1
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; == Ausgabe in Konsole
    For $i = 0 To UBound($aStadt) -1
    For $j = 1 To 6
    $s = $aStadt[$i][0][0] & ' - ' & $aStadt[$i][$j][0] & ' - '
    ConsoleWrite( $s & 'Stufe: ' & $aStadt[$i][$j][1] & @CRLF )
    ConsoleWrite( $s & 'Preis: ' & $aStadt[$i][$j][2] & @CRLF )
    ConsoleWrite( $s & 'Gewicht: ' & $aStadt[$i][$j][3] & @CRLF )
    Next
    Next

    [/autoit]
  • Ressourcencontainer

    • BugFix
    • 17. November 2011 um 18:21
    Zitat von BadBunny

    ich habs noch nie versucht eine Datei in eine Dll zu packen, aber ist es wirklich so schwer? Bzw ist es schwerer als das was du da gemacht hast

    Es ist nicht schwer Daten mit z.B. Ressouce-Editor in einer Dll zu verpacken - aber versuch das mal dynamisch zu machen, sprich bei deinem User im installierten Programm. Das geht in die Hose.
    Wenn du z.B. ein Programm hast, das diverse Module verwaltet und für jedes Modul gibt es z.B. eine Bild auf der GUI, dann mußt du für ein neues Modul auch ein neues Bild nachladen können. Das macht dein Programm dynamisch.

    Zitat von BadBunny

    aber so muss man doch immer die .rbn neugeladen werden und wenn z.B. 20 Bilder, Musik etc drin ist dann wäre es doch schlecht die alle nochmal neu zu laden oder nicht

    Mann muß doch nur das aktualisieren, was erneuert oder neu eingefügt werden soll.

    Zitat von BadBunny

    doch was wäre wenn aus Zufall in dem Binärcode <xx.xx> drinstehen würde, dann würde, das was sicherlich durch StringRegExp returnt wird, durcheinander gebracht werden oder nicht

    Das Programm generiert den Binärcode aus den angegeben Dateien, wie soll dann solch Mist drin stehen? :D

  • ISN AutoIt Studio

    • BugFix
    • 17. November 2011 um 13:37
    Zitat von Cheater Dieter

    Kleine Frage: Lässt sich das denn eigendlich deaktivieren? Die Funktion regt mich immer auf, wenn ich ein Minus schreiben will (mache ich ansonsten mit dem Nummernblock) und dann wird eine Zeile auskommentiert.


    Ja, das kannst du abschalten:
    Öffne in SciTE--Optionen--Globale Einstellungsdatei (C:\Program Files\AutoIt3\SciTE\SciTEGlobal.properties)
    Dort findest du folgenden Block:

    Code
    # User defined key commands
    user.shortcuts=\
    Ctrl+Shift+V|IDM_PASTEANDDOWN|\
    Ctrl+PageUp|IDM_PREVFILE|\
    Ctrl+PageDown|IDM_NEXTFILE|\
    KeypadPlus|IDM_EXPAND|\
    KeypadMinus|IDM_BLOCK_COMMENT|\
    Ctrl+F1|IDM_HELP_SCITE|


    dann einfach die Zeile für Keypad Minus auskommentieren:

    Code
    #KeypadMinus|IDM_BLOCK_COMMENT|\
  • Inhalt eines Editfeldes Drucken lassen

    • BugFix
    • 17. November 2011 um 12:01
    Zitat von BLinz

    wie der Parameter für das drucken war müsste man mal eben googln


    Oder einfach mal in die Registry schauen. ;)
    Zu jedem Dateityp sind im CLASSES_ROOT unter Shell die Aufrufe (open, print etc.) hinterlegt.
    Für Wordpad-Dokumente findest du den Aufruf unter folgendem Schlüssel:
    HKEY_CLASSES_ROOT\Wordpad.Document.1\shell\print\command
    also: '"Pfad_wordpad.exe" /p "Pfad_zu_druckende_Datei"'

  • Ressourcencontainer

    • BugFix
    • 17. November 2011 um 00:56

    Hi,
    mit FileInstall oder Speichern des Binärcodes von Ressourcen direkt im Skript kann ich nur eine vorher festgelegte Quantität und Qualität dieser Ressourcen verwenden. D.h., wenn ich z.B. ein Bild aktualisieren möchte, muß das Skript dann auch neu kompiliert werden.
    Kann man natürlich umgehen, wenn man die Ressourcen auslagert. Dabei ist es jedoch nicht sehr schick, wenn eine Handvoll Dateien im Verzeichnis "rumlungern". Mit nur einer ist das doch viel eleganter.
    Und um es so einfach, wie möglich handhaben zu können, sollte es auch nicht unbedingt in einer Dll landen.
    Deshalb habe ich zwei Tools erstellt, einmal zum Einfügen/Austauschen von Ressourcen in einem Ressourcencontainer und einmal um gezielt Ressourcen aus diesem Container in eine Zieldatei zu installieren.
    Das Erstellen des Containers kann per Kommandozeile oder GUI erfolgen. Bei der GUI-Variante ist sowohl Drag&Drop als auch Auswahl per FileOpenDialog (beides mit Mehrfachauswahl) möglich.
    Soll eine Komponente aktualisiert werden: Container aufrufen mit der Komponente und ein Überschreibflag setzen.
    Dateiname.Suffix der eingefügten Komponenten sind auch die Identifier um die jeweilige Komponente wieder abzurufen.
    Es wird bei jedem Erstellen/Hinzufügen von Komponenten auf eventuell bereits vorhandene Doppel dieser Komponenten geprüft. Ist das Überschreibflag nicht gesetzt, bleiben die vorhandenen Versionen erhalten.
    Wenn ihr mal vergessen habt, was eigentlich im Container enthalten ist: Mit "SourceFromContainer.exe <Ressourcendatei> LIST" werden die Identifier der Komponenten ausgelesen und in die Zwischenablage übergeben.
    Für den Container verwende ich das Suffix *.rbn ( ressourcen binär ). Eine Ressourcencontainer ist folgendermaßen aufgebaut:

    Code
    <Dateiname.Suffix>
    Binärstring_dieser_Datei
    </Name.Suffix>


    Das heißt also auch: NIEMALS eine Containerdatei mit SciTE öffnen! Bei kleineren Dateien mag das noch gehen, aber schon unter 100 kB ist der Binärstring deutlich länger als das, was SciTE verkraften kann. Es schmiert dann einfach ab.

    Es spielt keine Rolle, was ihr in den Container packt. Bilder, Texte für Controls, Sounddateien - alles kann rein. Nur sollte man das nicht als Bibliothek oder Mediathek betrachten. Dazu ist es nicht gedacht. Das kleine Gerümpel, das sonst im Programmverzeichnis dümpelt, soll einen Ruheplatz finden. ;)

    Erstellen eines Ressourcen Containers per Kommandozeile:

    Spoiler anzeigen
    [autoit]

    $sPathRessource = "C:\Users\Standard\Code_AutoIt\TEST\Ressourcencontainer\RessContainer1.rbn"
    $sPathDigi = 'C:\Pict\digicam_blau_200x150.jpg'
    $sPathNPP = 'C:\Pict\Ico\npp_64x64.ico'
    $sPathVideo = 'C:\Pict\Ico\videocam_87x96.ico'

    [/autoit] [autoit][/autoit] [autoit]

    RunWait("C:\Tools\SourceToContainer.exe " & $sPathRessource & " " & $sPathDigi & " " & $sPathNPP & " " & $sPathVideo)

    [/autoit]
    SourceToContainer(0.1) Kommandozeile und GUI
    [autoit]

    #Region - TimeStamp
    ; 2011-11-17 00:10:37 v 0.1
    #EndRegion - TimeStamp
    #include-once
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #cs
    MUSTER AUFRUF:
    "..\SourceToContainer.exe <Ressourcendatei> <Quelldatei_1> <Quelldatei_2..n> [ optional: Überschreibflag = 1 ]

    [/autoit] [autoit][/autoit] [autoit]

    "..\SourceToContainer.exe C:\bla\Ressource.rbn C:\Pict\picture1.jpg C:\Pict\picture2.jpg C:\Pict\picture3.jpg"
    mit Überschreib-Flag
    "..\SourceToContainer.exe C:\bla\Ressource.rbn C:\Pict\picture2.jpg 1"
    #ce
    ;===============================================================================
    ; Script Name......: SourceToContainer.au3
    ; Description......: Quelldatei(en) als Binärstring in eine Ressourcendatei schreiben (neu erstellen od. hinzufügen/überschreiben), Dateityp (*.rbn) (RessourceBiNär)
    ; Dateiname.Suffix als Identifier
    ; Existiert eine Ressource bereits, wird diese bei gesetztem Überschreib-Flag überschrieben. Ohne Flag bleibt die vorhandene Version erhalten.
    ; Mit SourceFromContainer.au3 wird aus der Ressourcendatei dann die gewünschte Quelldatei wieder ausgelesen und installiert.
    ; AutoIt version...: 3.3.6.1
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Global $sPathRess, $aFiles[1], $fOverwrite = False

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; == Kommandozeilen-Variante
    If $CMDLINE[0] Then ; == [1]=Pfad_Ressourcendatei; [2..[0]-1]=Pfade_Quelldateien; [[0]-1]=optional_Flag_Overwrite(1) - Default nicht gesetzt
    $sPathRess = $CMDLINE[1]
    ReDim $aFiles[$CMDLINE[0] -1]
    For $i = 2 To $CMDLINE[0]
    $aFiles[$i-2] = $CMDLINE[$i]
    If $CMDLINE[$i] = 1 Then
    $fOverwrite = True
    ReDim $aFiles[$CMDLINE[0] -2]
    ExitLoop
    EndIf
    Next
    __AddOrCreateBin($sPathRess, $aFiles, $fOverwrite)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; == GUI-Variante
    $hMain = GUICreate(' Ressourcencontainer Erstellen oder Dateien Hinzufügen', 600, 190, -1, -1, -1, $WS_EX_ACCEPTFILES)
    GUICtrlCreateGroup(' Quelldatei(en) Pfad(e) ', 10, 10, 580, 60)
    $inSource = GUICtrlCreateInput('', 20, 35, 525, 20)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $btSource = GUICtrlCreateButton('...', 555, 35, 25, 20)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlCreateGroup(' Ressourcencontainer [ Zieldatei (*.rbn) ] ', 10, 80, 580, 60)
    $inDest = GUICtrlCreateInput('', 20, 105, 525, 20)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $btDest = GUICtrlCreateButton('...', 555, 105, 25, 20)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    $btRun = GUICtrlCreateButton('Start', 500, 155, 80, 20)
    $cbOverwrite = GUICtrlCreateCheckbox(' Ressourcen, wenn bereits vorhanden, überschreiben', 20, 158, 300, 17)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    WinSetOnTop($hMain, '', 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btSource
    WinSetOnTop($hMain, '', 0)
    $sRead = FileOpenDialog('Quelldatei(en)', @CommonFilesDir, 'Alle (*.*)', 7)
    If $sRead <> '' Then
    $aTmp = StringSplit($sRead, '|')
    If $aTmp[0] = 1 Then
    GUICtrlSetData($inSource, $sRead)
    Else
    $sRead = ''
    For $i = 2 To $aTmp[0]
    $sRead &= $aTmp[1] & '\' & $aTmp[$i] & '|'
    Next
    GUICtrlSetData($inSource, StringTrimRight($sRead, 1))
    EndIf
    EndIf
    WinSetOnTop($hMain, '', 1)
    Case $btDest
    WinSetOnTop($hMain, '', 0)
    $sRead = FileOpenDialog('Ressourcendatei', @CommonFilesDir, 'Ressource Binär (*.rbn)', 10)
    If $sRead <> '' Then
    If StringRight($sRead, 4) <> '.rbn' Then $sRead &= '.rbn'
    GUICtrlSetData($inDest, $sRead)
    EndIf
    WinSetOnTop($hMain, '', 1)
    Case $btRun
    If GUICtrlRead($inSource) <> '' Then
    $aFiles = StringSplit(GUICtrlRead($inSource), '|', 2)
    If GUICtrlRead($inDest) <> '' Then
    $sPathRess = GUICtrlRead($inDest)
    If BitAND(GUICtrlRead($cbOverwrite), $GUI_CHECKED) Then $fOverwrite = True
    __AddOrCreateBin($sPathRess, $aFiles, $fOverwrite)
    Else
    GUICtrlSetData($inDest, 'D E S T I N A T I O N !!!')
    Sleep(600)
    GUICtrlSetData($inDest, '')
    EndIf
    Else
    GUICtrlSetData($inSource, 'S O U R C E !!!')
    Sleep(600)
    GUICtrlSetData($inSource, '')
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func __AddOrCreateBin($sPathRess, ByRef $aFiles, $fOverwrite=False)
    Local $hFile, $bRead, $sToWrite = '', $sFileName, $sFileErr = '', $sMsg = "erstellt."
    Local $n = UBound($aFiles), $nErr = 0, $aContent, $aExisting[1][2] = [[0]], $ret, $x
    If StringRight($sPathRess, 4) <> '.rbn' Then $sPathRess &= '.rbn'
    If FileExists($sPathRess) Then
    $sToWrite = FileRead($sPathRess)
    $sMsg = "erweitert."
    ; == Check ob Dateien bereits vorhanden
    $aContent = StringSplit($sToWrite, @CRLF, 1)
    For $i = 0 To UBound($aFiles) -1
    $ret = __RessourceGetLine($aContent, __GetFileName($aFiles[$i]))
    If $ret > 0 Then
    $aExisting[0][0] += 1
    ReDim $aExisting[$aExisting[0][0] +1][2]
    $aExisting[$aExisting[0][0]][0] = $i
    $aExisting[$aExisting[0][0]][1] = $ret
    EndIf
    Next
    ; == wenn Überschreibmodus und Doppel vorhanden ==> Doppel löschen durch Kopieren bleibender Inhalte in $sToWrite
    If $fOverwrite And $aExisting[0][0] > 0 Then
    Local $sTmpWrite = ''
    For $i = 1 To $aContent[0] -3 Step 3
    $x = 0
    For $j = 1 To $aExisting[0][0]
    If $aExisting[$j][1] = $i Then
    $x = 1
    ExitLoop
    EndIf
    Next
    If $x = 0 Then
    $sTmpWrite &= $aContent[$i] & @CRLF & $aContent[$i+1] & @CRLF & $aContent[$i+2] & @CRLF
    EndIf
    Next
    $sToWrite = $sTmpWrite
    EndIf
    EndIf
    For $i = 0 To UBound($aFiles) -1
    If Not FileExists($aFiles[$i]) Then
    $sFileErr &= $aFiles[$i] & @CRLF
    $nErr += 1
    ContinueLoop
    EndIf
    If $aExisting[0][0] > 0 Then
    $x = 0
    For $j = 1 To $aExisting[0][0]
    If $aExisting[$j][0] = $i Then
    $x = 1
    ExitLoop
    EndIf
    Next
    If ($x = 1) And (Not $fOverwrite) Then ; == Doppel u. kein $fOverwrite ==> nicht hinzufügen
    $n -= 1 ; == Dateizähler für Msg
    ContinueLoop
    EndIf
    EndIf
    $hFile = FileOpen($aFiles[$i], 16) ; == es existieren Doppel, wenn $fOverwrite, wurden diese gelöscht ==> müssen neu hinzugefügt werden
    $bRead = FileRead($hFile)
    FileClose($hFile)
    $sFileName = __GetFileName($aFiles[$i])
    $sToWrite &= '<' & $sFileName & '>' & @CRLF & _ ; == <Name.Suffix>
    $bRead & @CRLF & _ ; == Binärstring
    '</' & $sFileName & '>' & @CRLF ; == </Name.Suffix>
    Next
    If $sToWrite <> '' Then
    $hFile = FileOpen($sPathRess, 2)
    FileWrite($hFile, $sToWrite)
    FileClose($hFile)
    EndIf
    If Not $nErr Then
    MsgBox(262208,"Ressourcen Container","Die Ressourcendatei " & @CRLF & $sPathRess & @CRLF & "wurde mit " & $n & " Datei(en) " & $sMsg)
    Else
    $sMsg = "Von " & $n & " Datei(en) waren " & $nErr & " Datei(en) unter dem angegebenen Pfad nicht vorhanden:" & @CRLF & $sFileErr & @CRLF & "Die Ressourcen Datei wurde "
    Select
    Case ($sToWrite = '') And ($n = $nErr)
    $sMsg &= 'nicht erstellt!'
    Case $sToWrite = ''
    $sMsg &= 'ohne die angeführte(n) Datei(en) erstellt!'
    Case ($sToWrite <> '') And ($n = $nErr)
    $sMsg &= 'nicht erweitert!'
    Case $sToWrite <> ''
    $sMsg &= 'ohne die angeführte(n) Datei(en) erweitert!'
    EndSelect
    MsgBox(262192,"Ressourcen Datei - Fehler", $sMsg)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func __GetFileName($sFullPath)
    Return StringTrimLeft($sFullPath, StringInStr($sFullPath, '\', 1, -1))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func __RessourceGetLine(ByRef $aContent, $sSearch)
    Local $iLine = 0
    For $i = 1 To $aContent[0] Step 3
    If $aContent[$i] = '<' & $sSearch & '>' Then
    $iLine = $i
    ExitLoop
    EndIf
    Next
    Return $iLine
    EndFunc

    [/autoit]

    Dateien aus dem Ressourcen Container in das TempDir installieren:

    Spoiler anzeigen
    [autoit]

    $sPathRessource = "C:\Users\Standard\Code_AutoIt\TEST\Ressourcencontainer\RessContainer1.rbn"
    $sFileDigi = 'digicam_blau_200x150.jpg'
    $sFileNPP = 'npp_64x64.ico'
    $sFileVideo = 'videocam_87x96.ico'

    [/autoit] [autoit][/autoit] [autoit]

    RunWait("C:\Tools\SourceFromContainer.exe " & $sPathRessource & " " & $sFileDigi & " " & @TempDir & "\" & $sFileDigi)
    RunWait("C:\Tools\SourceFromContainer.exe " & $sPathRessource & " " & $sFileNPP & " " & @TempDir & "\" & $sFileNPP)
    RunWait("C:\Tools\SourceFromContainer.exe " & $sPathRessource & " " & $sFileVideo & " " & @TempDir & "\" & $sFileVideo)

    [/autoit]
    SourceFromContainer(0.1) Kommandozeile
    [autoit]

    #Region - TimeStamp
    ; 2011-11-17 00:09:59 v 0.1
    #EndRegion - TimeStamp

    [/autoit] [autoit][/autoit] [autoit]

    #cs
    MUSTER AUFRUF:
    "..\SourceFromContainer.exe <Ressourcendatei> <Identifier-Ressource> <Installationspfad>"

    [/autoit] [autoit][/autoit] [autoit]

    "..\SourceFromContainer.exe C:\bla\Ressource.rbn picture1.jpg " & @TempDir & "\picture1.jpg"

    [/autoit] [autoit][/autoit] [autoit]

    AUFLISTUNG der Ressourcen eines Containers:
    "..\SourceFromContainer.exe <Ressourcendatei> LIST"

    [/autoit] [autoit][/autoit] [autoit]

    "..\SourceFromContainer.exe C:\bla\Ressource.rbn LIST"
    schreibt Ressourcen-Identifier in die Zwischenablage:
    Pict1.jpg
    Message1.txt
    Program1.ico
    #ce

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Script Name......: SourceFromContainer.au3
    ; Description......: Binärstring (Dateiname.Suffix als Identifier) aus Ressourcendatei lesen und damit Zieldatei erstellen (neu erstellen od. hinzufügen/überschreiben)
    ; Ressourcencontainer [Dateityp (*.rbn)] muß mit SourceToContainer.au3 erstellt worden sein
    ; Ressourcen Identifier eines Containers lassen sich mit LIST in die Zwischenablage ausgeben
    ; AutoIt version...: 3.3.6.1
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit]

    If $CMDLINE[0] Then ; == [1]=Pfad_Ressourcendatei; [2]=zu_verwendende_Datei_aus_dem_Container; [3]=Installationspfad
    Local $sPathRess, $sFileName, $sPathInstall, $aContent, $hFileOut, $sRessourcen = ''
    $sPathRess = $CMDLINE[1]
    If Not FileExists($sPathRess) Then Exit MsgBox(262192, 'Fehler', 'Quelldatei nicht vorhanden!')
    $sFileName = $CMDLINE[2]
    If $sFileName <> 'LIST' Then $sPathInstall = $CMDLINE[3]
    $aContent = StringSplit(FileRead($sPathRess) , @CRLF, 1)
    For $i = 1 To $aContent[0] -3 Step 3
    If $sFileName = 'LIST' Then
    $sRessourcen &= StringTrimLeft(StringTrimRight($aContent[$i], 1) , 1) & @CRLF
    ContinueLoop
    EndIf
    If $aContent[$i] = '<' & $sFileName & '>' Then
    $hFileOut = FileOpen($sPathInstall, 2+8+16)
    FileWrite($hFileOut, Binary($aContent[$i+1]))
    FileClose($hFileOut)
    Exit
    EndIf
    Next
    If $sFileName = 'LIST' Then Exit ClipPut($sRessourcen)
    Exit MsgBox(262192, 'Fehler', '"' & $sFileName '" nicht im Ressourcencontainer enthalten!')
    EndIf

    [/autoit]

    Edit 17.11.2011:
    Hier mal noch ein Muster, wie man ein Skript gestalten kann, um die Ressourcen mit einem einfachen Kommandozeilenaufruf upzudaten oder zu erweitern.

    Spoiler anzeigen
    [autoit]

    ; == die Tools per FileInstall im Skript verfügbar machen
    FileInstall("C:\Tools\SourceToContainer.exe", @TempDir & "\SourceToContainer.exe")
    FileInstall("C:\Tools\SourceFromContainer.exe", @TempDir & "\SourceFromContainer.exe")
    Local $STCexe = @TempDir & "\SourceToContainer.exe" ; == für Updates und Hinzufügen von Ressourcen
    Local $SFCexe = @TempDir & "\SourceFromContainer.exe" ; == zum Laden der Ressourcen

    [/autoit] [autoit][/autoit] [autoit]

    ; == Pfad Ressourcencontainer
    Local $sPathRessource = @ScriptDir & "\RessContainer1.rbn"

    [/autoit] [autoit][/autoit] [autoit]

    ; == UPDATEN von Ressourcen, Kommandozeilenaufruf: "Skript.exe UPDATE <Pfad_zur_neuen_Version_von_Datei_1> <Pfad_zur_neuen_Version_von_Datei_2...n>"
    ; == HINZUFÜGEN von neuen Ressourcen, analog: "Skript.exe ADD <Pfad_zur_Datei_X> <Pfad_zur_Datei_Y...n>"
    If $CMDLINE[0] Then
    If StringInStr('UPDATE ADD', $CMDLINE[1]) Then
    Local $sCmd = $STCexe & " " & $sPathRessource
    For $i = 2 To $CMDLINE[0]
    $sCmd &= " " & $CMDLINE[$i]
    Next
    If $CMDLINE[1] = 'UPDATE' Then $sCmd &= " 1"
    RunWait($sCmd)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; == alle Identifier des Containers in Zwischenablage laden und als Array speichern
    RunWait($SFCexe & " " & $sPathRessource & " LIST")
    Local $aIdentifier = StringSplit(ClipGet(), @CRLF, 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; == alle Ressourcen des Containers im TempDir installieren
    For $i = 1 To $aIdentifier[0]
    RunWait($SFCexe & " " & $sPathRessource & " " & $aIdentifier[$i] & " " & @TempDir & "\" & $aIdentifier[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #region - Skript
    ; ....
    ; ....
    ; ....
    #endregion

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; == bei Beenden Skript sollte man die Dateien wieder löschen
    For $i = 1 To $aIdentifier[0]
    FileDelete(@TempDir & "\" & $aIdentifier[$i])
    Next
    FileDelete($STCexe)
    FileDelete($SFCexe)

    [/autoit]
  • Drag And Drop per CALLDLL

    • BugFix
    • 16. November 2011 um 18:17
    Zitat von cmoe

    eine weit schnellere eingabe in Spielen als mit MouseMove hinbekommen kann


    Forenregeln! beachten. Für Spielebots gibt es keinen Support.

    [CLOSED]

  • Im Setup meines Programmes Benutzer beliebigen Hotkey per Tastendruck festlegen lassen - wie?

    • BugFix
    • 15. November 2011 um 22:44

    Verwende doch einfach eine ComboBox mit allen Tasten, die du zum Hotkey zulassen willst. Somit kann der User mit 2 Klicks seinen Hotkey festlegen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™