Beiträge von Kanashius

    Da der Internet Explorer 11 jetzt aus Windows 10 entfernt wurde, sollten in AutoIt auch die IE.au3 Funktionen nicht mehr funktionieren, oder?

    Vielleicht sollte man anfangen, an einer version für Edge/mit Chromium zu arbeiten.


    Was denkt ihr dazu?

    Da du ja so nett fragst 8o

    Hier die kurze/schnelle Variante mit RegExp:

    Ich hatte mal wieder lust auf etwas RegExp ^^


    MfG Kanashius :)

    Du musst diese Funktionen (Tastenkürzel) auf dem Hostsystem ausführen, da kein Programm vom Gast-System auf das Host-System oder VMWare zugreifen darf.

    Normal weis ein Programm nichteinmal, dass es in einer VM läuft.

    Das Einzige was mir einfällt wäre ein geteilter Ordner/Clipboard und ein Programm beim Host reagiert dann auf Änderungen dort und sendet die Tastenkürzel.


    Dabei solltest du dann aber aufpassen, dass auf keinen Fall die Sicherheit des Host-Systems ein Problem bekommt. Hängt natürlich auch vom Anwendungsfall ab. Du benötigst dann natürlich auch Zugriff auf das Host-System.

    Ich denke, ich hab das Problem groesstenteils in den Griff bekommen... Der Regulaere Ausdruck (um den ich jetzt nicht so wirklich drumherum gekommen bin, weils sonst echt komplex wird) scheint zu funktionieren.

    Die neue Funktion gibt -1 zurueck, wenn keine Funktion gefunden wurde, andernfalls wird der Funktionsname sowie die Anzahl Zeichen (mit Einbeziehung der Tabs) bis zu dem Funktionsnamen berechnet.

    Vllt. testet ihr den Ausdruck ja auch noch und findet noch Fehler, wobei das fixen etwas schwieriger sein duerfte :D


    Ich fueg auch mal wieder einen Screenshot an um die Funktionsweise besser darzustellen:

    Der Ausdruck scheint auch teilweise fuer Macros zu funktionieren... ein netter nebeneffekt :P


    MfG Kanashius


    PS: Sorry fuer die fehlenden Sonderzeichen der Deutschen Sprache, ich bin grad dabei auf US-Tastaturlayout umzusteigen und dort gibt es die Tasten nunmal nicht :D

    Ich hab das ganze gerade auch noch mal ohne Regulaeren Ausdruck umgesetzt, da du die ja scheinbar nicht magst ;)
    Ist natuerlich etwas laenger+komplexer, fuer die Laufzeit aber evtl. sogar besser :P


    Ich hab das hier gerade gebastelt... das sollte alle Probleme recht simpel loesen, bis auf das, wo aus dem Bereich gescrollt wird. Dort solltest du mal schauen, ob du herausbekommst, wie weit gescrollt wird,... das folgt dort auch festern regeln... duerfte aber unschoen werden...

    Der Ansatz ist der, mit dem regulaeren Ausdruck die Zeichen in Gruppen von 4 (tablength) zeichen zu zerlegen. Die Anzahl wird am Ende gezaehlt und entsprechend multipliziert. Der letzte Eintrag im array ist so lang, wie viele Zeichen enthalten sind, oder wenn ein Tab enthalten ist wieder (4).

    Somit musst du nur den Text vom Anfang der Zeile bis zur CaretPosition/Anfang des Wortes dort bekommen.

    In regex101 kann man das sehr schoen sehen:


    Zum regex: [^\t\r\n] matcht alle Zeichen ausser tab und zeilenumbruch. mit {0,3} wird dies 0 bis 3 mal gemacht und am ende mit dem Punkt ein beliebiges zeichen (also auch tab).

    Ich hoffe du kannst das verwenden und das Scrollproblem loesen.


    Viel Glueck :)

    Zum Fenster gehört auch der Rahmen, die Titelleiste,... Wenn du also das Fenster auf die Labelgröße setzt, wird das Label angepasst, damit es trotzdem weiterhin in das Fenster passt.

    Du kannst das resizen des labels deaktivieren, wie paul_p_meier bereits vorgeschlagen hat, dabei wird aber dann ein Teil des labels abgeschnitten.

    Deshalb würde ich empfehlen, dass du der Fenstergröße den Clientbereich des Fensters abziehst und den unterschied dann beim resizen des Fensters mit einberechnest (Ich weiß den Befehl fürs abfragen des Clientbereichs grad nicht auswendig, sollte in der WinAPi sein...).


    MfG Kanashius

    Wenn so viele Daten geschrieben werden, wird deine Festplatte das vmtl. auch nicht sehr lange mitmachen... ich würd empfehlen, dass du, wenn du unbedingt bei Dateien zur übertragung bleiben willst, zumindest eine RamDisk verwendest (Wie ein normaler Ordner, nur dass er komplett im Arbeitsspeicher liegt und als Drive eingebunden wird). Die Dateien sind ja vmtl. nicht so groß, sodass ca. 1 GB ausreichen sollte... Dadurch würde die Geschwindigkeit des lesens/schreibens natürlich auch steigen ;)


    Ansonsten braucht man halt den Code und mehr Infos über die Datenmenge,... um bessere Tipps zu geben

    Für das Ändern des Namens musst du als ersten Parameter den Eintrag des Arrays nehmen, also so:

    C
    $arTvListControls[$i][0][0]=GUICtrlCreateButton($arTvList[$i][2],$arPointTvListStart[0]+($i*($iTvListItemWidth+$iTvListButtonSpace)),$arPointTvListStart[1],$iTvListItemWidth,$iTvListButtonHeight)

    Die Position kannst du natürlich auch mit in das Array geben und dann beim erstellen der Buttons entsprechend nutzen.

    Was das Profil angeht: Ja du kannst auch ein Array in ein anderes Speichern und somit die $arContextMenuButtons dort angeben. Meist speichert man dort aus performance gründen eher den Index und ruft dann mit dem Index die passenden Daten aus einem anderen Array, da dann weniger Daten gespeichert werden,... sollte für deinen Anwendungszweck aber nicht relevant sein, denke ich :thinking:

    Das wird funktionieren, Reguläre Ausdrücke sind aber nicht sehr gut dazu geeignet, xml zu parsen. Besonders wenn es komplexere XML-Dateien sind is das immer schwerer.


    MfG Kanashius.

    Naja, in dem Script hast du oben ja die Arrays für die TVs und das Contextmenü. Das kannst du beliebig erweitern:

    würde mit dem was du dort haben möchtest zu:

    C
    Global $arTvList=[ _
    ["192.168.0.10",$iDefaultPort,"DisplayName1"], _
    ["192.168.0.11",$iDefaultPort,"DisplayName2"], _
    ["192.168.0.12",$iDefaultPort,"DisplayName3"] _
    ] ;All client IP´s

    Auf dieselbe weise kannst du das ganze auch das Array für die ContextMenuButtons erweitern und z.B. die Info speichern, ob der Eintrag für VLC oder TelNet ist,...

    Du kannst auch das Array für die ContextMenuButtons auf ein 3D array umstellen und dann in dem weiteren verfügbaren eintrag die information speichern, ob es ein vlc, telnet,... profil ist und beim tv das ebenfalls eintragen, auslesen und das passende profil nutzen um das contextmenü zu erzeugen.

    Arrays sind im Prinzip Listen (1D), Tabellen (2D) oder Tabellen mit Listeneinträgen (3D):

    Normal würde ich in anderen Programmiersprachen Objekte nutzen um diese Daten zu speichern, AutoIt bietet dies möglichkeit leider nicht (nativ ohne größere Umstände).

    Deshalb würd ich dein Projekt vermutlich in z.B. Java umsetzen. Dort kann man eine gute Struktur mit Objekten und Vererbung aufbauen, sodass es übersichtlich ist, und das Fenster wäre auch etwas einfacher zu individualisieren ;)


    PS: Die ausgelesenen Infos (die du im anderen Thread erwähnst) kannst du nehmen um das Array zu erstellen.


    MfG Kanashius

    Hi Speedy86 .


    Das was du suchst sind Arrays. Ich hab dein Script mal umgeschrieben, sodass es arrays nutzt. Du musst theoretisch nurnoch die globalen variablen anpassen und es sollte tun, was du möchtest und du kannst beliebig viele TVs und ContextMenuItems hinzufügen. Außerdem kannst du während das Tool läuft neue Tvs hinzufügen.


    Alle Positionen der Controls werden dynamisch berechnet, sodass es erweiterbar ist und die größe geändert werden kann.

    MfG Kanashius :)

    Du solltest unbedingt Arrays verwenden!

    Ich hab mal deinen Code umgeschrieben:

    Ich hoffe, du verstehst, was dort gemacht wird und kannst das dann in dem Stil weiterentwickeln :).

    Das erspart dir sehr viel Copy&Paste ;)


    MfG Kanashius.

    Leider ist das verwenden von Scrollbars nicht ganz so leicht, wie man das gerne hätte...

    Ich hab hier mal ein Beispiel. Besonders anschauen solltest du dir die Funktionen _setVertScroll und _setHoriScroll. Dort wird die Scrollbar gesetzt. Dabei wird angegeben, wie viele Elemente in dem Fenster sind und es wird angegeben, wie viele Elemente auf eine "Seite" passen.


    Vielleicht hilft dir das Script zum besseren verständis.


    MfG Kanashius :)

    Ich hab das ganze mal etwas robuster gegen andere Fenster gemacht, die zum gleichen Zeitpunkt auftauchen... Nur den Titel bekomme ich nicht wieder zurückgesetzt -.-

    Da hab ich grad glaub ich ne Denkblockade...

    Aber schau dir den Code unten gern an. Ich habe die Informationen von der Win_Api: https://docs.microsoft.com/de-…p/legacy/ms644977(v=vs.85) genommen und daraus die Strukturen,... gebastelt. :)

    Ich würde vorschlagen, dass wir das etwas abändern. Momentan wird beim ersetzen jede Zeile ersetzt, sofern es ein error/warning/==> ist. Stattdessen würde ich es mit nem If machen. Wir haben ja schon die Erkennung, ob es error, warning oder ==> ist und können dort nur bei dem ==> eine Ersetzung vornehmen, dann wird der Ausdruck zum ersetzen deutlich einfacher als jetzt.

    Die Änderung mit dem error würde es nur noch komplexer machen und die Methode ist auch was Performance angeht nicht sehr schnell. Meistens wird man zwar vorher schon rausgeworfen, da die ", der Pfad, die Klammern,... nicht stimmen, aber das muss je nach Ausgabe des Programmes nicht immer der Fall sein. Mit viel Pech könnten wir die Kommandozeilenausgabe ziemlich verlangsamen. Ich "missbrauche" ein forward lookahead um das ",1" ,welches ans Ende angefügt wird zu finden und zu matchen und als Gruppe anzuzeigen. Dabei wird der gesamte String 1x extra durchsucht. Für das error müsste ich was ähnliches machen,...

    Ich hab das ganze jetzt mal mit einem regulären ausdruck erledigt:

    Einmal wird gesucht und der Dateiname, die Zeile und Spalte sowie der Typ in ein Array gespeichert und dann wird auch mit nem StringRegExpReplace die Zeile ersetzt, so wie du sie haben möchtest :)

    Ausgabe:

    Code
    "D:\test files\FileQuantityLimit (Testdatei).au3"(112,16) : warning: $iTest possibly not declared/created yet
    FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (112,16) -> warning
    "D:\test files\FileQuantityLimit (Testdatei).au3" (112,16): warning: $iTest possibly not declared/created yet
    "D:\test files\FileQuantityLimit (Testdatei).au3"(131,11) : error: zzzz(): undefined function.
    FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (131,11) -> error
    "D:\test files\FileQuantityLimit (Testdatei).au3" (131,11): error: zzzz(): undefined function.
    "D:\test files\FileQuantityLimit (Testdatei).au3" (163) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    FOUND: D:\test files\FileQuantityLimit (Testdatei).au3 -> (163) -> ==>
    "D:\test files\FileQuantityLimit (Testdatei).au3" (163,1): ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    Wobei die for Schleife mit $j nicht notwendig sein sollte und stattdessen nen ConsoleWrite(@TAB&"FOUND: "&$arResult[0]&" -> "&$arResult[1]&" -> "&$arResult[2]&@crlf) ausreichen sollte :)


    MfG Kanashius