Glücklichen Herzwunsch und alles Gute!
Beiträge von Andy
-
-
Naja,
die Frage ist, ob ich jemandem den Umstieg von GDI nach OpenGL schmackhaft mache, indem ich ihm mit 50 Zeilen GL-Code zeige, was er mit GDI in 5 Zeilen hinbekommt...
Dass bei GL 50% der Befehle "Standard" sind, die immer und ewig in jedem Programm durchgenudelt werden müssen, weiss der GDI-User vorher nicht!Wenn ich aber (schau dir dazu meine Beispiele in OpenCl an) eine Zeile "abstrahierten GL-Code" fürs Fenster erstellen habe, eine weitere, um eine *.PNG in diesem Fenster darzustellen, eine dritte, um einen xyz-Filter über diese Grafik laufen zu lassen, ja DANN wird der GDI-Fuzzi plötzlich wach
3D alleine ist ja nur die halbe Wahrheit, auch in 2D hat OpenGL Vorteile.ZitatSonst bringen allgemeine Tutorials für OpenGl den Nutzern nichts mehr
Ganz ehrlich, schau dich mal im Internet zum Thema "allgemeine Tutorials" um. Wenn der "Nutzer" davon 5% gebrauchen kann, dann ist das bestimmt nicht weit weg von der Wahrheit. Ich brauche ein Tutorial, um herauszufinden, ob ich mein Problem mit einfachen Mitteln und einem entsprechenden Werkzeug lösen kann.
Ich habe ca. 1h damit zugebracht, die "wehende Deutschlandfahne" aus deinem Beispiel vollflächig gerade und fensterfüllend, also "native 2D" darzustellen. Mit Hilfe von ca. 5 weiteren "Tutorials" aus dem Inet. Soviel dazu
Dass diese Aktion auch noch 20 Zeilen Code braucht, und ich bei den meisten Funktions-Parametern auch noch rumspielen musste um herauszubekommen, was sie für einen Zweck erfüllen, hat mich ehrlich gesagt nicht begeistert! -
die Extensions-Funktionen sitzen größtenteils als Pointer-Adresse in der dll, da isses dann einfach, hab mir nen universellen "Aufrufer" geschrieben. Der holt sich über GetProcAddress() den Pointer und called per DllCallAddress() dann die dort liegende Adresse.
Muss jetzt nur die in der dll liegenden Funktionen und Aufrufparameter auseinanderklabustern...
Für die Typen schreib ich mir ne Ersetzungstabelle, ist am einfachsten.Aber zuerst muss ich mal mein Script funktionsfähig haben und überhaupt KAPIEREN was da Sache ist mit OpenGL^^
Ich werde dann "einfachst"-GL-Funktionen haben und alles kapseln, was unnötig ist. Sozusagen dem User vorbestimmen, was er am Ende sehen soll im Fenster^^
Ziel ist, sehr simpel per CL die Bufferdaten von GL zu manipulieren, das hab ich so weit schon lauffähig. Erst mal in 2D, 3D ist nur noch ne Fleißarbeit. Natürlich kann man die Shader immer noch über GL-Befehle beeinflussen, also Kamerafahrten usw sind dann Sache von Freaks wie dir^^Der Speedunterschied zum GDI-"blitten" ist jedenfalls gewaltig, habe schon Funktionen, um die Ausführungszeiten und Buffertransferzeiten vom CL-Kernel zu messen, die Ergebnisse sind Beeindruckend....
-
Bin einer der ersten AOL-Kunden in Deutschland gewesen, das wird ca. 20 Jahre her sein.
Seit dem dort 5 Accounts (Familie), und wenn es hoch kommt, hab ich in der Woche 10 Spam-Mails (für alle 5 acc), die aber dann mein MailProgramm (in Opera) wegfiltert...1 Account bei der t-com, selten genutzt (Telefonrechnung, Routerkonfig)
-
Hi,
im Zuge der Zusammenarbeit von OpenGL und OpenCL benötigte ich einige Funktionen der glew32.dll
glew ist, so wie ich das jetzt überblicken kann, mit hunderten Funktionen am Start. Eine Handvoll dieser Funktionen habe ich schon konvertiert.minx, hast du einen "C nach AutoIt"-Konverter, den du auf die *.h-files loslässt?
So etwas ähnliches hatte ich mir für die Konvertierung von OpenCl nach AutoIt geschrieben, allerdings war noch bissl Handarbeit nötig, vor allem die Typen bei den DllCall´s sind imho bissl schwierig automatisch zu ermitteln. -
Hi,
ZitatMein Vater wollte mich Andreas nennen und meine Mutter Marcus.
hehe, genau so wars bei mir vor nem halben jahrhundert auch^^
Zitat(Da die Frau aber mehr zu sagen hat ist der Marcus nach vorne gerutscht).
...da mein Vater nach meiner Geburt gefragt wurde wie das Kind heissen soll, heisse ich NICHT Marcus, sondern Andreas
In der Schule im Englisch-Unterricht bekam ich von unserer Englischlehrerin den Namen "Andrew" verpasst. Das fand ich total übel, aber alle meine Kumpels riefen mich glücklicherweise "Andi" (nicht ÄNDIII). Da es aber haufenweise Andreasse damals gab, und alle "Andi" hiessen, wurde ich der "Andy" (gesprochen Andi)
-
Hi,
um mal die Frage des TE zu beantworten, klar gibts was fertiges!
Sich mit dieser Vorlage hinzustellen und nach einer ERKLÄRUNG zu fragen, ist schon frech.... -
Hi,
[autoit]GUICtrlCreateEdit ()
[/autoit] -
Hi,
ZitatAllgemein wird die Performance ja durch das Anzeigen der FPS gemindert
naja, ein wenn ein simpler 2-zeiler, der 1x pro Sekunde aufgerufen wird, "Performance" mindert, dann ist es mit der Performance nicht weit her^^
FPS Gerippe
[autoit]AdlibRegister("_fps", 1000) ;FramesPerSecond
[/autoit] [autoit][/autoit] [autoit]
$fps = 0while 1
[/autoit] [autoit][/autoit] [autoit]
;irgendein grafikkram
$fps+=1
WEndFunc _fps()
[/autoit]
tooltip ($fps & " FPS")
$fps = 0
EndFunc ;==>_fpsdas ist imho so ziemlich das mit AutoIt machbare Maximum.
Interessant ist, dass die "FPS" mal locker im Bereich von 10-20% schwanken, abhängig davon, was sonst noch so auf dem Rechner los ist!FPS im Script
[autoit]; ogl4au3 Example: Rotating Textured Box
[/autoit] [autoit][/autoit] [autoit]
; Autor: minx; Dies ist ein einfaches Beispiel, wie man Texturen in OpenGl nutzen kann. Das Fenstermanagement übernimmt wie immer
[/autoit] [autoit][/autoit] [autoit]
; glfw. Das Textur-Laden und Registrieren übernimt freundlicherweise komplett SOIL!
; Wir brauchen dann nur noch in den TEXTURE_2D Modus zu gehen, und jedem Eckpunkt noch einen Texturpunkt zuordnen.
; ^ Das erledigt meine Extension: extTexCube()
; Das wars schon!#include "..\Includes\opengl.au3"
[/autoit] [autoit][/autoit] [autoit]Local $iAlpha = 0.00 ; Rotationswinkel um den Würfel zu drehen.
[/autoit] [autoit][/autoit] [autoit]
Dim $iW, $iH, $iChannels ; Container für die Werte, die von SOIL übergeben werden. Channel: RGB(A)glInit()
[/autoit] [autoit][/autoit] [autoit]
gluInit()
glfwInit()glfwOpenWindowHint($GLFW_WINDOW_NO_RESIZE, 1); Resize nicht möglich
[/autoit] [autoit][/autoit] [autoit]
glfwOpenWindow(500, 500, 8, 8, 8, 0, 8, 0, $GLFW_WINDOW); Fenster öffnen
glfwSetWindowTitle("Spining Cube"); Titel setzen
glMatrixMode($GL_PROJECTION); Projektionseinstellungen
gluPerspective(20, 500 / 500, 5, 15); Perspektive
glViewport(0, 0, 500, 500); Viewport
glMatrixMode($GL_MODELVIEW); Betrachtungsmodus
$textureId = extTexture3a("..\Media\crate.jpg")
;glEnable($GL_CULL_FACE) ; Rückseite hinten belassen und nicht rendern. Sonst geht alles drunter & drüber!
glEnable($GL_TEXTURE_2D) ; Texturmodus
glEnable($GL_DEPTH_TEST)AdlibRegister("_fps", 1000) ;FramesPerSecond
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$fps = 0While glfwGetWindowParam($GLFW_OPENED) And Not glfwGetKey($GLFW_KEY_ESC)
[/autoit] [autoit][/autoit] [autoit]
;Grafikgedöns einschalten, DAS kostet Performance^^
glClear($GL_COLOR_BUFFER_BIT + $GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
glTranslatef(0, 0, -10); Einen Schritt zurück
glRotatef(30, 1, 0, 0); Leicht von oben schauend
glRotatef($iAlpha, 0, 1, 0.2); Waagerecht rotieren mit Winkel
extTexCube(0, 0, 0, .25) ; Würfel zeichnen. Das Mappen übernimmt glext.
extTexCube(.6, 0, 0, .25)
extTexCube(.25, .5, .3, .25)
extTexCube(.4, 0, .6, .25)
$iAlpha += .4 ; Winkel erhöhen.
glfwSwapBuffers() ; Buffer tauschen.
$fps+=1
WEnd; Aufräumen:
[/autoit] [autoit][/autoit] [autoit]
glDeleteTextures(1, $textureId)
glfwTerminate()
glTerminate()Func _fps()
[/autoit]
glfwSetWindowTitle("Spining Cube "&$fps & " FPS"); Titel setzen
$fps = 0
EndFunc ;==>_fps
Mausschubser erhöhen die FPS, indem sie den Nager über den Schreibtisch bewegen....minx,
viel Fleissarbeit, die API nach AutoIt zu portieren, aber was ich als AutoIt-ler schmerzlich vermisse, sind "Einfachst"-Befehle, die 80% des (in so gut wie jedem existierenden GL-Programm) anfallenden identischen Codes mittels simpler Anweisungen kapseln.
Im Stile der "Extensions"
-
Hi,
idR. kannst du das bei den Treibereinstellungen der Grafikkarte einstellen.
Vertikale Synchronisierung oder VSYNC....mit den Einstellungen dort mal bissl rumspielen.
Auch ist das Triple- dem Doublebuffering vorzuziehen!Wenn die VSYNC eingeschaltet ist, stellt die Grafikkarte nur Bilder synchron zur Bildwiederholfrequenz des Monitors ein (TFT 60Hz)
Das führt dann in ungünstigen Fällen dazu, dass es bei den fixen 60Hz Bildwiederholfrequenz zu "Sprüngen" in der Bildrate (FPS) kommt, wenn die FPS in einem Bereich liegen, der ein Vielfaches bzw ein ganzzahliger Teiler der 60Hz ist.
Denn die Grafikkarte synchronisiert dann die FPS mit der (Monitor-)Bildwiederholfrequenz. Das geht natürlich nur glatt auf, wenn die 60Hz ein Vielfaches der Bildrate ist.
Bei 62FPS werden 60Hz dargestellt, bei 58fps nur noch 30fps dargestellt, also nur ganzzzahlige Teiler von 60.
Wenn deine Graka also in der einen Sekunde 62 Bilder rendert, und in der anderen nur 58, dann kommt es zu Sprüngen in den dargestellten Frames, nämlich einmal 60 und das andere Mal 30. Und diesen "Unterschied" bzw "Verzögerung" zwischen 2 aufeinanderfolgenden Bildern (ca 33ms) sieht man dann als Ruckler.Als Abhilfe könnte man das VSYNC doch einfach ausschalten, das führt aber dann bei einer SEHR hohen Bildrate zum sog. "Tearing". Will heissen, die Grafikkarte ist so schnell, dass sie schon eine neues Bild liefert, obwohl der Monitor das "alte" noch nicht vollständig ausgegeben hat. Bei schnellen horizontalen Kameraschwenks merkt man das besonders deutlich an zerhackten bzw. zerissenen Bildern.
Daher muss ich immer schmunzeln, wenn ich lese/höre (Gamerforen sind voll von diesen Sprüchen) dass div. Leute bei Ballerspielen den Unterschied zw. 70 und 120FPS "sehen". Coole Sache, denn der Monitor stellt ja nur maximal 60 Bilder pro Sekunde dar, völlig egal, ob die Graka 12345tausend FPS liefert^^
Bei niedrigen FPS macht hingegen das "Tuning" schon viel aus, denn es ist ein Unterschied, ob der Monitor bei 19FPS nur 15FPS (60/4)darstellt(s.o.) oder bei 21 FPS eben dann 20FPS(60/3) darstellt.
Bei aktivem VSYNC und 29FPS hat man gelitten, denn der Monitor stellt nur 60/3=20 FPS dar, mal eben 30% der Leistung der Graka in den Wind geblasen^^. Die Auflösung bissl reduzieren und das AA runterschrauben, und schwupps, "sieht" man plötzlich 30FPS..... -
Hi,
seeeeehr nice, vor allem die Musik ist gut
Ggf. könnte man noch bissl mehr "Bewegung" in die Animation bringen, so linear wirds halt schnell langweilig
Wie wärs damit, den einzelnen Frequenzen bestimmte Positionen innerhalb des Fensters zuzuordnen und dort dann jeweils "Bass", Mittel- und Hochtöner zu visualisieren...Zitatdass Andy nichts großes mehr zum Optimieren findet
Wie schon in der SB gesagt, da pfusch ich nicht mehr dran rum^^, wenns ausreichend schnell läuft, ist es genug optimiert
//EDIT....und er kanns nicht lassen mit seinem Gemecker
habe festgestellt, dass der Fensterinhalt "flackert", ich schiebe das jetzt einfach mal auf die GDI- und die "Lock"-funktion (die ich, wie bekannt, sowieso nicht leiden kann....)Spoiler anzeigen
[autoit]While sleep(10)
[/autoit]
_BASS_ChannelGetData($stream, DllStructGetPtr($fftstruct), $BASS_DATA_FFT256)
_Visualize($ptr, $w, $h, $fftstruct)
_WinAPI_BitBlt($hdc_gui, 0, 0, $w, $h, $hdc_bitmap, 0, 0, $srccopy) ;Bitmap in die GUI blitten
WEndso flackerts nicht mehr....
-
Hi,
individuelle Sprachsteuerung ist relativ einfach umzusetzen und auch die Erkennungsraten bewegen sich nach ausreichendem Training im ordentlichen Rahmen.
Kommt ganz drauf an, was du damit machen willst, es gibt mittlerweile "Diktiergeräte" die annähernd fehlerfrei mitschreiben, was die (trainierte) Person spricht.Ich würde mal einzelne Wörter aufnehmen, ggf. 10x, und dann diese mit dem 11.Wort vergleichen (lass dir was einfallen). Hast du 3 Übereinstimmungen und 6x "wahrscheinlich" Treffer, dann passt das doch^^
Zitat...künstliche Intelligenzen...die eine Sprachsteuerung richtig ermöglichen. Ich meine Siri oder diese Sprachsteuerung vom Android sind ja ungebrauchbar ...
Richtig, aber Siri und Android läuft auf irgendwelchen kleinen Kästchen, die zu 99,9% von Leuten bedient werden die dieses System nicht richtig nutzen (können).
Frag mal Eukalyptus zum Thema Sound und Töne/Sprache, der kennt sich aus^^ -
Hi,
wahrscheinlich würde dir gern jemand helfen, aber niemand hat Lust sich durch hunderte Zeilen Code zu wühlen.
Testen kann man dein Script nämlich nicht, weil du diverse Dateien (Grafiken) nicht zur Verfügung stellst.
Pack einfach alles, was zur Ausführung deines Scriptes nötig ist in eine *zip-Datei und lade diese hier hoch.
Dann wird dir sicher auch geholfen
-
Zitat von UEZ
Apropos Win8: das Skript läuft nicht unter Win8 auf meiner physikalischen Kiste!
hmm, die Verwendung von Windows-Standard-Funktionen funktioniert nicht bei Win8? Btw. was funktioniert nicht bzw. was ist der Fehler?
Bestätigt mein bisheriges Vorgehen, immer nur jede 2. BS-Version zu verwenden. -
Zitat von UEZ
Alternativ kann man auch Aero abschalten:
Aero, wasn das?
Wenn Software schon Sch*** ist, dann muss sie wenigstens gut aussehen!Oscar , bissl Debug-code gibts in fast allen meinen Scripten. Dann ist auch das Consolen-Fenster nicht immer so leer
Würden das aber mehr Leute so machen (Debuggen meine ich), dann hätten wir sicher auch weniger Anfragen hier im Forum.
Ctrl+Alt+z ist in diesem Fall in Scite dein Freund
-
Hi, teste mal bitte innerhalb der Schleife
[autoit]$7 = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $e, "int", int($f + $h), "int", int($g + $i), "int", 128, "int", 128, "handle", $e, "int", int($f), "int", int($g), "dword", 0x00CC0020)
[/autoit]
auf Win7 wars bei mir auch extrem langsam, o.g. patch hat geholfen. Woran das liegt werde ich mal analysieren müssen,
Ggf liegt ist der Desktop in einem bestimmten Bereich im Speicher und alles was dort "rein oder raus" geht, wird extra behandelt. -
Zitat
Andy: deine geänderte Version verhält sich aber genauso wie die von minx?!?
Dein BS?
Bei mir getestet auf XP32, ich schau gleich mal auf Win7-64 -
Hi,
ich habe "nur" einen AMD Athlon X2 350, und habe >400bps. bps=blits pro sekunde
auf XP32.bei einer Auflösung von 1680x1050 und einer Kachelgrösse beim blitten von 128x128 kommt man auf ca . 4-5 FPS (ein Frame ist demnach "einmal komplett (theoretisch) gekachelt")
Ohne die "Randomization" (ausschliesslich das blitten) habe ich 180-190 FPS.
Zitat von minxWeder am Random (lol)...kanns liegen...
hehe, selfowned. Profiling FTW
Tja, wenn das alles so einfach wäre
Lässt man nämlich testweise mit vorher per Random ermittelten Koordinaten $f,$g,$h,$i das Script (nur das BitBlt() in der Schleife) mehrmals laufen, dann stellt man fest, dass die bps (blits pro sekunde) sich ab und zu im Bereich von ca. 100 bewegen, dh. FPS<<1 !? Wie kann das sein?
Blitten einmal mit 500FPS und einmal mit 1FPS abhängig von den Koordinaten?
Genau so ist es!
Wird nämlich "auf sich selbst geblittet", dann erfolgt dieser Blit sehr langsam! Warum dieser Fall beim Programmieren der BitBlt()-Funktion nicht abgefangen wird, ist mir ehrlich gesagt ein Rätsel! Was aber stattdessen gemacht wird, ist ein noch größeres Rätsel!
Sortiert man nun diesen Fall im o.g. Script aus, dann ist es "schnell"

