1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Cape-City

Beiträge von Cape-City

  • Computer-Info

    • Cape-City
    • 21. Dezember 2016 um 08:04
    Zitat von JackSlater

    Hab die fehlenden Einträge hinzugefügt, jetzt funktioniert das Skript bzw das gesamte Programm problemlos.

    Danke für eure Hilfe :thumbup:

    Guten Morgen,

    kannst Du uns bitte Deine Änderungen am Script einmal hier posten, damit wir nachvollziehen können, was Du wo geändert/erweitert hast?

    Edit:

    Selber gefunden ;) Das Array $aMemType innerhalb der Funktion _CI_GetRAM entsprechend anpassen:

    AutoIt
    Func _CI_GetRAM($strComputer = '.')
    	Local $aMemType[26] = ['Unbekannt', 'Anderes', 'DRAM', 'Sync DRAM', 'Cache DRAM', _
    		'EDO', 'EDRAM', 'VRAM', 'SRAM', 'RAM', 'ROM', _
    		'Flash', 'EEPROM', 'FEPROM', 'EPROM', 'CDRAM', '3DRAM', _
    		'SDRAM', 'SGRAM', 'RDRAM', 'DDR', 'DDR-2', 'DDR2 FB-DIMM', 'DDR3', 'FBD2']

    Wie @Bitnugger bereits geschrieben hat, stürzt die Version 2.1 noch beim Tab Steckplätze ab:

    Computer-Info.au3" (696) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $aReturn[$x][2] = $aMaxDataWidth[$objItem.MaxDataWidth] & ' Bits'
    $aReturn[$x][2] = ^ ERROR

    Wenn ich mir die entsprechende Funktion anschaue und hier schaue https://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx , komme ich da aber nicht
    so einfach weiter wie bei dem RAM.

    AutoIt
    Func _CI_GetSystemSlot($strComputer = '.')
    	Local $aReturn[2][3] = [['Bezeichnung:', 'Steckplatz belegt:', 'max. Datenbreite:']]
    	Local $aUsage[5] = ['Reserviert', 'Anderer', 'Unbekannt', 'Nein', 'Ja']
    	Local $aMaxDataWidth[5] = [8, 16, 32, 64, 128]
    	Local $x = 0, $objWMIService, $colItems
    	$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
    	If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
    	$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_SystemSlot', 'WQL', 0x30)
    	If IsObj($colItems) Then
    		For $objItem In $colItems
    			$x += 1
    			ReDim $aReturn[$x + 1][3]
    			$aReturn[$x][0] = $objItem.SlotDesignation
    			$aReturn[$x][1] = $aUsage[$objItem.CurrentUsage]
    			$aReturn[$x][2] = $aMaxDataWidth[$objItem.MaxDataWidth] & ' Bits'
    		Next
    	EndIf
    	Return $aReturn
    EndFunc   ;==>_CI_GetSystemSlot
    Alles anzeigen
  • Script wird langsamer, wenn die Maus nicht bewegt wird?!

    • Cape-City
    • 16. Dezember 2016 um 08:29

    Hallo @AutoMit

    hier der Beispielcode für die Abfrage der GUI:

    AutoIt
    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    [...]
    Global Const $GUI_Width = 200, $GUI_Height = 100, $ExitWidth = 40, $ExitHeight = 20
    Global Const $hGUI = GUICreate ("GUI", $GUI_Width, $GUI_Height, -1, -1)
    GUISetOnEvent ($GUI_EVENT_CLOSE, "_GUI_GetMsg")
    GUISetOnEvent ($GUI_EVENT_MINIMIZE, "_GUI_GetMsg")
    GUISetOnEvent ($GUI_EVENT_RESTORE, "_GUI_GetMsg")
    Global Const $ExitImage = GUICtrlCreatePic (".\ExitImage.gif", ($GUI_Width - $ExitWidth) / 2, $GUI_Height - 30, $ExitWidth, $ExitHeight)
    GUICtrlSetOnEvent ($ExitImage, "_GUI_GetMsg")
    GUISetState (@SW_SHOW, $hGUI)
    [...]
    While 1
    	Sleep (100)
    WEnd
    [...]
    Func _GUI_GetMsg()
    	Switch @GUI_CtrlId
    		Case $GUI_EVENT_CLOSE, $ExitImage
    			GUIDelete ($hGUI)
    			Exit
    		Case $GUI_EVENT_MINIMIZE
    			[...]
    		Case $GUI_EVENT_RESTORE
    			[..]
    	EndSwitch
    EndFunc
    Alles anzeigen
  • Frames per Second richtig messen (Verständnisproblem)

    • Cape-City
    • 15. Dezember 2016 um 11:34
    Zitat von Andy

    Was heißt "im Grunde"?FPS sind FPS. Also irgendwie im Script erzeugte Bilddarstellungen pro Sekunde. Und da gibts auch nichts an der "Bedeutung" auszulegen!
    Bilder zählen, Zeit festlegen, FPS als Bilder pro Zeit ermitteln. Fertig!
    Die Bilder zählen erfolgt mit einer simplen Variable, die Zeit wird über einen (EINEN!) wieauchimmerimplementierten Timer festgestellt. Sobald mehrere Timer/Zähler involviert sind, die auch noch voneinander abhängen, ist das Ergebnis nicht mehr einfach nachzuvollziehen.
    So lange du sicherstellen kannst, dass deine Zeitmessung funktioniert, stimmen zwangsläufig auch die FPS!

    Genau das habe ich damit gemeint und nichts anderes geschrieben! Du hast aus meiner Aussage, einen Teil herausgenommen und damit aus dem Kontext gerissen. Wenn es so alleine steht, ist es richtig, das es dazu nichts an der "Bedeutung" auszulegen gibt, aber die "Bedeutung" von FPS und wie man es ermittelt, passt nicht mit meiner Vorgehensweise im Script zusammen.
    @Kanashius hat das schon richtig erkannt, wo mein "Fehler" liegt.

  • Frames per Second richtig messen (Verständnisproblem)

    • Cape-City
    • 14. Dezember 2016 um 11:28

    Danke für die Antworten!

    Ich bin nochmal in mich gegangen und eine Idee welche ich habe, nicht von Frames Per Second zu sprechen, sondern ich schaue einfach wieviel Cycles jede Schleife pro Sekunde schafft,
    also CPS :party: . Das ist dann soweit OK für mich und gibt auch Sinnvolle Ergebnisse hervor.

    Ich denke wir werden hier auch keinen gemeinsamen Kontext finden, da meine Vorgehensweise innerhalb des Scriptes und der wie man es machen sollte oder anders könnte und was FPS im Grunde bedeutet, eh nicht zusammen passen :Face: .

  • LED - Laufschrift

    • Cape-City
    • 14. Dezember 2016 um 07:24
    Zitat von Alina

    Woher wisst Ihr soetwas immer?

    Ich habe es hier gefunden, als ich das Problem hatte: https://www.google.de/search?q=%24ghGDIPDll
    Gleich der erste Treffer aus dem autoitscript.com forum: https://www.autoitscript.com/forum/topic/16…n-resourcesau3/

    Da kannte ich dieses Forum aber noch nicht, aber jetzt :party:

  • Frames per Second richtig messen (Verständnisproblem)

    • Cape-City
    • 13. Dezember 2016 um 13:50
    Zitat von Andy

    Ich nutze die AdlibRegister()-Funktion ausschliesslich, um die FPS ANZUZEIGEN! Das ist innerhalb der Funktion dann maximal ein Ein- bis Dreizeiler. "Pausieren" tut da mal garnichts!


    Das bei einem AdLib Aufruf das Script pausiert, habe ich aus der AutoIt Hilfe:

    Zitat von AutoItScript.com

    [...]The adlib function should be kept simple as it is executed often and during this time the main script is paused[...]

    Hmmmm, vielleicht habe ich auch falsch gefragt und wir stellen es jetzt mal ausser Frage oder Sinnhaftigkeit, warum ich verschiedene Funktionen im AdLib registriere.

    (Die AdLib Funktion ist halt ähnlich der früher beim Assembler programmieren. Ich hatte mein Hauptscript und habe einzelne Subroutinen (Font-Slider/Scroller, etc) einfach an einen "Interrupt gehangen". So wurden diese kontinuierlich ausgeführt und brauchten im Hauptscript nicht immer wieder berücksichtig werden.)

    Jede Funktion nimmt unterschiedliche Änderungen an der GUI vor und diese möchte ich erfassen, weil in der Summe ja X Änderungen (Frames) pro Sekunde vorgenommen wurden. Es kann aber auch sein, das ich einem völlig falschen Pferd aufsitze und ein grundsätzliches Verständnisproblem habe.

  • LED - Laufschrift

    • Cape-City
    • 13. Dezember 2016 um 11:45

    :( Schade,

    irgendwie scheinen die Scripte nicht mehr zu laufen. Ich bekomme zwar keine Fehler, kann sie auch compilieren, aber es wird lediglich der $iOffColor
    Wert genommen und die LED gebaut. Den Schriftzug kann man nicht erkennen. Wäre sonst eine lustige Idee als Zusatz in meiner InfoBox Demo.

    Edit:

    Die Korrektur, damit es unter Windows 7 funktioniert (Beitrag von UEZ) hilft mir auch bei Windows 10?!

    Also...alles Top - läuft!

    An der UDF LEDTXT.au3 hätte ich aber auch Interesse.

  • Frames per Second richtig messen (Verständnisproblem)

    • Cape-City
    • 13. Dezember 2016 um 07:42

    Hi @all,

    ich würde gerne in meinem Script die FPS ermitteln. Bei einer DO-Schleife, wo bei jedem Durchlauf nur ein Teil auf dem Screen irgendwo gemacht wird, ist ja einfach.
    Das habe ich mir bei der Firework Demo von UEZ angeschaut. Was aber wenn ich einige Funktionen, welche ebenfalls Dinge in der GUI ändern, aus der Haupt-DO-Schleife
    herausgenommen habe und jetzt durch AdLibRegister (=ALR) aufrufe?

    OK, bei jedem ALR Aufruf pausiert mein Script (meine DO-Schleife), aber es kann ja vorkommen, das ALR 2-3 mal öfters aufgerufen wird, als meine DO-Schleife für einen Durchlauf braucht...
    Erhöhe ich also den FPS Zähler immer nur am Ende meiner DO-Schleife oder auch nach Durchlauf jeder ALR Funktion?
    Ich versuche das mal in einem Beispiel Code darzustellen (der Code funktioniert so natürlich nicht, es soll es nur veranschaulichen): :Glaskugel:

    AutoIt
    AdLibRegister("DO_Something_1", 25)
    AdLibRegister("DO_Something_2", 30)
    AdLibRegister("DO_Something_3", 40)
    AdLibRegister("FPS", 1000)
    
    
    Local $FPS = 0
    
    
    Do
    ConsoleWrite("Do-Schleife" & @CRLF)
    [...]
    ;
    ; Dauerschleife mit weiteren Befehlen und Aktionen innerhalb der GUI
    ; welche zwischen 10 und 60ms pro Durchlauf brauchen
    ;
    [...]
    $FPS += 1
    Until [...] ; Programm beendet wird
    
    
    Func (FPS)
    ConsoleWrite("FPS: " & $FPS & @CRLF)
    ;
    ; AdLibRegister Aufruf für FPS Reset
    ;
    $FPS = 0
    EndFunc
    
    
    Func (DO_Something_1)
    ConsoleWrite("DO_Something_1" & @CRLF)
    [...]
    ;
    ; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
    ; der GUI welche zwischen 5 und 15ms pro Durchlauf brauchen
    ;
    [...]
    $FPS += 1;==> hier auch ???
    EndFunc
    
    
    Func (DO_Something_2)
    ConsoleWrite("DO_Something_2" & @CRLF)
    [...]
    ;
    ; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
    ; der GUI welche zwischen 10 und 20ms pro Durchlauf brauchen
    ;
    [...]
    $FPS += 1;==> hier auch ???
    EndFunc
    
    
    Func (DO_Something_3)
    ConsoleWrite("DO_Something_3" & @CRLF)
    [...]
    ;
    ; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
    ; der GUI welche zwischen 15 und 30ms pro Durchlauf brauchen
    ;
    [...]
    $FPS += 1;==> hier auch ???
    EndFunc
    Alles anzeigen

    Nachtrag:

    Ich habe mal gemessen und zwar in meiner alten Routine (ohne ALR) und komme dort auf einen Durchschnitt von 32 FPS. Denselben Wert erreiche ich in der neuen
    Routine, wo ich 3 Funktionsaufrufe aus der Haupt-DO-Schleife entfernt habe auch. Wenn ich allerdings wie oben im Beispiel innerhalb jeder Funktion, welche durch
    das ALR angetriggert wird, ebenfalls den FPS Counter erhöhe, komme ich auf einen Durchschnittswert von 123 FPS.

  • ISN AutoIt Studio

    • Cape-City
    • 12. Dezember 2016 um 07:20

    @Bitnugger,

    machmal sieht man den Wald vor lauter Bäumen nicht :Face: Ich hatte überall in den Menüs oben geguckt.

    @ISI360,

    was ich mir noch wünschen würde, wär der Wechsel der Tabs mit STRG+TAB, allerdings in der Form, das wenn man die STRG Taste wieder los lässt und
    dann wieder STRG+TAB drückt, er nicht in der Reihe zum nächsten Tab wechselt, sondern wieder zurück zudem wo er her kam. Das macht es einfacher,
    wenn man viele Tabs auf hat und nur zwischen 2 hin und her wechselt.

    Interessant wäre auch die Möglichkeit (es sei denn ich habe es noch nicht gefunden), 2 Tabs vertikal oder horizontal zu arragieren, um z.B. Unterschiede
    zu vergleichen.

    Nachtrag:

    Eine ToDo Liste wäre toll, wo die Einträge nach Bestätigung jeweils in die weitere Stufe/Kategorie rutschen.

    Code
    [Wünsche] / [Fehler]
    
    
    [in Arbeit]
    
    
    [Prüflauf]
    
    
    [Erledigt]

    Wenn man dann das Projekt schliesst und Punkte in der ToDo Liste "abgehakt" wurden, übernimmt er diese Informationen automatisch in eine
    aktiviere Änderungsverfolgung. Derzeit habe ich eine einfach Text-Datei wo ich die Dinge aufschreibe. Wenn mir also beim Testen ein Fehler auffällt
    oder mir dieser gemeldet wird, dann trage ich es erstmal ein und kann dann irgendwann schauen, ob ich es behoben/eingebaut/etc bekomme.

  • ISN AutoIt Studio

    • Cape-City
    • 11. Dezember 2016 um 12:20

    Von meiner Seite auch herzlichen Glückwunsch!

    Dein AutoIt Studio ist der Hammer! Ich konnte mich recht schnell einarbeiten, auch wenn ich sicherlich noch nicht alles
    entdeckt habe, z.B. wie ich den Form Designer starten kann :(
    Am meissten begeistert mich natürlich die Tatsache, das Du das Studio in AutoIt geschrieben hast :klatschen:

    Ab und zu hängt das Programm ein wenig, meisstens dann, wenn man Variablen anfängt zu tippen und er nachschaut
    ob sie bereits verwendet wurden.

  • Script wird langsamer, wenn die Maus nicht bewegt wird?!

    • Cape-City
    • 10. Dezember 2016 um 22:30
    Zitat von Oscar

    Willst Du das vermeiden, musst Du zum OnEventMode wechseln. IMHO sowieso der bessere Modus, weil man mehr funktionsorientiert arbeitet.

    Genau der richitge Tip! So hatte ich ganz zu Anfang auch gemacht, allerdings für jeden Event eine eigene Func um die Dinge zu bearbeiten. Mit GUIGetMsg hatte ich es endlich alles in einer Func mit einer Switch-Abfrage.

    Jetzt ist es nach wie vor alles in einer Func, allerdings mit einer Select-Abfrage und @GUI_CtrlId ist mein bester Freund :)
    Alle Events auf Labels, Images, etc werden sauber erkannt und mit @GUI_CtrlId übergaben. TOP!

  • Script wird langsamer, wenn die Maus nicht bewegt wird?!

    • Cape-City
    • 10. Dezember 2016 um 20:36
    Zitat von Alina

    :Glaskugel: Ich befrage mal ein Glaskugel. Vielleicht hat sie das Script gesehen und kann so sagen, wo das Problem liegen könnte. Ich kann das ohne Script nämlich nicht. Sorry. ;)

    Das bezog sich auf meine hier bereits gepostete Version der Grafik und Sounddemo. Hatte ich vergessen zu erwähnen,
    aber die :Glaskugel: von @Oscar hat es erfasst ;) Ich werde es ausprobieren. Danke für den Tip!

  • Script wird langsamer, wenn die Maus nicht bewegt wird?!

    • Cape-City
    • 9. Dezember 2016 um 21:47

    Hi,

    jede meiner Schleifen braucht um die 30ms für einen Durchlauf, mal mehr mal weniger, je nachdem was gerade aktiv ist.
    Wenn das Script allerdings nur so vor sich hin werkelt, wird die Zeit pro Durchlauf immer länger, teilweise bis 100ms.
    Wenn ich allerdings ständig den Mauspfeil bewege, "friert" mein Script nicht ein und läuft so flüssig wie es kann weiter.

    Woran kann das liegen? Selbst die Kompilierte Version hat das Problem. Hat das überhaupt was mit AutoIt zu tun oder ist es
    eher ein Windows Phänomen? ?(

  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Cape-City
    • 9. Dezember 2016 um 21:15
    Zitat von Mars

    Zudem muss man sich das Verhalten beim Tastendruck verinnerlichen. Wenn man drückt und gedrückt lässt wird sofort ein Event gesendet, dann kommt eine kurze Pause und dann kommen Events im Regelmäßigen Abstand (Gleiches Motto wie ein Textfeld in das man einen Buchstaben eintippt und die Taste gedrückt hält). _IsPressed und andere Funktionen können herausfinden ob die Taste in diesem Augenblick gedrückt ist, GUISetAccelerators kann das nicht, ob du die Taste nach 0.1 oder nach 0.2 Sek loslässt wird keinen Unterschied bei den Events machen.

    Das stimmt, das hatte ich bei _IsPressed auch eingebaut. Hier war es auch ein Problem und man hatte richtig den Effekt des
    Tastenprellens. Bei einer deiner Methoden (habe sie mal ein wenig aufgehübscht), passiert das nicht. Klar kommt die Taste immer
    wieder, wenn man sie gedrückt hält, aber beim normalen Drücken (auch etwas länger) passiert nichts. Es gibt unter Windows
    ja auch diese Tastenanschlagverzögerung, ich denke das genau diese hier greift. Zudem muss man bei _IsPressed und dem Warten
    bis die Taste wieder "released" wurde aufpassen, das Script pausiert dann an der Stelle ;)

    C
    #include-once
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    ;
    ;
    ; $KeyPressed has to be global declared as FALSE, befor running _WhichKey_Startup()
    ; _WhichKey_Startup() has to run once, thereafter $KeyPressed contains always the pressed key
    ; _WhichKey_Shutdown() has to be run once, when your script is ending
    ;
    ; Code Example:
    ;
    ; #include <_WhichKeyWasPressed.au3> ;==> name of this script
    ;
    ; Global $KeyPressed = False
    ; _WhichKey_Startup()
    ;
    ; While Sleep(100)
    ;	If $KeyPressed Then DoSomething()
    ; WEnd
    ;
    ; Func DoSomething()
    ;	ConsoleWrite ("ASCII Code: " & $KeyPressed & @CRLF)
    ;	Switch $KeyPressed
    ;		Case 27
    ;			_WhichKey_Shutdown()
    ;			Exit
    ;	EndSwitch
    ;	$KeyPressed = False
    ; EndFunc
    ;
    
    
    Func _WhichKey_Startup()
    
    
    	Global $hmod, $hHook, $hStub_KeyProc
    
    
    	$hStub_KeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
    	$hmod = _WinAPI_GetModuleHandle(0)
    	$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    
    
    EndFunc ;==>_WhichKey_Startup
    
    
    Func _KeyProc($nCode, $wParam, $lParam)
    
    
    	Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    
    
    	If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    	If $wParam = $WM_KEYDOWN Then $KeyPressed = DllStructGetData($tKEYHOOKS, 'vkCode')
    
    
    	Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    
    
    EndFunc   ;==>_KeyProc
    
    
    Func _WhichKey_Shutdown()
    
    
    	_WinAPI_UnhookWindowsHookEx($hHook)
    	DllCallbackFree($hStub_KeyProc)
    
    
    EndFunc   ;==>_WhichKey_Shutdown
    Alles anzeigen
  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Cape-City
    • 9. Dezember 2016 um 12:19

    Die letzte Variante ist auch interessant, da ja ebenfalls nur reagiert wird, wenn eine Taste gedrückt wurde, man weiß welche es war und kann entsprechend reagieren
    und viel besser, es wird nur reagiert, wenn die GUI tatsächlich im Focus ist. Aber wie kann man hier denn "Enter", "Coursor Up", "Num 0", etc abfragen?

  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Cape-City
    • 9. Dezember 2016 um 07:25

    @Andy,

    sehe gerade das dein letztes Beispiel das ja macht 8o .

    OK, dann denke ich, ist dieser Thread erledigt!

  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Cape-City
    • 8. Dezember 2016 um 21:47

    Super! Danke! Das hilft mir schon etwas weiter. Ich habe derweil doch etwas im Internet gefunden. Das hat seinen Reiz,
    es wird nur einmal aufgerufen und ändert dann ohne weiteres Aufrufen eine Variable im Wert auf 1, wenn eine Taste
    gedrückt wurde. Schick wäre natürlich eine Kombi aus beiden, nicht nur das "im Hintergrund" warten, sondern auch den
    gedrückten Tastenwert zurück geben. Dann spart man noch zusätzlich Zeit beim auswerten der gedrückten Taste.

    Code
    Global Const $WH_KEYBOARD_LL = 13
    Global Const $HC_ACTION = 0
    
    
    ToolTip("When your ready press a key")
    
    
    $pllkb = DllCallbackRegister ("_llkb", "lparam", "int;wparam;lparam")
    $hModule = DllCall("kernel32.dll", "ptr", "GetModuleHandle", "ptr", 0)
    $hModule = $hModule[0]
    $hHkk = DllCall("user32.dll", "ptr", "SetWindowsHookEx", "int", $WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($pllkb), "ptr", $hModule, "dword", 0)
    $hHkk = $hHkk[0]
    
    
    $AKeyWasPressed = 0
    
    
    While 1
        Sleep(100)
        If $AKeyWasPressed = 1 then Exitloop
    WEnd
        ToolTip("")
    
    
    Msgbox(0,"","A key was pressed")
    
    
    
    
    Func _llkb($nCode, $wParam, $lParam)
        If $nCode = $HC_ACTION Then $AKeyWasPressed = 1
        Return _CallNextHookEx($hHkk, $nCode, $wParam, $lParam)
    EndFunc ;==>_llkb
    
    
    Func _CallNextHookEx($hhk, $nCode, $wParam, $lParam)
        Local $aTmp = DllCall("user32.dll", "lparam", "CallNextHookEx", "ptr", $hhk, "int", $nCode, "wparam", $wParam, "lparam", $lParam)
        Return $aTmp[0]
    EndFunc ;==>_CallNextHookExj
    Alles anzeigen
  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Cape-City
    • 8. Dezember 2016 um 20:33

    Hi,

    ich frage mit meinem Script ca. 50 Tasten ab, mit jeder Taste wird das Script langsamer (auch wenn gar keine Taste gedrückt wurde).
    Gibt es eine Möglichkeit diese Abfrage zu beschleunigen? Als Beispiel ist das Beispiel aus der Hilfe, welches ich aber so in der Form übernommen habe.
    Ich weiß nicht ob eine Switch/Case Funktion Beschleunigung bringen würde, aber ich bekomme aus _IsPressed ja keine grundsätzliche Antwort ob überhaupt
    eine Taste gedrückt wurde. Dann bräuchte ich ja erst den Rest gar nicht befragen.

    C
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    
    
    Local $hDLL = DllOpen("user32.dll")
    
    
    While 1
        If _IsPressed("10", $hDLL) Then
            ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
            ; Wait until key is released.
            While _IsPressed("10", $hDLL)
                Sleep(250)
            WEnd
            ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
        ElseIf _IsPressed("1B", $hDLL) Then
            MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
            ExitLoop
        EndIf
        Sleep(250)
    WEnd
    
    
    DllClose($hDLL)
    Alles anzeigen
  • Grafik/Sound Demo (InfoBox)

    • Cape-City
    • 7. Dezember 2016 um 23:23
    Zitat von Mars

    Ich finde es sehr schön, dass sich jemand an so eine Sache wagt (sieht mir kompliziert genug aus, dass nicht jeder User soetwas aus dem Ärmel schütteln kann) und sie auch fertigstellt.

    Das Skript ist nachvollziehar aufgebaut und gut kommentiert. Das gibt Bonuspunkte :)

    Kleine Tricks mit denen du noch arbeiten könntest: (das sind nur Denkanstöße, kein Vorwurf, dass das nicht bereits drin ist)
    - Vorgerenderte Animationen
    - Smoothing bzw TextRenderingHint
    - (einfache) Prozedural generierte Grafik (z.B. sich bewegende geometrische Objekte)
    - Mehr Puffer nutzen (z.B. frisst das Textneuzeichnen ziemlich viel Energie, ein BitBlt schlägt das um Längen)
    - (einfache) Partikelengine (braucht nur 20-30 Partikel gleichzeitig anzeigen, aber damit kann man ein bisschen "Konfetti" verteilen :D

    Gute Arbeit und weiter so :)

    lg
    M

    Alles anzeigen

    Danke schön!

    Ich werde immer weiter werkeln, muss aber noch viel lernen und verstehen. In meiner lokalen Version bin ich auch stetig
    am optimieren, damit es schön flüssig weiterhin läuft. Die Laufzeit ist halt ein großes Problem, da mein Script halt nur in
    3 mit einander verschachtelten Do-Schleifen läuft. Ich würde es mir z.B. wünschen, das mein Scroller, ähnlich wie die Musik,
    einfach gestartet wird und dann läuft, ohne das ich ihn immer wieder im Script "antickern" muss...

  • Grafik/Sound Demo (InfoBox)

    • Cape-City
    • 7. Dezember 2016 um 08:47

    Neue Version online (Thread 1 wurde aktualisiert)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™