Nein, im MessageLoop-Modus darf man kein zusätzliches Sleep einfügen, weil dann (Sleep zu groß) die Buttons etc. nicht mehr reagieren.
Beiträge von Oscar
-
-
Bei dem Beispiel bestimmt GUIGetMsg die Zählfrequenz (je schneller Du die Maus bewegst, umso schneller zählt das Script). Das hat mit dem dynamischen "Sleep" des MessageLoop-Modus zu tun.
Wenn Du den Sleepwert selbst bestimmen willst, musst Du den OnEvent-Modus benutzen:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
Global $aChange[2] = [-14, -15], $iChange = True
Opt('GUIOnEventMode', 1)$hGui = GUICreate('Test', 200, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
$hIcon = GUICtrlCreateIcon('shell32.dll', $aChange[$iChange], 40, 40, 32, 32)
$hCounter = GUICtrlCreateLabel('1', 40, 100, 100, 20)
GUISetState()
AdlibRegister('_ChangeIcon', 1000)
While True
Sleep(100)
GUICtrlSetData($hCounter, GUICtrlRead($hCounter) + 1) ; <- nur als Beispiel für das nebenbei laufende Script
WEndFunc _ChangeIcon()
[/autoit] [autoit][/autoit] [autoit]
$iChange = Not $iChange
GUICtrlSetImage($hIcon, 'shell32.dll', $aChange[$iChange])
EndFuncFunc _End()
[/autoit]
Exit
EndFunc -
Pac-Man fand ich auch gut, aber "Lode Runner" hatte ich damals (auf'm C64) ohne Ende gespielt.
Bevor das bei mir mit 'nem Computer anfing, hatte ich noch so eine kleine "Spielekonsole". Das muss so ca. 1981-82 gewesen sein.
Ich weiß nicht mehr genau, wie das Spiel hieß, aber ich glaube es hieß "Caveman". Da war auf der linken Seite eine Höhle und auf der rechten Seite das Nest von einem Dino. In dem Nest befanden sich drei Eier, die man mit einem Höhlenmenschen holen und zur Höhle transportieren musste. Dabei durfte man sich nicht von dem Dino erwischen lassen. Den Dino konnte man mit einem gezielten Steinwurf vorübergehend außer Gefecht setzen, um an die Eier zu kommen. Im Hintergrund gab es noch einen Vulkan, der hin und wieder ausbrach. Dann musste man auf dem Weg von und zur Höhle zusätzlich noch den Lavabrocken ausweichen, die vom Himmel fielen.
Dieses Spiel begeisterte mich damals auch sehr. -
Ich habe Dir mal ein Beispiel erstellt:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $aChange[2] = [-14, -15], $iChange = True$hGui = GUICreate('Test', 200, 200)
[/autoit] [autoit][/autoit] [autoit]
$hIcon = GUICtrlCreateIcon('shell32.dll', $aChange[$iChange], 40, 40, 32, 32)
$hCounter = GUICtrlCreateLabel('1', 40, 100, 100, 20)
GUISetState()
AdlibRegister('_ChangeIcon', 1000)
Do
GUICtrlSetData($hCounter, GUICtrlRead($hCounter) + 1) ; <- nur als Beispiel für das nebenbei laufende Script
Until GUIGetMsg() = -3Func _ChangeIcon()
[/autoit]
$iChange = Not $iChange
GUICtrlSetImage($hIcon, 'shell32.dll', $aChange[$iChange])
EndFunc -
Dein Skript ist nicht nur unvollständig, sondern auch syntaktisch fehlerhaft (Anführungszeichen fehlen).
Aber abgesehen davon ist auch der Ansatz verkehrt. Wenn Du einen bestimmten Code ausführen lassen willst, während im Hintergrund abwechselnd die Bilder geändert werden, dann schau Dir mal AdlibRegister an.
Damit kannst Du eine Funktion zeitgesteuert aufrufen (hier jede Sekunde), in der Du dann jeweils das andere Bild anzeigen lässt. Du brauchst auch nicht immer wieder ein neues Bild erstellen und dieses dann wieder löschen. Erstelle das Bild einmalig (am Skriptanfang) und lade anschließend nur die Bilder neu (GUICtrlSetImage). -
Es gibt noch eine neue Version. Einen kleinen Bug beseitigt und die Übernahme der Explorer-Einstellungen (versteckte Dateien und Systemdateien anzeigen/verstecken).
Neue Version in Post#1. -
Ich habe mich mal hingesetzt und mit IcoFX ein paar Schachfiguren zusammengepixelt.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Edit: Hier noch die gleichen Figuren im 3D-Stil:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Die (Icondateien im Anhang) könnt ihr benutzen, wenn ihr wollt. -
@Großvater: Volltreffer! Als 32 Bit-Version funktioniert es. Es muss also an der 64 Bit-Variante liegen. Irgend ein Fehler in der Struktur!?
Ich habe jetzt
[autoit]#AutoIt3Wrapper_UseX64=n
[/autoit]
eingefügt, dann funktioniert es auch als Script.So nebenbei funktioniert damit jetzt auch die Tastatursteuerung (Pfeil nach rechts/links zum auf-/zuklappen). Neue Version in Post#1.
Danke!

-
Hallo Techmix!
Alles Gute zum Geburtstag! -
Sorry, die Werte aus Post#75 waren mit der geänderten $tagNMHDR (wie von Dir, nuts, beschrieben).
Hier sind die Werte mit der Original-StructureConstants.au3:Spoiler anzeigen
Code
Alles anzeigen174313839: -17 174314073: -12 174314088: -17 174314650: -2 174314650: TVN_ITEMEXPANDING - 0 174314650: -12 174314650: TVN_ITEMEXPANDED - 30 174314650: -455 174314650: -17 174314650: -12 174314759: -17 174319736: -12 174319751: -17 174320282: -12 174320297: -17 174320672: -12 174320687: -17 174320765: -12 174321545: -8 174321545: -12nuts: Ja, Ich habe hier Win7, 64 Bit laufen.
-
Da bekomme ich nur Konsolenausgaben (auf das Plus von C: geklickt):
Spoiler anzeigen
Code
Alles anzeigen173231857: 4294967279 173232169: 4294967284 173232185: 4294967279 173232278: 4294967284 173232466: 4294967279 173232497: 4294967284 173232497: 4294967279 173232544: 4294967284 173232559: 4294967279 173235367: 4294967294 173235367: 4294966842 173235367: 4294967284 173235367: 4294966841 173235367: 4294967279 173235367: 4294967284 173235476: 4294967279 173237785: 4294967288
Den Verzeichnissen von C: fehlt aber das Pluszeichen. -
chip: Doch, moderne Rechner werden durchaus langsamer. Wenn die CPU zu heiß wird, wird automatisch die Taktfrequenz gesenkt. Das geht soweit, dass es sogar zu einem Absturz kommt. Das habe ich bei einem Laptop auch schon gesehen.
-
Wie meinst Du das bzw. wie soll ich das rauskriegen?
-
Ich meinte es eher so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$String = 'bla <monat> blubb <jahr> blablubb'
Dim $Array[2][2] = [['<monat>', '@MON'], ['<jahr>', '@YEAR']]
_Wildcards($String, $Array)
MsgBox(0, '', $String)Func _Wildcards(ByRef $String, ByRef $Array, $iStart = 0)
[/autoit]
If Not IsArray($Array) Then Return SetError(1, 0, -1)
If UBound($Array, 0) <> 2 Then Return SetError(2, 0, -1)
For $i = $iStart To UBound($Array) - 1
$String = StringReplace($String, $Array[$i][0], $Array[$i][1])
Next
EndFunc ;==>_Wildcards
$Replace brauchst Du nicht und wenn Du ByRef verwendest, wird direkt die Variable aus dem Hauptprogramm geändert (kein Return $String nötig). -
Wie oft muss man denn seinen Lüfter/Kühler sauber machen (In welchen Abständen) ?
Immer dann, wenn er verdreckt ist.
Nee, im Ernst: Es kommt aber wirklich darauf an, wie hoch die Staub-/Nikotin-/Fliegen-/Käferkonzentration in der Umgebungsluft ist. So ein Lüfter ist quasi wie ein Staubsauger und das ein oder andere bleibt schonmal an den Flügeln des Lüfters oder den Lamellen des Kühlkörpers hängen. Deshalb kann man die Frage nicht pauschal beantworten. Wenn der Rechner zu heiß wird, dann wird es mal wieder Zeit für eine Reinigung.

-
Ich bin jetzt mal gemein und verfasse einen kritischen Beitrag:
- ByRef benutzen (spart die Rückgabe mit Return)
- $Replace wurde nicht als Local deklariert
- $Replace ist aber sowieso überflüssig
- Fehlerbehandlung fehlt (falls $Array gar kein Array ist)SCNR

-
anno2008 liegt vermutlich gar nicht so falsch mit seiner Vermutung, dass der Lüfter verdreckt ist. Das ist eine ziemlich häufige Ursache für solch ein "abschalten" bei Belastung.
Wenn Du Dir das öffnen nicht zutraust, gehe doch mal mit dem Laptop zu einem Computerhändler Deines Vertrauens. Am besten zu dem, bei dem Du den Laptop gekauft hast, falls das nicht gerade im Versandhandel oder bei M*diaM*rkt war.
Alternativ besorge Dir eine Dose Druckluftspray und puste damit die Lamellen des Kühlers vom Staub frei (in die Ansaug- und Ausblasöffnung sprühen). Laptop vorher natürlich runterfahren/ausschalten. -
Nein, so einfach wie der TO sich das vorstellt geht es nicht. USB ist ein serieller Port. Einfach eine LED an einen USB-Stecker anschließen und einen Befehl senden geht nicht!
Dazu braucht es schon ein USB-Interface, was Dir dann digitale und/oder analoge Anschlüsse zur Verfügung stellt. Außerdem braucht man für das Interface dann eine DLL, um eine Zusammenarbeit mit AutoIt hinzukriegen. -
Herzlichen Glückwunsch!
Achja, 15 Jahre...lang, lang ist's her...
Und hier noch ein
Geburtstags-Skript
[autoit]
[/autoit]
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
$iWidth = @DesktopWidth
$iHeight = @DesktopHeight
$hGui = GUICreate('Geburtstag', $iWidth, $iHeight, 0, 0, $WS_POPUP)
GUISetBkColor(0x000000)
$hClose = GUICtrlCreateButton('Happy Birthday' & @CR & 'to you', Random(1, $iWidth - 130, 1), Random(1, $iHeight - 50, 1), 110, 50, $BS_MULTILINE)
GUISetState()
AdlibRegister('_MoveButton', 1000)
Do
Until GUIGetMsg() = $hClose
Func _MoveButton()
GUICtrlSetPos($hClose, Random(1, $iWidth - 130, 1), Random(1, $iHeight - 50, 1))
EndFuncTipp zum beenden
[TAB] & [ENTER]
-
Das mit $tagNMTREEVIEW habe ich schon komplett durch (alle Parameter versucht). Unter Windows7 kommt dabei nichts brauchbares raus.
Entweder stimmt die Struktur nicht oder Windows7 sendet dabei keine notification message.
Ich weiss nicht, wie man sonst noch an das angeklickte Item kommt?!