Spoiler anzeigen
[autoit]#include <ScreenCapture.au3>
[/autoit] [autoit][/autoit] [autoit]
Local $1 = Opt("GUIOnEventMode", 1)Global $f, $g, $h, $i
[/autoit] [autoit][/autoit] [autoit]
$c = b(0)
$a = @DesktopWidth
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a / 128 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$b = @DesktopHeight
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $b = ' & $b / 128 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$3 = _ScreenCapture_Capture("m.bmp", 0, 0, -1, -1, False)
$d = GUICreate(0, $a, $b, 0, 0, 0x80000000)
$4 = GUISetOnEvent(-3, "a")
$5 = GUICtrlCreatePic("m.bmp", 0, 0, $a, $b)
$e = b($d)$6 = GUISetState()
[/autoit] [autoit][/autoit] [autoit]
$7 = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $e, "int", 0, "int", 0, "int", $a, "int", $b, "handle", $c, "int", 0, "int", 0, "dword", 0x00CC0020)$bps = 0
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("fps", 1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$f = ($a - 128) * Random(0, 1)
$g = ($b - 128) * Random(0, 1)
$h = 2 * Random(0, 1) - 1
$i = 2 * Random(0, 1) - 1
;If Int($g + $i) = Int($g) and Int($f + $h) = Int($f) Then ExitLoop ;saulangsam
If Int($g + $i)<> Int($g) Then ExitLoop;sauschnell
WEnd$7 = DllCall("gdi32.dll", "bool", "BitBlt", "handle", $e, "int", $f + $h, "int", $g + $i, "int", 128, "int", 128, "handle", $c, "int", $f, "int", $g, "dword", 0x00CC0020)
[/autoit] [autoit][/autoit] [autoit]
$bps += 1
WEndFunc fps()
[/autoit] [autoit][/autoit] [autoit]
$fps = $bps / ($a * $b / 128 / 128)
ToolTip($fps & " " & $bps)
If $fps < 10 Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $f+h = ' & $f + $h & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $g+i = ' & $g + $i & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $f = ' & $f & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $g = ' & $g & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug ConsoleConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $h = ' & $h & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $i = ' & $i & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console;~ $f = ($a - 128) * Random(0, 1)
[/autoit] [autoit][/autoit] [autoit]
;~ $g = ($b - 128) * Random(0, 1)
;~ $h = 2 * Random(0, 1) - 1
;~ $i = 2 * Random(0, 1) - 1
;~ Else
;~ $f = ($a - 128) * Random(0, 1)
;~ $g = ($b - 128) * Random(0, 1)
;~ $h = 2 * Random(0, 1) - 1
;~ $i = 2 * Random(0, 1) - 1
EndIf$bps = 0
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>fpsLocal $8 = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $d, "handle", $e)
[/autoit]
$9 = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $c)
Func a()
Exit
EndFunc ;==>a
Func b($j)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $j = ' & $j & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$k = DllCall("user32.dll", "handle", "GetDC", "hwnd", $j)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $k = ' & $k[0] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Return $k[0]
EndFunc ;==>b//EDIT
Habe gerade gelesen, dass in einer VM das Script sehr schnell läuft. Das liegt mit Sicherheit an den optimierten Funktionen/Grafiktreibern. Ggf. ist es einem Programmierer der VM aufgefallen, und er hat den Fall "auf sich selbst blitten" abgefangen! -
-
Hi,
im AutoIt-Verzeichnis befindet sich die Datei Au3Info.exe.
Starten und den Reiter Summary auswählen.
Mit linker Maustaste auf das Fadenkreuz unterhalb der "Finder Tools" klicken und Maustaste gedrückt lassen.
Das Fadenkreuz auf Fensterrahmen, Controls usw ziehen und beim Control, von dem man die Infos benötigt, "fallenlassen".
Die angegebenen Infos können mit allen AutoIt-Funktionen, welche mit den Controls arbeiten, verwendet werden.