In diesem Thread geht es um Funktionen,
- deren Verhalten von der in der Hilfe beschriebenen Weise abweichen
- deren Übergabeparameter/Rückgabewerte Inkonsistenzen zeigen
- die sonstige, unerwartete Besonderheiten aufweisen
Zusätzlich zu den internen AutoIt-Funktionen kann auch auf vergleichbare Probleme und/oder Lösungsvorschläge in UDF's eingegangen werden, die von der Community erstellt wurden. Dabei sollten wir uns aber auf UDF's beschränken, die 'qualitativ allgemein anerkannt' sind.
Falls die Besonderheit bereits in einem eigenen Thread behandelt/gelöst wurde, dann langt als Antwort ein entsprechender Link, z.B : Merkwürdiges Verhalten bei DirMove
Der Thread ist als Ergänzung zur AutoIt-Hilfe gedacht, soll diese aber keinesfalls ersetzen !
Durch die Themenbreite wird das ganze zwangsläufig unübersichtlich bzw. unstrukturiert. Schwer vorherzusehen, ob ein Thread in dieser Form überhaupt funktioniert. Ich bitte daher, von 'Leerbeiträgen' wie "... finde ich auch ..." usw. abzusehen.
Kommentare, Fragen und Sonstiges können im Allgemeinen Diskussionsthread gepostet werden !
Um die Pflege der Funktionsübersicht zu erleichtern, muss folgendes an den Anfang des jeweiligen Beitrages gestellt werden :
- Name der betreffenden Funktion (UDF)
- ggf. eine beschreibende Kurzinformation
Zusätzlich ist es hilfreich, wenn der Beitragsersteller folgende Angaben macht :
- die verwendete Version des Betriebssystems (z.B. 'Win7 x64') und AutoIt (z.B. Au3: 3.3.14.5)
- wurde das Skript für 32-Bit bzw. 64-Bit 'kompiliert (#AutoIt3Wrapper_UseX64 = N bzw Y)
Funktionsübersicht :
1. Auflistung der bisherigen Shoutbox-Beiträge zu : GUITreeView
Kurzinfo : siehe Startbeitrag weiter unten
2. WinGetHandle (Link)
Kurzinfo : WinGetHandle('[CLASS / WinGetHandle('[REGEXPCLASS
3. ControlSend / ControlGetText (Link)
4. TreeView-Bug / "-1"-Bug (Win7 x64 - Au3: 3.3.14.5) (Link)
5. TreeView DeleteChildren-Bug/Inkonsistenz (Win7 x64 - Au3: 3.3.14.5) (Link)
6. Funktion DirMove (Link)
Kurzinfo :
Falls das Zielverzeichnis bereits existiert wird ein weiteres Unterverzeichnis angelegt - die Daten werden nicht in das bestehende Verzeichnis integriert
7. Funktion DirCopy (Link)
Kurzinfo : DirCopy mit Flag $FC_NOOVERWRITE bricht ab, auch wenn das Zielverzeichnis leer ist
8. Funktion Opt('MustDeclareVars', 1) (Link)
Kurzinfo: AU3Check schlägt nicht immer Alarm bei Opt('MustDeclareVars', 1)
9. Subtrahieren von Fließkommazahlen (Link)
Kurzinfo :
Subtrahieren von Fließkommazahlen (floating point numbers) - auch Gleitkommazahlen genannt :
Ändern der Reihenfolge liefert unterschiedliche Ergebnisse !
10. Funktion Round -> Rückgabe unterschiedlicher Datentypen (Link)
Kurzinfo :
Dieses Verhalten tritt auf, wenn man den optionalen Parameter decimalplaces, also die Anzahl der gewünschten Nachkommastellen (selbst bei 0), verwendet oder weglässt.
11. Funktion WinGetPos und GUISetState(@SW_MINIMIZE) (Link)
Kurzinfo :
WinGetPos liefert nicht wie erwartet die Position und Größe des minimierten Fensters, wenn direkt nach GUICreate('') ein GUISetState(@SW_MINIMIZE) ausgeführt wird
Anmerkung :
Bitnugger hat seinen Beitrag freundlicherweise erweitert, um eventuelle Missverständnisse zu vermeiden.
12. Der Au3Stripper 'parst' einige ternäre Ausdrücke nicht korrekt (Link)
Kurzinfo : Vom Au3Stripper erzeugter Code (*_stripped.au3) ist bei gewissen Notationen fehlerhaft.
-> Offiziell gefixt in SciTE4AutoIt > 4.1.2 (alles nach dem 02-01-2019)
13. Vorsicht bei den Hilfebeispielen zu einigen _WinAPI_Path... Funktionen (Link)
Kurzinfo :
Die Hilfebeispiele zu _WinAPI_PathRemoveArgs, _WinAPI_PathGetArgs und _WinAPI_PathParseIconLocation verwenden die Funktion _WinAPI_AssocQueryString.
Diese Funktion ermittelt ungünstigerweise Werte aus der Registry, welche mal mit und mal ohne Anführungsstriche angegeben werden. Somit kann es zu einem Rückgabewert kommen, der in den _WinAPI_Path... Funktionen nicht verwertbar ist.
14. Achtung bei IniRead* Funktionen und .ini-Dateien mit der Kodierung UTF-8 mit BOM (Link)
Kurzinfo :
Ist eine .ini-Datei als UTF-8 mit BOM gespeichert, dann wird die erste Zeile der Datei von den IniRead* Funktionen nicht erkannt.
15. Fehlerhafte Beschreibung des Return Values bei _WinAPI_EnumWindowsTop (Link)
Kurzinfo :
Statt (wie in der Hilfe beschrieben) :
[0][0] - Number of rows in array (n)
wird folgendes zurückgegeben :
[0][0] - Number of top-level windows found
[0][1] - Number of rows in array (n) ; ist immer eine durch 64 teilbare Zahl
(leere Zeilen im Array werden vor der Rückgabe nicht eleminiert)
16. _WinAPI_GetBkColor($hDC) -> Ausgabe der Hintergrundfarbe eines Controls (Link)
Kurzinfo :
Die Funktion _WinAPI_GetBkColor($hDC) gibt erst dann die Hintergrundfarbe eines Controls aus, wenn zwischen _WinAPI_GetDC($hWnd) und _WinAPI_GetBkColor($hDC) ein SendMessage aufgerufen wird, mit dem ein Brush-Objekt erzeugt wird.
17. Int() -> unsignierte int32 verarbeiten (Link)
Kurzinfo :
AutoIt hat nur signierte int32- und signierte int64-Typen. Um ein vollständiges unsigned int32 zu speichern, müssen wir das int64 verwenden.
Anmerkung : Dank an Bitnugger für die sehr ausführliche Beschreibung inkl. Beispiele. Dank auch an AspirinJunkie für die genaue Analyse, siehe (Link)
(... hier werden neue Punkte eingefügt)
Anmerkung : Warum starte gerade ich diesen Thread ?
In den letzten Tagen gab es in der Shoutbox mal wieder eine interessante Diskussion (siehe Auflistung) mit sehr nützlichen Erkenntnissen. Da die Shoutbox aber nur für Mitglieder sichtbar ist, gehen Gästen diese Informationen verloren. Zudem verschwinden Shoutbox-Beiträge recht schnell im Archiv und werden dann auch von Mitgliedern nicht mehr gefunden.
Da ich die Bitte geäußert habe daraus einen Thread zu machen, wurde mir prompt diese Ehre zuteil - meinen Dank an Bitnugger
Nachfolgend die Auflistung der bisherigen Shoutbox-Beiträge zu : GUITreeView
alpines Freitag, 25.01.2019
Wow, darauf muss man erstmal kommen. Wenn man _ArrayDisplay verwendet, darf man nicht mit GUITreeView* neue Items erstellen und mit -1 draufzugreifen (obwohl die Parentcontrols etc. richtig übergeben werden!!!), denn es ist ja noch die ArrayDisplay GUI "aktiv" obwohl diese geschlossen wurde.
Also entweder GUISwitch vor dem Erstellen der TreeViewItems, oder man speichert das Handle ab und übergibt es. Dann klappt es, egal auf welcher GUI man ist.
Man hätte auch ruhig die aktuelle GUI (inkl. Tabitem falls vorhanden) auslesen können und im Nachhinein wieder mit GUISwitch setzen können.
Anm. Bitnugger : Ja, total ätzend... oder einen zusätzlichen Parameter $hWnd, wie bei MsgBox.
Bitnugger Samstag, 26.01.2019
Eigentlich ist es aber ein Fehler von GUISwitch... das mit dem Handle der nicht mehr existierenden GUI von _ArrayDisplay/_DebugArrayDisplay hantiert, anstatt das zuvor gültige
GUI zu verwenden, falls vorhanden.
alpines Samstag, 26.01.2019
Nein, mit GUISwitch funktioniert es ja. Das -1 greift auf die falsche GUI zu, übergebe ich allerdings das Handle von dem Item (OHNE GUISwitch) klappt es, mit -1 nicht.
Bitnugger Sonntag, 27.01.2019
Das -1 greift auf eine nicht mehr existierende die falsche GUI zu" ... ...AutoIt sollte das erkennen und die zuletzt gültige GUI anstelle der nicht mehr existierenden GUI verwenden.
alpines Sonntag, 27.01.2019
Genau, mit GUISwitch hat das ja aber nichts zu tun. Das behebt ja den Fehler, ohne klappts nur mit Handle.
Bitnugger Sonntag, 27.01.2019
Stimmt... ideal wäre also, wenn AutoIt beim Löschen einer GUI den Fokus automatisch auf eine zuvor erstellte und noch existierende GUI setzt, oder das Control nicht erstellt, falls keine existiert.
Bitnugger Montag, 28.01.2019
GUICtrlGetState($g_idIOListView) <-- hat mir heute den Tag versaut... weil --> "For ListView controls it returns the number of the clicked column."
alpines Montag, 28.01.2019
Ja, das hatte ich auch vor ein paar Monaten lernen müssen. Sowas wird aber leider niemals gefixt werden. Auch schön zu "erfahren", dass einige TreeView-Funktionen mit @GUI_CtrlId funktionieren, und einige auf GUICtrlGetHandle(@GUI_CtrlId) angewiesen sind.
BugFix Dienstag, 29.01.2019
Wenn du willst, dass es wirklich funktioniert: Eigenes Handling aller Messages durchführen.
Dann weißt du wenigstens, dass du selbst der Depp warst, wenn es nicht klappt.