Beiträge von Bitnugger
-
-
Ja, ok, gebe dir in allen Punkten Recht... wollte eigentlich nur darauf hinweisen, dass Wow64EnableWow64FsRedirection nur ausgeführt werden muss, wenn @OSArch = "X64" und @AutoItX64 = 0 ist.
-
Habe es noch ein wenig geändert...
AutoIt
Alles anzeigenFunc _QueryUser() If @OSArch & @AutoItX64 = 'X640' Then DllCall('kernel32.dll', 'boolean', 'Wow64EnableWow64FsRedirection', 'boolean', False) Local $iPID = Run(@WindowsDir & "\system32\query.exe user", "", @SW_HIDE, 2) ; 2=$STDOUT_CHILD If @OSArch & @AutoItX64 = 'X640' Then DllCall('kernel32.dll', 'boolean', 'Wow64EnableWow64FsRedirection', 'boolean', True) ProcessWaitClose($iPID) Local $aRegEx = StringRegExp(StdoutRead($iPID), "[\s>](\S+)\s+(\S+)?\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+\s\S+)", 3) If @error Then Return SetError(1) Local $aOut[UBound($aRegEx)/6][6] For $i = 0 To UBound($aOut) -1 For $j = 0 To 5 $aOut[$i][$j] = $aRegEx[$i*6+$j] Next Next Return $aOut EndFunc
-
Das kann ja jeder für sich behandeln, wie er mag.
Schon klar... im @ScriptDir wird aber doch eh als erstes nach der Dll gesucht... und falls sie dort nicht gefunden wird... zusätzlich auch in @SystemDir, @WindowsDir und @WorkingDir ...aber wenn du den Pfad explizit angibst, wird nur in diesem Pfad gesucht!
$sDll_Filename explizit anzugeben macht also nur Sinn, wenn die Dll umbenannt wurde und/oder nicht in in einem der obigen 4 Pfade liegt.
-
Ich hatte es bereits vermutet, war mir aber nicht sicher... erstmals aufgefallen sind sie mir hier in dem Script: Hier das korrigierten Script
-
Schau mal in Zeile 9 und 10... wo kommt denn da das \m und das \a her?
Edit: Zeile 5 würde ich so ändern...
_SQLite_Startup() ; sqlite3.dll muss im @ScriptDir, @SystemDir, @WindowsDir, oder @WorkingDir sein.
-
Hast du schon geschaut ob sich AIMP im silent-Mode installieren lässt?
Silent Installation Switch: ${sharedPath} & aimp_4.50.2058.exe /AUTO /SILENT
-
Auf Win7 Pro x64 habe ich es auch getestet... selbes Spiel wie auf Win 10 X64!
Der Fehler tritt allerdings nur dann auf, wenn ich das Script mit F5 in SciTE starte... die ersten direkt im Script ermittelten Werte für WinPos sind dann immer 800 x 600, alle weiteren Werte für WinPos, die mit dem Einzeiler ermittelt werden, sind dann 809 x 614!
Starte ich das Script in der Eingabeaufforderung - egal ob kompiliert oder nicht - stimmen die Werte immer überein.
Und ...ach neee... das sehe ich erst jetzt...
Neue Version
Code
Alles anzeigen;-- TIME_STAMP 2018-04-16 20:33:08 v 0.1 #pragma compile(AutoItExecuteAllowed, True) #AutoIt3Wrapper_Change2CUI=y _Example() Func _Example() Local $hGUI, $iWinExists = WinExists(WinGetHandle('[TITLE:'&_WinTitle()&']')) ConsoleWrite('! @Compiled = ' & @Compiled & ' - @AutoItVersion = ' & @AutoItVersion & ' - OS = ' & @OSVersion & ' ' & @OSArch & ' - $iWinExists = ' & $iWinExists & ' - @ScriptName = ' & @ScriptName & @CRLF & _ '--------------------------------------------------------------------------------------------------------------------------------' & @CRLF) If $iWinExists Then Return __GetPos() $hGUI = GUICreate(_WinTitle(), 1930, 1000, -2000, -100) GUICtrlCreateLabel('Press ESC for Exit!', 10, 10, 1910, 128, 1) ; 1 = $SS_CENTER Local $0 = GUICtrlSetFont(-1, 48, 900) + GUICtrlSetColor(-1, 0x6495ED) + GUICtrlSetBkColor(-1, 0x696969) WinMove($hGUI, GUISetState(), 10, 10, 800, 600) __Print('+', '+', $hGUI, WinGetPos($hGUI), WinGetClientSize($hGUI)) __GetPos() Do Until GUIGetMsg() = -3 EndFunc ;==>_Example Func __GetPos() Local $aSplit, $sClipGet, $sCompiledExe = StringRegExpReplace(@ScriptFullPath, '(.+)\..+', '\1\.exe') If Not FileExists($sCompiledExe) Then Exit ConsoleWrite('! Error - keine kompilierte Version des Scripts gefunden!' & @CRLF & '--> ' & $sCompiledExe & @CRLF & '@WorkingDir = ' & @WorkingDir & @CRLF) Local $sCMD = StringFormat('"%s" /AutoIt3ExecuteLine "%s"', $sCompiledExe, "Local $hWnd = WinGetHandle('[TITLE:"&_WinTitle()&"]'), $aWP = WinGetPos($hWnd), $aCS = WinGetClientSize($hWnd), $0 = ClipPut(StringFormat('%s:%i|%i|%i|%i:%i|%i', $hWnd, $aWP[0], $aWP[1], $aWP[2], $aWP[3], $aCS[0], $aCS[1]))") ConsoleWrite(@CRLF & 'RunWait(' & $sCMD & ')' & @CRLF & @CRLF) If RunWait($sCMD, '', @SW_HIDE) Then Exit ConsoleWrite('! Error bei RunWait()' & @CRLF) $sClipGet = ClipGet() $aSplit = StringSplit($sClipGet, ':', 2) ConsoleWrite('$sClipGet = ' & $sClipGet & @CRLF & @CRLF) __Print('!', '-', $aSplit[0], StringSplit($aSplit[1], '|', 2), StringSplit($aSplit[2], '|', 2)) EndFunc ;==>__GetPos Func _WinTitle() Return StringRegExpReplace(@ScriptName, '(.+)\..+', '~+:#\1#:+~') EndFunc ;==>_WinTitle ; Wird Text mit ConsoleWrite in der Eingabeaufforderung ausgegeben, muss die Ausgabe mit @LF enden, anderfalls wird die vorherige (zumindest teilweise) überschrieben! ; ConsoleWrite --> @LF, @CRLF oder @LF & @CR - oder mit StringFormat --> \n, \r\n oder \n\r Func __Print($c1, $c2, $hWnd, $aWinPos, $aClientSize) Return ConsoleWrite('> $hWnd = ' & $hWnd & @CRLF) + __PrintPos($c1 & ' $aWinPos', $aWinPos) + __PrintPos($c2 & ' $aClientSize', $aClientSize) EndFunc ;==>__Print Func __PrintPos($sName, $aPos) Return UBound($aPos) = 4 _ ? ConsoleWrite(StringFormat('%-26s = X: %5i, Y: %5i, W: %5i, H: %5i\r\n', $sName, $aPos[0], $aPos[1], $aPos[2], $aPos[3])) _ : ConsoleWrite(StringFormat('%-26s = %7s W: %5i, H: %5i\r\n', $sName, '', $aPos[0], $aPos[1])) EndFunc ;==>__PrintPos
-
Dieses kleine Script erstellt eine GUI, verschiebt diese und gibt dann 2x mit ConsoleWrite das Handle, WinPos und ClientSize aus.
Für die erste Ausgabe werden die Werte direkt im Script ermittelt, für die zweite mit einem Einzeiler, der mit @AutoItExe ausgeführt wird.
Meine Annahme, dass beide Ausgaben identisch sind... ist falsch, denn der Einzeiler liefert für WinPos andere Werte!
Wo ist hier der Wurm drin?
Code
Alles anzeigen;-- TIME_STAMP 2018-04-15 22:27:16 v 0.1 _Example() Func _Example() Local $hGUI = GUICreate(@ScriptName, 1930, 1000, -2000, -100) GUISetState() WinMove($hGUI, '', 10, 10, 800, 600) __Print('+', '+', $hGUI, WinGetPos($hGUI), WinGetClientSize($hGUI)) Local $aRet = __GetPos() __Print('!', '-', $aRet[0], StringSplit($aRet[1], '|', 2), StringSplit($aRet[2], '|', 2)) EndFunc ;==>_Example Func __GetPos() Local $sCMD = "Local $hWnd = WinGetHandle('[TITLE:"&@ScriptName&"]'), $aWP = WinGetPos($hWnd), $aCS = WinGetClientSize($hWnd), $0 = ClipPut(StringFormat('%s:%i|%i|%i|%i:%i|%i', $hWnd, $aWP[0], $aWP[1], $aWP[2], $aWP[3], $aCS[0], $aCS[1]))" ConsoleWrite('@ $sCMD = ' & $sCMD & @CRLF) RunWait(@AutoItExe & ' /AutoIt3ExecuteLine "' & $sCMD & '"') Return StringSplit(ClipGet(), ':', 2) EndFunc ;==>__GetPos Func __Print($c1, $c2, $hWnd, $aWinPos, $aClientSize) ConsoleWrite('> $hWnd = ' & $hWnd & @CRLF) __PrintWinPos($c1 & ' $aWinPos', $aWinPos) __PrintClientSize($c2 & ' $aClientSize', $aClientSize) EndFunc Func __PrintWinPos($sName, $aPos) ConsoleWrite(StringFormat('%-26s = X: %5i, Y: %5i, W: %5i, H: %5i\r', $sName, $aPos[0], $aPos[1], $aPos[2], $aPos[3])) EndFunc ;==>__PrintWinPos Func __PrintClientSize($sName, $aPos) ConsoleWrite(StringFormat('%-26s = %7s W: %5i, H: %5i\r', $sName, '', $aPos[0], $aPos[1])) EndFunc ;==>__PrintClientSize
-
Ich benutze aus Gewohnheit nur den Advanced-Mode... wenn du keine eindeutige ID bekommst, kannst du noch den Title (Text) des Buttons zur Identifizierung verwenden.
Hier ein Beispiel:
C
Alles anzeigen;-- TIME_STAMP 2018-04-13 08:41:29 v 0.1 #include <Array.au3> #include <WinAPISysWin.au3> #include <WinAPIDlg.au3> Local $hAIMP, $hButton, $sTitle, $idButton, $iNN = 1 $hAIMP = WinGetHandle('[CLASS:TAIMPOptionsForm]') While 1 $hButton = ControlGetHandle($hAIMP, '', StringReplace('[CLASS:TACLButton; INSTANCE:#]', '#', $iNN)) If Not IsHWnd($hButton) Then Exit 999 $sTitle = ControlGetText($hButton, '', '') $idButton = _WinAPI_GetDlgCtrlID($hButton) If $sTitle = 'Language' Then ExitLoop $iNN += 1 WEnd ConsoleWrite("$hAIMP --> " & $hAIMP & @CRLF) ConsoleWrite("$hButton --> " & $hButton & @CRLF) ConsoleWrite("$idButton --> " & $idButton & @CRLF) ConsoleWrite("$sTitle --> " & $sTitle & @CRLF) ConsoleWrite("ClassName --> " & 'TACLButton' & @CRLF) ConsoleWrite("$iNN --> " & $iNN & @CRLF) Local $aClassList = StringSplit(StringStripWS(WinGetClassList($hAIMP), 2), @LF) If UBound($aClassList) Then For $i = $aClassList[0] To 1 Step -1 If $aClassList[$i] <> 'TACLButton' Then _ArrayDelete($aClassList, $i) Next Local $hButton, $idButton, $aButtonList[UBound($aClassList)][5] $aButtonList[0][0] = UBound($aClassList) -1 For $i = 1 To $aButtonList[0][0] Step 1 $hButton = ControlGetHandle($hAIMP, '', StringReplace('[CLASS:TACLButton; INSTANCE:#]', '#', $i)) $idButton = _WinAPI_GetDlgCtrlID($hButton) $aButtonList[$i][0] = $aClassList[$i] ; ClassName $aButtonList[$i][1] = $i ; NN $aButtonList[$i][2] = $hButton ; Handle $aButtonList[$i][3] = $idButton ; ID $aButtonList[$i][4] = ControlGetText($hButton, '', '') ; Title Next _ArrayDisplay($aButtonList, '$aButtonList', '', 0, Default, 'ClassName|NN|Handle|ID|Title') EndIf
-
@Offtopic: Bitte kein falsche Halbwissen verbreiten. Klar gibt es die Möglichkeit Tabs verschachtelt darzustellen. Man muss nur wissen wie.
@Offtopic: Halbwissen? Die Fragestellung bezüglich der Tabs bezieht sich auf den Text von ISI360 ...
Und nein es ist aktuell leider nur 1x pro Gui möglich. (Dies ist aber eine limitierung von AutoIt selbst)
...und ich bin mir sicher, dass ISI360 mit dem ersten Satz völlig richtig liegt, nur ist es keine Limitierung von AutoIt, sondern eben eine von Windows. Dass mit Hilfe von "Child-GUIs" mehrere Tabs in einer "Main-GUI" darstellbar sind, ist mir bekannt, was aber nichts an der Richtigkeit meiner Aussage ändert.
-
Tatsächlich eine AutoIt-Limitierung.
Nein, eine Windows-Limitierung...
-
Sehr schön!
Ich setze es in meinen Scripts allerdings ein wenig anders um und speichere die Strukturen in einem IniFile...
- Weil ich die gespeicherte WindowPlacement-Struktur bei Bedarf einlesen möchte, bevor das Fenster erstellt wurde.
- Weil ich nicht für jedes Fenster (in einem Projekt) eine separate Datei zum Speichern der Strukturen haben möchte.
Z.B.: _SaveWindowPlacement($sIniFile, $hWnd, $sWndName)
[MainGUI]
WindowPlacement=44|0|1|-1,-1|-1,-1|0,1035,808,1669
Alternativ ließen sich die Strukturen sicher auch mit SQLite als BLOB speichern...
Funktion _WindowOnDesktop (s.u.): Die For-Schleife (Zeile 77-79) und die beiden DllStructSetData (Zeile 82, 83) kannst du dir sparen:
Code$tWindowPoint = DllStructCreate($tagPOINT, DllStructGetPtr($tWindowPlacement, 'rcNormalPosition'))
_WinAPI_GetDesktopWindow liefert bei mir nur die Koordinaten des primären Monitors (Monitor 1)...
$tDesktopInfo = _WinAPI_GetWindowInfo(_WinAPI_GetDesktopWindow()) ; 0, 0, 1920, 1080
Deshalb evtl. besser so... damit bekomme ich die von allen (erweiterten) Monitoren (1+2)
$tDesktopInfo = _WinAPI_GetWindowInfo(WinGetHandle('[CLASS:Progman]')) ; -1920, 0, 3840, 1080
Dadurch landen die Fenster in den sichtbaren Bereich des Monitors, auf dem sich der größte Teil des Fensters befindet, oder auf dem, der den Koordinaten am nähesten ist. Bei einem größeren/kleineren Monitor könnte man optional noch die Position und Größe anpassen.
Code: _WindowOnDesktop
Alles anzeigenFunc _WindowOnDesktop($hWnd) Local $tDesktopInfo, $tDesktopRect, $tDesktopWorkArea, $tWindowPlacement, $tWindowPoint, $iWidth, $iHeight, $tRECT, $iLeft, $iTop If Not IsHWnd($hWnd) Then Return SetError(1, 0, False) $tDesktopInfo = _WinAPI_GetWindowInfo(WinGetHandle('[CLASS:Progman]')) If @error Then Return SetError(2, 0, False) $tDesktopRect = DllStructCreate($tagRECT, DllStructGetPtr($tDesktopInfo, 'rWindow')) $tDesktopWorkArea = DllStructCreate($tagRECT, DllStructGetPtr($tDesktopInfo, 'rcClient')) $tWindowPlacement = _WinAPI_GetWindowPlacement($hWnd) $tWindowPoint = DllStructCreate($tagPOINT, DllStructGetPtr($tWindowPlacement, 'rcNormalPosition')) If Not _WinAPI_PtInRect($tDesktopRect, $tWindowPoint) Then ; wenn das Fenster sich nicht auf dem Desktop befindet, dann... $tRECT = DllStructCreate($tagRECT, DllStructGetPtr($tWindowPlacement, 'rcNormalPosition')) $iWidth = DllStructGetData($tRECT, 'Right') - DllStructGetData($tRECT, 'Left') $iHeight = DllStructGetData($tRECT, 'Bottom') - DllStructGetData($tRECT, 'Top') $iLeft = (DllStructGetData($tDesktopWorkArea, 'Right') - DllStructGetData($tDesktopWorkArea, 'Left') - $iWidth) / 2 ; Left neu berechnen $iTop = (DllStructGetData($tDesktopWorkArea, 'Bottom') - DllStructGetData($tDesktopWorkArea, 'Top') - $iHeight) / 2 ; Top neu berechnen DllStructSetData($tRECT, 'Left', $iLeft) ; Setze das neue Left DllStructSetData($tRECT, 'Top', $iTop) ; Setze das neue Top DllStructSetData($tRECT, 'Right', $iLeft + $iWidth) ; Setze das neue Right DllStructSetData($tRECT, 'Bottom', $iTop + $iHeight) ; Setze das neue Bottom _WinAPI_SetWindowPlacement($hWnd, $tWindowPlacement) Return False EndIf Return True EndFunc
-
Zudem ist die X/Y-Position bei minimiertem Fenster (ptMinPosition) nicht unbedingt -32000, wie hier im Beispiel gut zu sehen ist.
C
Alles anzeigen;-- TIME_STAMP 2018-04-06 11:22:54 v 0.1 ; AutoIt <= v3.3.14.2 ;~ #include <WinAPI.au3> ; AutoIt >= v3.3.14.3 #include <WinAPISysWin.au3> #include <WinAPIProc.au3> _Example(WinGetHandle('[CLASS:SciTEWindow]')) ConsoleWrite('---------------------------------------------------------------------------------------' & @CRLF) _Example(WinGetHandle('[CLASS:Progman]')) Func _Example($hWnd) Local $sMsg, $sTitle = WinGetTitle($hWnd), $iPID = WinGetProcess($hWnd), $sProcess = _WinAPI_GetProcessName($iPID) Local $tRET = _WinAPI_GetWindowPlacement($hWnd) $sMsg &= @TAB & "$hWnd = " & $hWnd & @CRLF $sMsg &= @TAB & "$sTitle = " & $sTitle & @CRLF $sMsg &= & "$sProcess = " & $sProcess & @CRLF & @CRLF $sMsg &= "$stWindowPlacement: " & @CRLF $sMsg &= @TAB & "length = " & DllStructGetData($tRET, "length") & @CRLF $sMsg &= @TAB & "flags = " & DllStructGetData($tRET, "flags") & @CRLF $sMsg &= @TAB & "showCmd = " & DllStructGetData($tRET, "showCmd") & @CRLF & @CRLF $sMsg &= "ptMinPosition:" & @CRLF $sMsg &= @TAB & "MinX = " & DllStructGetData($tRET, "ptMinPosition", 1) & @CRLF $sMsg &= @TAB & "MinY = " & DllStructGetData($tRET, "ptMinPosition", 2) & @CRLF & @CRLF $sMsg &= "ptMaxPosition:" & @CRLF $sMsg &= @TAB & "MaxX = " & DllStructGetData($tRET, "ptMaxPosition", 1) & @CRLF $sMsg &= @TAB & "MaxY = " & DllStructGetData($tRET, "ptMaxPosition", 2) & @CRLF & @CRLF $sMsg &= "rcNormalPosition:" & @CRLF $sMsg &= @TAB & "left = " & DllStructGetData($tRET, "rcNormalPosition", 1) & @CRLF $sMsg &= @TAB & "top = " & DllStructGetData($tRET, "rcNormalPosition", 2) & @CRLF $sMsg &= @TAB & "right = " & DllStructGetData($tRET, "rcNormalPosition", 3) & @CRLF $sMsg &= @TAB & "bottom = " & DllStructGetData($tRET, "rcNormalPosition", 4) ConsoleWrite($sMsg & @CRLF) EndFunc
Ausgabe:
Code
Alles anzeigen$hWnd = 0x00160360 $sTitle = M:\Autoit\_GetWindowPlacement.au3 - SciTE [10 von 10] $sProcess = SciTE.exe $stWindowPlacement: length = 44 flags = 2 showCmd = 3 ptMinPosition: MinX = -32000 MinY = -32000 ptMaxPosition: MaxX = -1 MaxY = -1 rcNormalPosition: left = 858 top = 213 right = 1498 bottom = 879 --------------------------------------------------------------------------------------- $hWnd = 0x000103BA $sTitle = Program Manager $sProcess = explorer.exe $stWindowPlacement: length = 44 flags = 0 showCmd = 1 ptMinPosition: MinX = -1 MinY = -1 ptMaxPosition: MaxX = -1 MaxY = -1 rcNormalPosition: left = -1920 top = 0 right = 1920 bottom = 1080
-
Ich weiß nicht, wie man da die letzte Postion zuvor auslesen kann.
Ermitteln mit _WinAPI_GetWindowPlacement bzw. setzen mit _WinAPI_SetWindowPlacement
-
Auch von mir ein: HERZLICH WILLKOMMEN!!!
C/ C++ ...vesuche ich mich schon seit einiger Zeit dran... finde aber nicht so richtig den Einstieg... kannst du dazu ein paar Tipps geben, wie und womit man anfangen sollte?
Wenn es deine Zeit erlaubt, dann schau dir doch bitte mal diesen Beitrag an... ob du da helfen kannst.
Gruß
Bitnugger
-
Mögest du die dicksten Eier und Größten Eier zu Ostern geschenkt bekommen
und mögen sie in deinen Sack passen.
-
Was kommt jetzt in den Include Ordner was wo die Skripte stehen.
Nichts!
Dort solltest du generell nichts hinzufügen, ändern oder löschen. Für eigene Includes solltest du dir besser ein Verzeichnis (z.B.: AutoIt3_MyInclude) anlegen, zumal diese dann auch nach einem Update von Autoit erhalten bleiben. Damit das Verzeichnis gefunden wird, musst du es in der SciTE Config angeben. Die SciTE Config kannst du in SciTE mit Ctrl + 1 oder im Menü Extras öffnen. Dort gibst du dann deinen "User Include Folder" mitsamt Pfad an.
SQLite.dll.au3
Dieses AutoIt-Script war in früheren AutoIt-Versionen enthalten. Es besteht quasi nur aus einer Funktion, mit der die darin enthaltene sqlite3.dll entpackt und auch gespeichert werden kann.
Beispiel:
Code: SQLite.dll.au3;_sqlite3dll($bSaveBinary = False, $sSavePath = @ScriptDir) _sqlite3dll(True) ; sqlite3.dll entpacken und im ScriptDir speichern
sqlite3_302200000.exe, sqlite3_302200000.dll, sqlite3_x64_302200000.dll
Die einfache Lösung: Kopiere diese drei Dateien in das Scriptverzeichnis und benenne sie dort um. Das Script SQLite.dll.au3 benötigst du nicht, weil es höchstwahrscheinlich eine ältere Version der sqlite3.dll enthält!
sqlite3.exe, sqlite3.dll, sqlite3_x64.dll
Danach sollte das folgende Script ohne Fehler bei dir laufen, womit du dann weißt, das SQLite nun bei dir funktioniert.
C
Alles anzeigen#include <MsgBoxConstants.au3> #include <SQLite.au3> Local $sSQliteDll $sSQliteDll = _SQLite_Startup() If @error Then MsgBox($MB_SYSTEMMODAL, "SQLite Error", "SQLite3.dll Can't be Loaded!" & @CRLF & @CRLF & _ "Not FOUND in @SystemDir, @WindowsDir, @ScriptDir or @WorkingDir") Exit -1 EndIf MsgBox($MB_SYSTEMMODAL, "SQLite3.dll Loaded", $sSQliteDll & " (" & _SQLite_LibVersion() & ")") ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF) _SQLite_Shutdown()
-
Und wieder Dinge die die Welt nicht braucht. Anstatt den Codern die Bevollmächtigung zu geben alles zu machen was er nur kann hält man ihn für unfähig und baut ein Sleep ein.
Als ob das noch nicht reicht versteckt man es irgendwo in der Dokumentation wo man das nur mitbekommt wenn man sie sich von vorn bis hinten und oben nach unten alles genauestens durchliest.
Die Automatik greift doch nur, wenn es nötig ist und nimmt dem Coder somit Arbeit ab, die er ohnehin leisten müsste, wenn er nicht möchte, dass sein PC einfriert/abstürzt. Zudem ist diese Information nicht irgendwo versteckt, sondern steht als erster (und somit wichtigster) Punkt unter Remarks (Bemerkungen)... welche - obwohl diese oft auch sehr wichtige Hinweise enthalten, gerne überlesen werden.
This function automatically idles the CPU when required so that it can be safely used in tight loops without hogging all the CPU.
Diese Funktion lässt die CPU bei Bedarf automatisch im Leerlauf laufen, so dass sie sicher in engen Schleifen verwendet werden kann, ohne die gesamte CPU zu beanspruchen.
Edit:
Was dazu führt, dass das Script LANGSAMER läuft, wenn keine Useraktion stattfindet!
Ok, nimm alles zurück und behaupte das Gegenteil...
-
Die AutoIt3Wrapper-Direktiven sind nicht in der AutoIt-Hilfe enthalten... sondern in der SciTE4AutoIt3-Hilfe... die du aber auch mit F1 öffnen kannst, wenn du SciTE4AutoIt3 installiert hast.