Genial einfaches Tool zur Web Recherche - Smartclip

  • Endlich ist das Progrämmchen soweit gediehen, daß ich es für würdig halte es der Öffentlichkeit zur Verfügung zu stellen.
    Für offene Fragen gibts Antworten, etliche davon werden im Handbuch beantwortet. Also erst LESEN dann Fragen stellen.

    Das Tool ermöglicht es auf einfache Weise von unterschiedlichsten Stellen Daten(Texte Hyperlinks Bilder)
    einzusammeln(aus dem Internet und auch vom eigenen Rechner) und an einem anderen Ort alles zuammen zu stellen z.B. in
    einem Word Dokument oder im Acrobat oder Wordpad und dergleichen. Die Hauptfunktionen werden ausgelöst
    durch kopieren / CTRL+c und CTRL+v mehr braucht es eigentlich nicht.
    Und für die ewigen Schwarzseher, man kann es nicht nur zum Browsen benutzen sondern ebenso gut im Autoit Scripteditor
    oder jeder anderen Programmier-Umgebung, wenn man sich aus mehreren Scripten bestimmte Funktionen oder Blöcke zusammenstellen
    will für ein neues Programm geht das mit diesem Tool ausgezeichnet.

    Seid einfach Creativ.


    Die Exe-Dateien sind für diejenigen gemacht die sich nicht mit der Programmierung in Autoit befassen wollen und trotzdem das Tool nutzen wollen.

    Ich hoffe es findet Gefallen, und viele User die das Tool zu würdigen wissen.


    Und hier ist jetzt eine Abrage auf fehlende cURL-Files und eine Fehlermeldung eingebaut. Code aufgeräumt Handbuch angepasst.

    Da Smartclip inzwischen recht gut geworden ist, sollte es nicht mehr soviele Updates brauchen und deshalb habe
    ich jetzt alles wieder in ein Archiv gepackt, dann kann beim Download nichts vergessen werden,
    dann einfach das was man benötigt aus dem Archiv entpacken und loslegen.
    (Was gebraucht wird steht im Handbuch ganz oben)
    Archivinhalt die 2 curl-Files / 2 EXE-Files 32+64 bit / Script-AU3 / Das Handbuch als RTF und / 1 Icondatei

    Download

    Hier Genial einfaches Tool zur Web Recherche - Smartclip

    oder hier Genial einfaches Tool zur Web Recherche - Smartclip


    Grüsse von Tuxedo

    22 Mal editiert, zuletzt von Tuxedo (28. Februar 2018 um 20:23)

  • Hallo @Tuxedo !

    Bin gerade knapp mit Zeit, daher habe ich es nur schnell überflogen.

    Zu : _Singleton("Multi-Clip_v1.68.au3",0)

    Du brauchst die Funktion _Singleton() nicht komplett in deinen Quellcode übernehmen. Es langt : #include <Misc.au3> - Dort ist sie enthalten.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Dann wollen wir dir mal auf die Finger hauen! :D

    An das Icon wirst du nochmal rangehen müssen, das ist ziemlich verpixelt.

    _Singleton("Multi-Clip_v1.68.au3",0)
    _Singleton zu nutzen ist schön mal eine schöne Idee und immer gerne gesehen aber du solltest nicht vergessen
    dabei nur einen Produktnamen bzw. einen einzigartigen String zu vergeben und keinen mit einer Versionnummer.

    Warum? Ganz einfach, wenn du dein Script updatest und v1.72 rausbringst und den _Singleton dementsprechend änderst und ein altes Script noch läuft,
    so bringst du die Hotkeys und die ganzen Clipboards durcheinander und das wäre doch schade.

    Am besten du nimmst als String sowas wie "MultiClipTuxedo", halt etwas einzigartiges wobei du bleibst. Außerdem solltest du immer Feedback einbauen, d.h. wenn jemand das Script startet und eins schon laufen sollte, sollte das neue Skript eine Meldung ausspucken wie z.B. "Es läuft bereits eine Instanz von Multi-Clip.".

    AutoIt
    While $Aktiv = False
    	If Not $Aktiv Then ToolTip("Multi-Clip wird pausiert", MouseGetPos(0) + 100, MouseGetPos(1) - 30, "Toggle Pause mit ALT+p")
    	Sleep(500)
    WEnd

    Die If-Abfrage hättest du dir hier auch klemmen können oder nicht? Du bist nur in der Schleife wenn $Aktiv false ist und du prüfst nach ob Not $Aktiv True ist was äquivalent ist.
    Du solltest das auch lieber einheitlich coden, wenn du schon Not $Aktiv verwendest dann nimm es auch inder While-Schleife oder in der If = False. Einheitlicher Code schaut besser aus und ist einfacher zu lesen.

    Zitat

    Die Timings und die Clipgrenze wird eventuell noch angepasst, je nachdem was die Benutzer an mich zurückmelden,
    werde ich das so einstellen, daß die meisten User damit klarkommen werden.

    Warum nicht unbegrenzt? Was spricht dagegen?

    Zitat

    Übrigens könnt ihr auch die Exe-Files im Nachhinein so umändern, daß das Teil selbstständig mit

    Adminrechten arbeitet indem ihr mit einem Resoureceneditor das Manifest abändert ist aber nicht ratsam

    und eigentlich auch nicht notwendig, oder eben per Contextmenü als Administrator starten.

    Das kann nicht jeder (das Manifest ändern), du solltest lieber auf das Script verweisen und den Leuten raten in die erste Zeile ein #RequireAdmin zu schreiben und es neu zu compilen, oder
    du baust in die nächste Version eine Option ein die mit IsAdmin() prüft ob das Script als Admin gestartet wurde und ansonsten ShellExecute(@ScriptName, "", "", "runas") ausführt und sich selbst terminiert.
    Dazu eine kleine Ini-Datei wo gespeichert ist ob als Admin gestartet werden soll und du führst den Befehl dementsprechend aus.

    Es wäre ratsam das Programm in den Autostartordner zu schieben, da du ja nicht immer das Script vorher selber starten möchtest, der dazugehörige Ordner ist:
    C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup, dort eine Verknüpfung mit FileCreateShortcut ablegen und fertig.
    AutoIt hat auch dafür ein Makro: @StartupDir. Das kannst du ebenfalls in die vorhin angesprochene Ini-Datei speichern.

    Den ganzen Trivia- bzw. Geschichtskram hättest du ruhig aus dem Handbuch rauslassen können, da sollten wirklich nur die Bedienung, Umfang, Danksagungen und Lizenzen enthalten sein.

    Zu dem Sourcecode möchte ich ehrlich gesagt nicht sehr viel sagen, mir persönlich gefällt er nicht.
    Da sind ziemlich viele unnötige Kommentare, Variablen-/Funktionsbenennung ist mies (Stichwort: Ungarische Notation für Variablen) und das Format gefällt mir nicht.
    Das ist aber meine persönlich Meinung und auf die solltest du nicht all zu viel Wert legen, hier gibts sicherlich noch dutzende andere User die ihren Senf loswerden wollen.

    Aber jedes Script fängt so an, es ist ja nicht so, dass das hier die letzte Version sein wird, hoffentlich nimmst du dir die Kritik hier zu herzen und verbesserst dein Script Zeile für Zeile :thumbup:

  • Hallo @Tuxedo !

    Bin gerade knapp mit Zeit, daher habe ich es nur schnell überflogen.

    Zu : _Singleton("Multi-Clip_v1.68.au3",0)

    Du brauchst die Funktion _Singleton() nicht komplett in deinen Quellcode übernehmen. Es langt : #include <Misc.au3> - Dort ist sie enthalten.

    Gruß Musashi

    Er hat sie absichtlich rauskopiert damit er das gesamte Include nicht reinnehmen muss, mache ich auch so. (_ArrayDelete z.B.)

  • Schön freut mich Alpines die erste Frage von Musashi, hast du schon für mich erledigt genau das war mein Gedanke includes einzusparen.
    Und dir Alpines bin ich in einem Punkt auch schon zuvorgekommen, habe die Singleton gerade abgeändert, weils mit auch aufgefallen ist,
    daß die nicht lange zuverlässig laufen wird, habe den Namen jetzt gegen @ScriptName ersetzt. Das sollte eigentlich immer gehen oder irre ich mich.

    Deine anderen Bemerkungen werde ich jetzt sorgfältig durchgehen.

    Ihr seid verdammt schnell hier

  • daß die nicht lange zuverlässig laufen wird, habe den Namen jetzt gegen @ScriptName ersetzt. Das sollte eigentlich immer gehen oder irre ich mich.

    Also bei der letzten Version ("Multi-Clip_v1.68_Aktuell") sehe ich immer noch den alten String. Wenn du @ScriptName verwendest wird der aktuelle Dateiname verwendet, d.h. wenn jemand die Datei umbenennt und startet, dann werden wieder zwei Instanzen laufen!

  • Er hat sie absichtlich rauskopiert damit er das gesamte Include nicht reinnehmen muss, mache ich auch so. (_ArrayDelete z.B.)

    Dazu gibt es doch Stripper. (Also das Programm).

    Spoiler anzeigen
    AutoIt
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/SF=1

    Optionen in der Hilfe von SciTE oder unter dem Reiter Stripper im Fenster vor dem Kompilieren.

    Grüße autoiter

  • Danke Alpines du hast mich überredet ich werde die Versionsnummern komplett aus dem Programm entfernen und nur noch
    im Script Kommentarblock eine Version angeben um unnötigen Ärger zu vermeiden.

    Du gibst mir ganz schön eins auf die Glöocke heute.

  • Ich weiß nämlich nicht wie viel der rausstrippt, bei Konstanten schreibe ich den Wert direkt in die Funktion und lasse sie nicht als einzelne Zeile stehen. (Auch bei Hilfsfunktionen etc).

    Du kannst dir das Ergebnis ansehen. Das Programm erstellt nämlich eine weitere au3 mit dem Zusatz _stripped.
    Das Teil ist genial. Ich benutze auch gerne aussagekräftige Variablennamen, die dann leider oft lang werden. Die lasse ich mir beim Kompilieren dann auch umbenennen - genauso Funktionen u.a.

    Spoiler anzeigen


    Mit folgender Zeile kann man die erstellte stripped au3 auch gleich wieder löschen lassen.
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"

    Grüße autoiter

  • Er hat sie absichtlich rauskopiert damit er das gesamte Include nicht reinnehmen muss

    Hmm, ich jedenfalls kann weder im Quellcode noch im Handbuch einen Hinweis finden, dass er die Funktion _Singleton() absichtlich herauskopiert hat. Ich selbst bin, von wenigen Ausnahmen abgesehen, kein Freund davon, Standard-UDFs zu filetieren :) .

    Bezüglich Quellcodeaufbau und Funktions-/Variablendeklarationen bin ich 100% bei @alpines .
    @Tuxedo :
    Diesen Hinweis würde ich mir an deiner Stelle SEHR zu Herzen nehmen !!.
    Wenn sich ein schlechter Programmierstil erst mal eingeschliffen hat, wird man ihn nur schwer wieder los. Bei größeren Projekten kann das bis zum Abbruch und Neustart führen.

    Das Handbuch würde ich zunächst unter Verschluss halten :D .
    Persönliches 'Abkotzen' über Microsoft, Urheberrecht usw. (selbst wenn in Teilen nachvollziehbar), gehört dort definitiv nicht hin. Kümmere dich erst mal um die Software. Zum Handbuch kann ich Dir dann Tipps geben, falls Du möchtest.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • @autoiter ich glaube @Tuxedo würde sich freuen wenn du ihm etwas über sein Script sagen könntest statt mir die Vorzüge von dem AutoIt-Stripper zu predigen :D

    Du gibst mir ganz schön eins auf die Glöocke heute.

    Warte mal bis die anderen loslegen!

    Hmm, ich jedenfalls kann weder im Quellcode noch im Handbuch einen Hinweis finden, dass er die Funktion _Singleton() absichtlich herauskopiert hat. Ich selbst bin, von wenigen Ausnahmen abgesehen, kein Freund davon, Standard-UDFs zu filetieren .

    Schön freut mich Alpines die erste Frage von Musashi, hast du schon für mich erledigt genau das war mein Gedanke includes einzusparen.

    Hehehehehe...

  • Mein Gott machen die Leute mich heute fertig, ja Musashi deinen Tipp zum Handbuch werde ich gerne entgegennehmen und entferne es vorerst.
    Wenn ihr schon die Variabledeklaration anprangert dann lasst mich doch wissen was genau euch daran nicht gefällt.
    Da es in autoit nicht so wie in C++ und Co soviel unterschiedliche Variablentypen gibt, halte ich gar nix davon immer die diversen
    Kleinbuchstaben vorne dran zu klatschen, denn ob es ein String oder eine Zahl oder eine Bool ist sieht man doch
    recht schnell an der Funktion die angewendet wird und Strings sind normalerweise in Anführungszeichen. Und beim Array deuten
    die eckigen Klammern auf ihre Art hin.

    Woher soll ich einen anderen Programmierstil haben ich bin zu alt für so Blödsinn und ernsthaft progge erst seit gut einem Jahr.
    Früher hat das Zeug bei uns einfach nur laufen müssen, wir haben Code verwendet, nicht in die Vitrine gestellt und damals hatten wir noch Goto.

    Man ihr seid aber echt brutal zu mir heute.

    Sorry nochmal zu Musashi zurück, du hast Recht von singleton stand auch nix im Handbuch. Da es ja auch für die Bedienung des Tools nicht
    notwendig ist darüber etwas zu wissen. Ich habe einfach stillschweigend die weiteren instanzen abgeschossen.
    Habe jetzt gerade eine Msgbox eingebaut die darauf hinweist.
    Und zum Filetieren, das mache ich öfters, wenn ich z.B nur ein oder zwei Funktionen aus einer Include benötige und darin aber viele
    Funktionen untergebracht sind, dann kopiere ich die benötigte Funktion direkt ins Script und spare mir den Include ein.
    Kritisch wird das nur wenn (was auch oft vorkommt) für eine benötigte Funktion mehrere Abschnitte in der entsprechenden Include-Datei
    existieren, dann hat man ein Problem, du meinst also man sollte soetwas nicht tun.
    Dafür ist Smartclip übrigens auch bestens geeignet, ein kleiner Scherz.


    Mensch Leute da bin ich ja bis ewig bedient mit ausbessern und umbauen. Ist eigentlich gar nix daran brauchbar oder was?
    Was bitte ist an meinen Variablennamen und Funktionen nicht eindeutig genug.


    Und deinem Tipp das Tool in den Autostart einzufügen kann ich nichts abgewinnen, ich möchte nichts an den Systemen der User verändern.
    Ausserdem könnte es störend sein wenn das Tool dauerhaft ShortCut's blockiert. Wer es tatsächlich im Autostart haben will kann ja
    dann selbst eine Verknüpfung im Autostart anlegen. Ist auch der Gewohnheit zuverdanken ich betreibe mein System zu 99% nur mit
    Portablen Programmen, weil dabei die Registry und das Filesystem recht sauber bleibt, Ergebnis ein laaanges Windows-Leben.

    6 Mal editiert, zuletzt von Tuxedo (26. Juli 2017 um 19:21)

  • Wenn ihr schon die Variabledeklaration anprangert dann lasst mich doch wissen was gnau euch daran nicht gefällt.

    Woher soll ich einen anderen Programmierstil haben ich bin zu alt fü so Blödsinn und progge erst seit gut einem Jahr.
    Früher hat das Zeug bei uns einfach nur laufen müssen, wir haben Code verwendet nicht in die Vitrine gestellt.

    Man ihr seid aber echt brutal.

    Brutal würde ich nicht sagen, du möchtest Feedback zum Code und das kriegst du, wir versuchen dir zu helfen und nicht dich vom Coden abzuhalten.

    Du musst selber für dich entscheiden ob du das was du hier liest umsetzen möchtest oder nicht, es ist ratsam aber niemand zwingt dich dazu.
    Wenn du deine Skripte so besser durchblickst dann behalte deinen Stil, es ist dein persönlicher Geschmack.

    Zum Thema Variablen und Funktionen:
    Du schreibst z.B. $Anzahl, $Bild, $VStep oder $Clip. Jetzt weißt du sicherlich noch was in diesen Variablen gespeichert wird, aber ich garantiere dir, wenn du ein paar Monate mal nicht reinschaust, dann wirst du keine Ahnung haben wofür die gedacht waren.
    Um dem Problem vorzubeugen verwenden die meisten User hier die sogenannte 'ungarische Notation', dabei stellt man den Typ der Variable als Präfix vor den eigentlichen Namen.
    So wird aus $Anzahl $iAnzahl (Integer), aus $Clip wird $aClip (Array), $Bild (kannst du dir eigentlich sparen, die Variable wird nicht verwendet.

    Zum Thema Formatierung:
    Die Einrückungen schauen soweit ok aus (bis auf den Anfang mit If compiled, If error etc) aber du könntest deinen Code ein wenig auseinander ziehen.
    In der F_BildEinfuegen Funktion schreibst du z.B. die ganzen GDIPlus und Clipboard Funktionen mit dem ganzen Send und If Zeugs einfach untereinander.
    Wenn du das ganze sinnvoll trennst (GDIPlus Funktionen als Absatz, Zeile frei, Clipboard Funktionen als Absatz), dann sieht das ganze nicht nur schöner aus, sondern ist auch einfacher zu lesen.
    Die Kommentare die du auskommentiert hast kannst du entfernen (z.B. Debugmeldungen). Kommentare sind trotzdem gerne gesehen, besonders wenn sie komplizierte Passagen erklären.

    Du solltest dir über das gesagte nicht komplett den Kopf zerbrechen, wenn du die Zeit und Lust hast kannst du ja mal das eine oder andere umsetzen und gucken wie es dir dann gefällt.
    Nur weil du eine Rohfassung des Handbuchs hochgeladne hast heißt es ja nicht, dass es so bleiben wird.

    Ich gebe zu hier wird meistens nur das negative genannt und die Komplimente bleiben außen vor und dafür entschuldige ich mich auch mal (böse Angewohnheit).

    Ist eigentlich gar nix daran brauchbar oder was?

    Dein Script ist brauchbar! Es läuft super, das Hilfefenster schaut schick aus und es klappt doch, nur hinter den Kulissen könnte es sauberer sein.
    Wenn du für das Programm (ohne Feedback zum Code) Feedback möchtest dann gibt es eigentlich nicht sehr viel zu beanstanden.

    //Edit: @Tuxedo du hast beim Upload des Scriptes vergessen cURL mitzuliefern! Nur die .au3 reicht für das Programm nicht.

  • Hallo @Tuxedo !

    Mensch Leute da bin ich ja bis ewig bedient mit ausbessern und umbauen. Ist eigentlich gar nix daran brauchbar oder was?

    Doch, das Programm selbst sieht gut aus, keine Frage. Es geht um den Teil, den der User nicht sieht.

    Um mal eine Metapher aus einem programmierfernen Bereich zu verwenden :
    Das schönste Airbrush auf der Motorhaube deines Wagens nützt wenig, wenn Du den Unterbodenschutz vergessen hast. Dann liegt die Haube irgendwann auf einem Haufen Rost, was den Fahrspaß doch erheblich trübt ^^ .

    Zum Thema : Funktions-/Variablendeklarationen
    Der Programmierstil ist natürlich immer auch eine Frage des persönlichen Geschmacks. Trotzdem gibt es gewisse Grundregeln, die sich über Jahre und Sprachen hinweg etabliert haben.
    $iPositionMaxLeft sagt nun mal mehr aus als $P. Wir müssen die Zeichen ja nicht einzeln bezahlen :) .

    Einen recht brauchbaren Leitfaden (allerdings in englisch) findest Du unter :
    https://www.autoitscript.com/wiki/Best_coding_practices
    Auch das Stichwort 'Ungarische Notation' mal googlen.

    @alpines : Das Auskoppeln von Funktionen aus einer UDF ist natürlich nicht verwerflich, sofern man, wie Du, weiß was man da macht. Einige UDFs binden aber z.B. eine eigene Konstanten.au3 mit ein. Kopiert ein Gelegenheitsuser jetzt nur die Funktion, dann fliegt sie ihm um die Ohren.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Und auch ein Dankeschön für die positiven Rückmeldungen, das tut gut, habe auch schon einigesw ausgebessert.

    Danke an Euch beide ja der Upload ist leider recht nutzlos Sorry dafür, aber ihr hab mir so Gas gegeben,
    daß ich das Archiv erst mal nicht mher als ganzes uppen wollte, dadurch fehlen die anderen Dateien natürlich auch werde ich gleich mal ausbessern.


    Und Musashi ja du hast mich auf noch ein Kritikum hingewiesen, an irgendwelche Includes die in der UDF selbst auch noch eingebettet
    sind habe ich noch nicht gedacht, das könnte bitter ins Auge gehen. Ich teste zwar immer die Scripte ob sie auch funktionieren mit derart
    ausgekoppelten Funktionen, aber du hast Recht es ist gefährlich, wenn z.B. eine Funktion nur ab und zu mal aufgerufen wird, klönnte es
    leicht sein, daß man eine fehlende Constante eines eingebetteten Include länger nicht bemerkt.
    Dann halt ab dem nächsten Programm wieder includen statt auskoppeln.

    Und Alpines Tipps zur Formatierung werde ich nochmals durchgehen und sehen was mir dazu noch einfällt, vielleicht mach ich da auch
    später noch etwas, zur Zeit ist eben wichtig daß es vor allem ohne Mucken und Muren fehlerfrei läuft.
    Die If Abfrage inder Pausenschleife ist entfernt und die $Bild kommt auch noch weg.
    Auf deine Blockbildung achte ich eigentlich ständig aber ich gehe das nochmal durch, jetzt sorge ich erst mal dafür daß wieder ein lauffähiges Archiv raufgeladen wird und ,morgen mache ich weiter mit dem Handbuch.

  • Nach Stundenlanger Autoit.de Abstinenz wegen Leitungsstörung gehts endlich wieder, ich wollte heute in der Früh eine neu Version posten.
    Dann eben jetzt, ich hoffe Alpines ist zufrieden mit meiner Kreation, es hat sich einiges getan.

    Habe wieder einiges am Script nachgebessert, ich lade extra für Dich @alpines ein neues Exemplar hoch zum Beurteilen
    des Code Aufbaus. Wenn du ihn für gut befunden hast wird es uns alle freuen.
    Wie gefällt dir die neue Variablen-Deklaration, bist jetzt zufriedener damit, aber sei ruhig Ehrlich beim Beurteilen.

    Ich hoffe du findest jetzt wesentlich weniger Unschönes was missfällt.

    Ausserdem habe ich die Timings etwas verkürzt, geht das noch oder ist es zu schnell, Brillenträger brauchen schonmal
    etwas mehr Zeit um etwas genau zu erkennen.

    Und was meintest du von wegen ohne Grenzen, braucht man echt soviele Clipeinträge, ich für meinen Teil komme mit den 20
    Clips gut zurecht, ich will mir ja auch noch merken was ich kopiert habe. Wer den Source verwendet kanns sichs ja eh
    zurechtschustern wie's gefällig ist und die Clipgrenze für die Exen habe ich auf 5 bis 50 vorgegeben.
    Denkst du wirklich, daß das nicht reicht. Es kopiert doch hoffentlich keiner die Buchstaben einzeln.

    Ebenso würde mich interessieren was @Oscar @UEZ @BugFix und @eukalyptus von meinem Tool halten.
    Vielleicht habe ich ja Glück und einer von Ihnen sieht sich Smartclip mal an, das würde mich freuen.

    Ein dickes Lob an Eukalyptus für dein "Audiometer" und an Oscar für deine Hangman Version, die Programme sind
    wirklich sehr gut geworden. Davon werde ich noch lange träumen können, aber ich bin auch nur ein Hobbyprogger
    der sich alles Autodidaktisch beigebracht hat und das mit minmalsten Englischkenntnissen, dafür kann ich
    zufrieden sein. Normalerweise schreibe ich nur Tools die 50 bis 100 Zeilen haben.

    Ich aktualisiere dann den Komplett Download im ersten Post.

  • Hallo @Tuxedo !

    Ich bin gerade etwas im Stress, daher nur allgemeine Anregungen (Basis ist 'Smartclip_1.68.zip').


    1. Variablenpräfixe :
    Ein wesentlicher Punkt ist immer noch die von mir und @alpines angesprochene Weise, wie Du Variablen
    (und auch Funktionen) benennst.
    Zur Zeit hat das Skript lediglich 250+ Zeilen, da mag dieser Aufwand übertrieben wirken.
    Das wird mit Sicherheit aber noch mehr werden. Zudem ist es wohl auch nicht das letzte Skript :) .
    Die eingebundene _Singleton-Funktion kannst Du nebenbei, wie diskutiert, herausnehmen, und
    stattdessen <Misc.au3> includen.

    Da Du um Tipps gebeten hast, und, nach eigener Aussage, nur minimales Englisch sprichst, habe ich den Bereich aus 'Best coding practices' mal frei übersetzt :

    Die Namenskonvention, die in AutoIt verwendet wird, basiert auf der 'Ungarischen Notation'. Folgende Präfixe sind gebräuchlich :
    Präfix Typ Beispiel
    a Array $aArray[0]
    b Boolean $bBool = True
    d Binär $dBinary = Binary("0x80000000")
    f Fließkomma $fFloat = 0.123
    h Handles $hGUI = GUICreate("My GUI")
    i Integer $iInteger = 10
    id ControlID $idButton_Ok = GUICtrlCreateButton("OK", 5, 5)
    m Maps $mMap[]
    n Nummer (allgm.) $nNumber = 0
    p Pointer $pRect = DllStructGetPtr($tRECT)
    s Strings(Chars) $sString = "Hello world"
    t Structures $tSTRUCT = DllStructCreate($tagSTRUCT)
    v Variant $vData = ClipGet()

    Diese Liste kann man nach Bedarf erweitern oder kombinieren, z.B. : $asArray[] -> Array aus Strings

    Im GUI-Bereich verwende ich z.B. Präfixe wie :
    $idLbl für Labels, $idBtn für Buttons usw., aber das ist Geschmackssache.

    AutoIt selbst sind die Präfixe völlig egal, d.h. es findet keine Syntaxprüfung statt. Sie geben dem Programmierer aber einen wichtigen Hinweis, wofür die Variablen stehen.

    Zusätzlich kann man noch ein weiteres Präfix für globale Variablen voranstellen :
    Globale Variable : $g_iInteger
    (Globale UDF Variable : $__g_iInteger)
    -> Globale Variablen immer am Anfang eines Skriptes deklarieren, nicht irgendwo mittendrin.
    -> keinesfalls globale Variablen in einer Funktion deklarieren.

    2. Deklaration (Dim / Global / Local) :
    Du deklarierst die Variablen mit Dim. Schaue Dir diesbzgl. mal den Teil der Hilfe an :
    https://autoit.de/onlinehilfe/keywords/Dim.htm
    Ggf. ist die Verwendung von Global und Local geeigneter.

    Zudem würde ich Deklarationen, aus Gründen der Übersichtlichkeit untereinander schreiben, also statt :
    Dim $Clip[20], $Cstep = 0, $Vstep = 0, usw.

    Dim $Clip[20]
    Dim $Cstep = 0
    Dim $Vstep = 0,
    usw.

    Falls Du mehrere Variablen in eine Zeile setzt, dann sollten sie zumindest den gleichen Typ haben.
    Auch hier gilt : Wir müssen für Zeilen nichts bezahlen :)

    3. MustDeclareVars :
    Bei umfangreicheren Skripten verwende ich i.d.R. den Befehl :
    Opt('MustDeclareVars', 1) ==> (gleich nach den Includes setzen)

    Zitat aus der Hilfe :
    Wenn diese Option genutzt wird, müssen alle Variablen mit Dim, Local oder Global deklariert werden, bevor sie verwendet werden können. Dies beseitigt die Möglichkeit von Bugs durch Schreibfehler in Variablen.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Der Grundgedanke zum Skript ist eigentlich die Verkörperung von AutoIt --> Automatisiere Es!
    Die funktionelle Umsetzung ist soweit dem Ziel entsprechend.
    Es wurde ja schon Einiges gesagt (Notation, Struktur etc.), da möchte ich nicht weiter drauf eingehen.
    Ich habe der Einfachheit halber im Skript meine Anmerkungen
    ; [BF]
    ; Anmerkung
    ;[/BF]
    eingefügt.

    Spoiler anzeigen
  • Hallo @BugFix ich freu mich sehr über deine Anmerkungen zu meinem Script, sie sind sehr hilfreich, einiges davon werde ich gleich versuchen
    in mein Script einzubauen, aber leider ist einiges dabei was mir früher schon Probleme gemacht hat und nicht funktionierte. Aber ein paar Dinge
    werde ich wohl allein hinkriegen.
    Zur Zeit liegt mein Hauptaugenmerk darauf das Tool möglichst Fehlerresistent und benutzfreundlich zu kriegen.
    Mal sehen wie ich das mit dem SendMesaage statt Send("^c") lösen kann, das wäre essentiell wichtig für die Fehlerfreiheit des Scripts.

    Spoiler anzeigen


    Mit der Notation habe ich noch so meine Schwierigkeiten, das kommt vielleicht daher, daß ich nicht in C++ oder vergleichbarenb Sprache schreibe wo das
    notwendig ist und ausserdem schreibe ich sonst nur Tools mit 50-100 Zeilen, da behält man den Überblick sehr leicht, bis das ins Blut übergeht wirds noch dauern.
    Und ich bin froh, daß du darüber nicht weiter eingegangen bist.

    MustDeclareVars verwende deahalb nicht mehr weil es mich schon öfters zum verzweifeln brachte, dafür achte ich sehr gut auf mögliche Fehler,
    da wäre mal eine UDF angebracht die einfach alle gefunden Variablen selbstständig im Scriptkopf Global oder in der Funktion als Lokale Variablen
    erstellen würde, aber das ist für mich noch zu viel des guten eine UDF zu erstellen, die sollte frei von Fehlern sein.

    Bei dem Punkt mit den Hotkeys bin ich mir noch unsicher, denn bei CTRL+c und CTRL+v brauche ich die Eigenart von Hotkeyset des Abfangens
    der Tastendrücke sonst funktioniert mein Script nicht mehr richtig, ausserdem könnte es Probleme geben, wie soll man dann die Tasendrücke aktivieren
    wenn man kein GUI-Fenster zum Aktivieren hat.
    Nach meinem Wissensstand werden die GUI-Accelerators doch nur auf das Aktive Fenster angewendet oder irre ich mich.
    Ich habe aber kein sichtbares GUI-Fenster.
    Ich werde es versuchen deinen Tipp umzusetzen, weiß allerdings nocht nicht wie.


    Und die Wechsel zwischen der Verwendung von _IsPressed bool'sch aboder"$bVar = True/False" kommt daher, daß ich vorher (Is -- Is Not) verwenden
    wollte, es aber aus unbekannten Gründen nicht wie gewünscht lief und dann durch probieren kam ich zur anderen Variante.
    Das ist keine Absicht von mir tut mir leid.


    Das mit dem Timer war das einzige für mich nutzbare, aber auf die Idee mit der Mausbewegung kam ich nicht, ich hatte zum blockieren nur
    die Msgbox verfügbar und dort geht das mit den Schriftanpassngen nicht, werde sofort(an der Blockade mit Mausbewegung) arbeiten und das
    in mein Script einbauen, Danke für den Tipp.


    Die nächsten 2 Punkte gehören irgendwie zusammen und stellen die Archillessehne meines Scripts dar. Ich bin mir nicht sicher evtl. ist das Problem
    genau das Send("^c") , ich weiß nur, daß die Funktion "Kopieren" Probleme hat wenn ich die nachfolgende Sleep(100) entferne.
    Ob das mit dem Send-Befehl zusammenhängt weiß ich nicht. Aber wenn die Sleep(100) fehlt, kopiert mir das Script keine Bilder mehr sondern nur der
    Link landet dann im Clipboard. Aber das Drücken der Control-Taste während des Link Kopierens sollte die Funktion BildCopy aufrufen,
    aber ohne Sleep(100) wird stattdessen in die Funktion Kopieren gesprungen(ich verstehe einfach nicht warum).
    Ich werde deinen Tipp versuchen einzubauen mit SendMessage, aber da werde ich Hilfe brauchen dafür.

    Ich sehe schon, da wird wohl noch einiges an Arbeit auf mich zurollen, scheint so als ob ich irgendwie im logischen Aufbau des Scripts noch
    einige Fehler habe die ich dann mit unguten und und eigentlich vermeidbaren Klimmzügen wieder ausbügeln musste.
    Ich hoffe ich kriege das hin, das Tool wäre den Aufwand auf jeden Fall wert.

    Danke BugFix für deine Ergänzungen

    Grüsse vonTuxedo