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

  • Hausmeister-Schutzmaßnahmen

    • BugFix
    • 11. April 2014 um 22:46

    Grundsätzlich: Solche Aktionen sind immer begrüßenswert.
    Ich zeichne häufig bei Petitionen, die Themen ansprechen, von denen auch ich betroffen bin. Das ist im Falle dieser Petition daher aber auch der Pferdefuß: Der Sachverhalt betrifft anhand des dargestellten Vorfalls einen begrenzten Personenkreis. Insofern denke ich, dass hierfür eine Aktion mit der Lokalzeitung mehr erreichen könnte. Eventuell könnte man auch das gewisse große Boulevardblatt dafür einspannen.

  • VBS-Skript nach AutoIT übersetzen

    • BugFix
    • 11. April 2014 um 15:40

    ...Forensuche hilft. Das Thema habe ich vor 7 Jahren mal abgehandelt: Objekt: WScript.Shell :whistling:

  • arraymore.au3 - Fehler?

    • BugFix
    • 7. April 2014 um 19:14
    Zitat von Andy

    Naja, dazu muss man sagen, dass NULL auch in anderen Sprachen nur dann NICHTS ist, wenn man das explizit vorher festlegt.

    Naja, ich bin inzwischen von Lua verwöhnt. Da ist alles, was nicht definiert ist nil. An diesen Luxus gewöhnt man sich schnell. :whistling:

  • arraymore.au3 - Fehler?

    • BugFix
    • 6. April 2014 um 22:47
    Zitat von Tweaky

    Liege ich da richtig, BugFix?
    Wenn ja bitte anpassen?


    Ja, das sind die Dinge, die ich an AutoIt wirklich hasse: der fehlende NULL-Wert. Inzwischen gibt es zwar einen NULL-Wert, aber nur als Keywort, nicht als echtes NICHTS.
    Werde es mal demnächst ändern.

  • Anfängerfrage zu SQLite

    • BugFix
    • 5. April 2014 um 10:29

    Ich empfehle immer, sich die aktuelle SQLite.dll herunterzuladen und den Skripten z.B. per FileInstall mit in das Skriptverzeichnis zu packen. Anschliessend mit

    [autoit]

    _SQLite_Startup(@ScriptDir & "\sqlite3.dll", False, 1)

    [/autoit]

    laden und alles ist gut.
    Die Verwendung von _SQLite_Startup() ohne Parameter erfordert bei nicht vorhandener SQLite.dll auf dem PC zwingend einen aktiven Internetzugang und ausserdem darf autoitscript.com nicht gerade down sein (denn darauf verweist der interne DL-Link).

    Es ist mir absolut unverständlich, warum die Binärform der SQLite.dll aus den Includes entfernt wurde. Die Anbindung an autoitscript.com bleibt durch das jetzige Prozedere doch genauso erhalten. Aber wahrscheinlich bin ich einfach zu unintelligent um die geniale Idee dahinter zu verstehen... :whistling:

  • GUI TreeView: Eine hoffentlich leichte Frage

    • BugFix
    • 2. April 2014 um 21:58
    Zitat von SmilingStar

    Dein Gedanke mit dem Zähler würde bedeuten, dass bei einem Klick auf ein Item der Zähler auf 1 gesetzt, die Funktion wie in einer Schleife neu aufgerufen und damit das zuvor erstellte "Inhalt im Edit anzeigen" ausgeführt wird. Und bei einem erneuten Klick, würde dann sozusagen Option 2 ausgeführt werden - das senden des Inhalts. Würde das dann nicht bedeuten, dass jedes Item zweimal angeklickt werden muss?


    Ein Doppelklick hat immer als erstes Element den Single-Klick. Wenn man nur den Doppelklick benötigt ist das schnuppe. Willst du beides ist es am sichersten die Auswertung gänzlich in eigene Verwaltung zu nehmen.
    Ich würde einen Mouse-Hook nutzen (begrenzt auf das Treeview).
    - Left-Klick ==> startet Timer
    - Timer >= Doppelklickzeit (Registryeintrag auslesen) ==> Das ist ein Single-Klick
    - Timer < Doppelklickzeit und neuer Leftklick ==> Das ist ein Doppel-Klick
    Das ist aber nicht ganz unkompliziert. Du darfst die Klicks nicht an das System weiterleiten. Erst wenn klar ist ob Single/Doubleklick kannst du die gewünschten Aktionen starten. Auch hier hast du das Problem, dass erst wenn die Art des Klicks erkannt ist, das entsprechende Item aktiviert wird. Also musst du eine Ereignisvariable auf Single oder Double setzen und dann in einer folgenden Auswertefunktion anhand dieser Variablen operieren.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • BugFix
    • 2. April 2014 um 20:46
    Zitat von SmilingStar

    Du hast zwar davor gewarnt, sowohl Klick als auch Doppelklick zu verwenden, ich würde es aber trotzdem versuchen wollen.


    Nun, ich erkläre mal im Detail was passiert, wenn du die Message $WM_NOTIFY registrierst und $NM_CLICK und $NM_DBLCLK auswertest und mit welchen weiteren Problemen du zu kämpfen hast:
    • Einfach-Klick auf ein Item
    - $NM_CLICK wird ausgelöst
    - Aber erst wenn die Message-Funktion verlassen wurde, ist auch das angeklickte Item markiert! Eine aus der Funktion heraus gestartete Aktion würde also mit dem zuletzt aktiven Item arbeiten!! Das gilt für alle Events innerhalb der Message-Funktion.

    • Doppel-Klick auf ein Item
    - $NM_CLICK wird ausgelöst
    - $NM_DBLCLK wird ausgelöst

    Du könntest jetzt versuchen durch Timer-Konstrukte o.ä. NM_CLICK von NM_DBLCLK zu trennen - Viel Spaß dabei.
    Unabhängig davon wird ja ein Item erst markiert, wenn die Message-Funktion bereits abgearbeitet ist. Das liesse sich lösen, indem man einen internen Zähler setzt. Ist er 1 wird die Funktion verlassen und nochmal aufgerufen mit denselben Parametern (dadurch findet das normale Prozedere statt und die Auswertung beginnt mit dem dann korrekt markiertem Item in Durchlauf 2). Beim 2-ten mal wird der Zähler zurückgesetzt und die gewünschten Operationen werden ausgeführt.

    Du siehst, das ist nicht ganz soo easy - aber nicht unmöglich. Nun entscheide ob du einen ganz einfachen Weg wählst oder dich hart reinkniest. :D

  • txt auslesen und für jede Zeile Button + Checkbox erstellen

    • BugFix
    • 2. April 2014 um 15:49

    Ich habe mein voriges Bsp. mal umgemodelt auf Checkboxerstellung. Das ist dynamisch und erstellt nur die Anzahl Checkboxen, die du benötigst.
    Ich habe die Erstellung der Checkbox zur An/Abwahl aller Checkboxen an die erste Position der Textdatei gesetzt, kannst du natürlich ändern.

    Spoiler anzeigen
    [autoit]

    Global $GUI
    Global $aFile, $FilePath = "Deine_Text_Datei" ; Pfad anpassen
    _FileReadToArray($FilePath, $aFile)

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

    ; == hier simuliere ich das eingelesene Array - nicht verwenden, wenn aus Datei gelesen wird
    Global $aFile[5] = [4,'Alle auswählen','PC-1','PC-2','PC-3']
    ; == Ende Simulation

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

    Global $aCheckBox[$aFile[0]], $x = 10, $yStart = -20, $diff = 30

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

    $GUI = GUICreate('Test', 400, 20)
    For $i = 1 To $aFile[0]
    $aWin = WinGetPos($GUI)
    WinMove($GUI, '', $aWin[0], $aWin[1], $aWin[2], $aWin[3] + $diff)
    $y = $yStart+$i*$diff
    $aCheckBox[$i-1] = GUICtrlCreateCheckbox($aFile[$i], $x, $y, 100, 20)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    Next
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    $iAll = 0
    $iState = $GUI_CHECKED
    For $i = 0 To UBound($aCheckBox) -1
    If $nMsg = $aCheckBox[$i] Then
    If $i = 0 Then
    $iAll = 1
    If Not BitAND(GUICtrlRead($aCheckBox[$i]), $iState) Then $iState = $GUI_UNCHECKED
    EndIf
    EndIf
    If $iAll = 1 Then GUICtrlSetState($aCheckBox[$i], $iState)
    Next
    WEnd

    [/autoit]
  • GUI TreeView: Eine hoffentlich leichte Frage

    • BugFix
    • 1. April 2014 um 20:11

    Ich habe mal in meinem vorigen Post den Code kommentiert.

  • OpenSource Projekte als Praxiserfahrung?

    • BugFix
    • 31. März 2014 um 15:45

    Das Problem in der Jugend ist einfach, dass du noch keinen Bezug zur Anwenderwelt hast.
    Ich schreibe Software, die die Dinge macht, an die natürlich kein Entwickler der kommerziellen Software geadacht hat. Und eine funktionierende! Warenwirtschaftssoftware hat mit Basics recht wenig zu tun. Das ist schon eher high end.
    Es ist auch völlig unerheblich, ob ich Probleme mit atemberaubend verzwickten Algorithmen löse oder einen zuverlässigen simplen Weg wähle. Es zählt einzig das Ergebnis. Ich würde bei Betrachten von Lösungen auch als vorteilhaft empfinden, wenn der Proband in der Lage ist Dinge "einfach" zu lösen. ;)

  • OpenSource Projekte als Praxiserfahrung?

    • BugFix
    • 31. März 2014 um 14:19

    Mal als Gedanke:
    Fast alle Anwendungen sind mit Datenbanken verknüpft. Erstelle als Musterprojekt z.B. eine Warenwirtschaft (Artikel/Kunden/Rechnungen etc.) auf Basis von SQLite. Das ist anspruchsvoll, sinnvoll und bildet deine Fähigkeiten gut ab. Mit solch einer Mustersoftware im Gepäck kann man sich sicher sehen lassen.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • BugFix
    • 31. März 2014 um 10:59

    Also Klick und Doppelklick auszuwerten ist nicht empfehlenswert, da der erste Klick des Doppelklicks sofort vom Klick-Event abgefangen wird.
    Ich empfehle daher statt Doppelklick den Rechtsklick. Da das Treeview standardmäßig kein Kontextmenü hat, ist das auch ohne Probleme realisierbar.
    Ich habe deinenCode mal entsprechend erweitert:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>

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

    ; == Zuweisung Texte an Item, am besten per Dictionary Objekt
    Global $oDict = ObjCreate('Scripting.Dictionary')
    $oDict.Add('1', 'Text für "1"')
    $oDict.Add('1a', 'Text für "1a"')
    $oDict.Add('1b', 'Text für "1b"')
    $oDict.Add('2', 'Text für "2"')
    $oDict.Add('2a', 'Text für "2a"')
    $oDict.Add('2b', 'Text für "2b"')
    $oDict.Add('3', 'Text für "3"')
    $oDict.Add('3a', 'Text für "3a"')
    $oDict.Add('3b', 'Text für "3b"')

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 253, 342, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(12, 12, 229, 219)
    $hTreeview = GUICtrlGetHandle($TreeView1)
    $TreeView1_0 = GUICtrlCreateTreeViewItem("1", $TreeView1)
    $TreeView1_1 = GUICtrlCreateTreeViewItem("1a", $TreeView1_0)
    $TreeView1_2 = GUICtrlCreateTreeViewItem("1b", $TreeView1_0)
    $TreeView1_3 = GUICtrlCreateTreeViewItem("2", $TreeView1)
    $TreeView1_4 = GUICtrlCreateTreeViewItem("2a", $TreeView1_3)
    $TreeView1_5 = GUICtrlCreateTreeViewItem("2b", $TreeView1_3)
    $TreeView1_6 = GUICtrlCreateTreeViewItem("3", $TreeView1)
    $TreeView1_7 = GUICtrlCreateTreeViewItem("3a", $TreeView1_6)
    $TreeView1_8 = GUICtrlCreateTreeViewItem("3b", $TreeView1_6)
    $Edit = GUICtrlCreateEdit("",12,230,229,109)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    _GetText(False)
    Case $GUI_EVENT_SECONDARYDOWN
    _GetText(True)
    EndSwitch
    WEnd

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

    Func _GetText($_fSend)
    Local $sItem, $hItem, $cItem = GUICtrlRead($TreeView1) ; == $cItem ist das Control des aktuell aktiven Item
    If $cItem <= 0 Then Return ; == wenn kein gültiges Control - Funktion verlassen
    $hItem = GUICtrlGetHandle($cItem) ; == das Handle des aktiven Item holen
    $sItem = _GUICtrlTreeView_GetText($hTreeview, $hItem) ; == den Text des aktiven Item auslesen
    Local $sText = $oDict.Item($sItem) ; == im Dictionary.Object den Voll-Text für das Item auslesen, Variable $sText enthält jetzt den vollen Text zur weiteren Nutzung
    If $_fSend Then ; == wenn $_fSend=True wird der Code zum Senden des Textes aufgerufen (bei Rechtsklick)
    ; == Sende $sText
    Else
    GUICtrlSetData($Edit, $sText) ; == bei False wird der Text in das Edit-Control geschrieben (bei Linksklick)
    EndIf
    EndFunc

    [/autoit]

    Um die Item in bestimmter Reihenfolge zu erstellen (u. auch wieder abzuspeichern) habe ich mal eine UDF erstellt. Vielleicht kannst du das auch dabei brauchen.

  • GUI TreeView: Eine hoffentlich leichte Frage

    • BugFix
    • 30. März 2014 um 19:08

    Schau dir mal den Bsp-Code in der Hilfe zu GuiCtrlCreateTreeview an. Das sollte alle Fragen klären.

  • Textmacros, suchen/ersetzen wie bei Autohotkey

    • BugFix
    • 30. März 2014 um 19:03
    Zitat von shietegal

    Zum Thema Keylogger finde ich persönlich es schade, wenn es keine Scripts mehr gibt, nur weil das missbräuchlich genutzt werden kann.


    Das Problem ist einfach, wie trenne ich die schwarzen von den weissen Schafen? ;)
    Ein Keylogger ist ja perse auch nicht schlecht. Ich habe z.B. einen erstellt, den ich bei Problemen unserer User mit einer bestimmten Software anwende. Ist dieser Prozeß aktiv, startet der Logger mit einem vom User zu bestätigendem Hinweis, dass innerhalb dieser Software jeder Tastaturanschlag und jeder Mausklick protokolliert wird. Bei Mausklicks wird ein Screenshot von der Mauszeigerumgebung gespeichert, bei Tastaturereignissen der entsprechende Tastenwert. Mit einem Programm, das dann die Logeinträge wiedergibt mit entsprechenden Texteingaben und Bildern lassen sich auf diese Weise Fehlbedienungen der User wunderbar lokalisieren. Da hilft dann auch nicht die Ausrede "Ich habe gar nichts gemacht, das ging plötzlich nicht mehr." :D
    Leider ist der missbräuchliche Einsatz solcher Programme recht häufig. Und wir möchten hier ungerne Steilvorlagen liefern. Ausserdem ermöglicht allein das Lesen der Hilfe (vernünftige AutoIt-Kenntnisse vorausgesetzt) problemlos ein entsprechendes Programm zu erstellen. Mit dem entsprechenden Hinweis auf die erforderliche Funktion ist doch der Fragestellung genüge getan. Und ich kann nicht mal im Ansatz erkennen, dass hier die Verbreitung von Wissen unterdrückt wird.

  • Textmacros, suchen/ersetzen wie bei Autohotkey

    • BugFix
    • 30. März 2014 um 17:31
    Zitat von shietegal

    Also müsste ich wahrschinlich ein Script schreiben, was alle Strings über _IsPressed abfragt und welches permanent läuft (Endless Loop)?


    So einfach ist es leider nicht. Mit _IsPressed wirst du keine Möglichkeit haben in allen x-beliebigen Editierfeldern wirksam zu werden.
    Um das mit AutoIt zu lösen musst du wohl mit einem Keyboard-Hook arbeiten.
    Das heisst:
    - Abfangen der Keyboard-Taste
    - ist dieses Bestandteil deines Textmakros (z.B. das "s" aus "sgf") schaltest du den Ersetzmodus aktiv, das Zeichen wird nicht an das Editfeld weitergesendet
    - nächstes Zeichen wird abgefangen: ist es aus einer Kombination eines Textmakros wird auch dieses nicht gesendet, sondern zwischengespeichert
    - ist die zwischengespeicherte Sequenz identisch mit einem Makro, wird der hinterlegte Text gesendet
    - ergibt die Zwischenspeicherung kein Makro wird diese selbst eingefügt
    Hat aber den Nachteil, dass Buchstaben, mit denen ein Makro beginnt zuerst nicht an das Programm gesendet werden obwohl kein Makro genutzt werden soll. Das könntest du dann eventuell umgehen, indem du die Sequenz schreiben läßt und bei Übereinstimmung mit einem Makro für die Anzahl der Zeichen zuerst Backspaces sendest und dann den Ersetzungstext.

    NB:
    Ein Keyboard-Hook läßt sich leider leicht als Keylogger mißbrauchen. Aus diesem Grund wirst du hier keine skriptmässige Unterstützung dafür erhalten. Aus der Hilfe läßt sich aber mit etwas Wissen alles Notwendige erfahren.

  • txt auslesen und für jede Zeile Button + Checkbox erstellen

    • BugFix
    • 29. März 2014 um 20:57

    Wenn du im Programmverlauf eine GUI dynamisch erstellst, kannst du so vorgehen (Bsp. mit Inputs)

    Spoiler anzeigen
    [autoit]

    Global $GUI, $aInput[2] = [1], $btAdd

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

    $GUI = GUICreate('Test', 400, 50)
    $aInput[1] = GUICtrlCreateInput('', 10, 10, 300, 21)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    $btAdd = GUICtrlCreateButton('Add Input', 320, 10, 70, 21)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btAdd
    _NewCtrl()
    EndSwitch
    WEnd

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

    Func _NewCtrl()
    Local $iDiff = 31 ; == Abstand + Höhe ==> 10 + 21
    Local Static $iY = 10 ; == Startwert vom ersten Ctrl
    $iY += $iDiff
    $aInput[0] += 1
    ReDim $aInput[$aInput[0]+1]
    Local $aWin = WinGetPos($GUI)
    WinMove($GUI, '', $aWin[0], $aWin[1], $aWin[2], $aWin[3] + 31)
    $aInput[$aInput[0]] = GUICtrlCreateInput('', 10, $iY, 300, 21)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    EndFunc

    [/autoit]
  • Fragen zu Dictionary und Hashtable Obj

    • BugFix
    • 19. März 2014 um 16:41
    Zitat von BiNu

    Grössenordnung 1'000'000 Werte


    Na da solltest du lieber zu einer kleinen Datenbank greifen. SQLite bietet sich an. Tipp: Speichere dir die SQLite.dll im Ordner deines Skriptes, sonst braucht dein Skript Internetzugang und autoitscript.com darf auch nicht gerade down sein. :whistling:

    Ich würde die Tabelle so erstellen:

    [autoit]

    $sExecute = _
    "CREATE TABLE IF NOT EXISTS [begriffe] (" & _
    "[name] TEXT," & _
    "[detail_1] TEXT," & _
    "[detail_2] TEXT," & _
    "[detail_3] TEXT);"

    [/autoit]

    Nun kannst du mit SELECT die gewünschten Details abfragen.

  • Inputbox nach Eintrag weiter

    • BugFix
    • 18. März 2014 um 17:27

    jjj:
    Und - fühlst du dich jetzt wohl, wenn du einem lernresistenten und lösungsunwilligen User die Arbeit abnimmst?
    Davon hat er nichts und lernt null. Das wird einfach per C&P übernommen und dann läßt er sich dafür 'nen Doktortitel verleihen.
    Ich plädiere hier für absolute Verweigerung von Support.

  • Inputbox nach Eintrag weiter

    • BugFix
    • 18. März 2014 um 14:44

    Ilse:
    Was hast du eigentlich die letzten 3,5 Jahre getrieben? Du bist dauernd online, stellst tausend Fragen und hast bis heute ausser der Bedienung von Koda nix gelernt! Vielleicht solltest du lieber Briefmarken sammeln oder Autoquaretett spielen. Programmierung ist definitiv für dich ungeeignet.
    Weiterer Support von meiner Seite nicht mehr.

  • Inputbox nach Eintrag weiter

    • BugFix
    • 18. März 2014 um 13:39

    Verwende keine Inputboxen - nimm eine kleine GUI mit Input-Ctrl. Sieht eleganter aus und du kannst das weiterschalten z.B. per Enter 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™