Damit AutoIt darauf läuft, müsste es ein Windows-Handy sein.
Da es sich bei dem Windows Phone aber um ein WindowsRT handelt, läuft darauf kein AutoIt.
Ich fürchte, AutoIt auf einem Smartphone kannst Du vergessen.
Beiträge von Oscar
-
-
@Musashi: Stimmt, das "prog.ico" habe ich völlig vergessen. Wird bei der nächsten Version mitgeliefert. Sorry!
BLinz: Ich denke, Du meinst den Schließen-Button?! Das liegt wohl daran, dass die "imageres.dll" nicht auf allen Windwosversionen die gleichen Icons liefert. Ich werde das mit einem programmeigenen Icon ändern.
autoiter: Die Münzen sind auf schnellen Rechnern etwas langsamer, ja! Das ist so beabsichtigt, weil man sonst auf langsameren Rechnern Vorteile hatte.
Zu den Goldmünzen: Wenn Du schnell genug bist, schaffst Du es auch mehrere Goldmünzen hintereinander zu treffen. Jeder Chip wird nach 2 sek. wiederhergestellt (die Zeit wird für jeden Chip einzeln gespeichert). Wenn Du die Chips im "richtigen" Rhythmus triffst, hast Du evtl. genug Zeit die Goldmünzen immer wieder zu treffen. Fünf am Stück ist aber schon eine klasse Leistung.Dass sich die MPS-Rate bei 140 einpendelt, ist beruhigend. Die getroffene Maßnahme scheint zu wirken.
Ich denke, ein Problem könnte es noch bei Monitoren mit sehr hoher Auflösung (QHD, 4k) geben, weil dann die Chips doch recht klein sind (relativ gesehen).
Leider gibt es die Chips nicht in höherer Auflösung und hochskalieren sieht blöd aus.
-
Es gibt eine neue Version (Post#1).
Hier interessiert mich vor allem, ob die Berechnung der MPS (Moves per second) sich ungefähr bei 140 einpendelt. Werte von 130 - 150 sind normal. Einzelne Ausreißer auch.
Wenn das bei irgendjemanden sehr viel niedrigere oder höhere Werte annimmt, dann bitte mal eine Rückmeldung mit Windowsversion und Rechnerkonfiguration. -
Mit "Hinweis-Icon rechts oben" meinst Du das Schließen-Icon nehme ich an?
Es ist eigentlich nicht wirklich nötig, weil man das Spiel ja auch über "ESC" beenden kann, aber normalerweise erwartet der Anwender ja ein Schließen-Icon zum beenden des Programms.
Das mit der doppelten Goldmünze war anfangs nicht geplant, aber als ich das im Spiel bemerkte, fand ich das nicht schlecht und habe es dann als Feature übernommen.

-
Während das Spiel läuft, ist der Button versteckt, damit man nicht versehentlich draufklickt.
Du kannst das Spiel aber mit der ESC-Taste jederzeit beenden. -
Ja, das mit der Skalierung der Zeichensätze ist eine gute Idee. Das habe ich mal mit eingebaut. Danke, Musashi!

Es sind aber auch sonst noch einige Dinge dazugekommen (Update siehe Post#1).
-
Ok, das Spiel findet ja doch Anklang.

Dann mal gleich das nächste Update (Post#1).
Jetzt mit Hintergrundbild und Treffersound. -
Danke, für die Rückmeldungen!
Ich habe jetzt noch ein kleines Update eingebaut.
Es gibt jetzt 3 Chips gleichzeitig und wenn die alle weggeklickt sind, dann kommt ein Gold-Chip, der 250 Punkte wert ist.
So ist das ein zusätzlicher Ansporn.
-
ChipHunter v1.7
Bei ChipHunter geht es darum, umherfliegende Chips
abzuschießen.
Vor dem Start kann man einen von drei Schwierigkeitsgraden auswählen:
"Ansitzjäger", "Treibjäger" oder "Jagdhund" (in aufsteigender Reihenfolge).
Dieser Schwierigkeitsgrad bestimmt, wie schnell sich die Chips bewegen, wie weit sie sich "pro Zug" über den Bildschirm bewegen und in welcher Zeit, man alle drei abgeschossen haben muss, bevor ein Spezial-Chips erscheint (2sek., 1.75sek. 1.5sek.).
Bei Spielstart bekommt man 100 Schuss Munition. Davon befinden sich 10 Schuss im Magazin. Hat man das Magazin leergeschossen, so muss man nachladen (mit der rechten Maustaste). Wenn man die gesamte Munition verschossen hat, ist das Spiel vorbei (die Restzeit wird auf Null gesetzt).
Nach dem Start des Spiels erscheinen drei Chips, die unterschiedliche Werte (1, 10, 25, 50, 100, Zusatzmunition, Magnet, Teufel oder Zauberhut) aufweisen können und die Chips bewegen sich zufallsgesteuert über den Bildschirm.
Wenn man die Chips abschießt (mit der linken Maustaste anklicken), erhält man die Punkte bzw. die Munition gutgeschrieben. Der Magnet-Chip hat eine besondere Bedeutung. Hat man ihn abgeschossen, wird das Fadenkreuz magnetisch und zieht die anderen Chips an. Die Wirkung hält 10 Sekunden lang an. Während dieser Zeit verändert sich das Ausssehen des Fadenkreuzes.
Ab und zu erscheint ein Teufel- oder ein Zauberhut-Chip. Diese beiden Chips verschwinden nach 10 Sekunden von alleine wieder, wenn man sie nicht vorher abschießt.
Den Zauberhut-Chip sollte man allerdings nicht abschießen, denn der verwandelt alle Chips in Gold-Chips.
Den Teufel-Chip hingegen sollte man so schnell wie möglich abschießen, weil der alle Chips in Einer-Chips verwandelt.
Schafft man es, alle drei Chips innerhalb einer vorgegebenen Zeit abzuschießen, so erscheint ein Spezial-Chip, der per Zufall ausgewählt wird.
In 75% der Fälle handelt es sich bei dem Spezial-Chip um einen Gold-Chip, der bei Abschuss 250 Punkte wert ist. In den übrigen 25% der Fälle erscheint ein anderer Spezial-Chip und davon gibt es fünf verschiedene: "+5sek.", "+10sek.", "+5%", "+10%" und die "freundliche Bombe", wobei die Sekunden zur Restzeit addiert werden und die Prozente zur Trefferquote.
Beim Abschuss der "freundlichen Bombe" werden auch alle anderen Chips zerstört, die sich momentan auf dem Bildschirm befinden, und man bekommt deren Punkte, sowie 100 Punkte für die Bombe und, als zusätzlicher Bonus, kommt als nächstes ein Gold-Chip.
Die Trefferquote entscheidet, wie viele der abgeschossenen Punkte man tatsächlich erhält. Wenn man also beispielsweise 100 mal mit der Maus geklickt hat und dabei nur 50 Chips getroffen hat, dann ergibt das eine Trefferquote von 50%. Hat man dabei Chips im Wert von 2000 Punkten abgeschossen, so erhält man davon nur diese 50%, also 1000 Punkte.
Die "Jagdzeit" pro Spiel beträgt regulär 90 Sekunden. Durch das Abschießen der Sekunden-Spezial-Chips verlängert sich diese Zeit aber entsprechend.
Die Lautstärke der Sounds kann man oben rechts einstellen. Entweder indem man mit der linken Maustaste in das Feld klickt (nicht während eines Spiels, damit man nicht versehentlich hineinklickt) oder indem man das Mausrad (falls vorhanden) rauf oder runter dreht (das funktioniert auch während des Spiels).
Das Spiel kann man mit einem Mausklick auf das "X" oben rechts beenden (nicht während eines Spiels, damit man nicht versehentlich darauf klickt) oder indem man die "ESC"-Taste auf der Tastatur drückt (das funktioniert auch während des Spiels). Achtung, es erfolgt keine weitere Nachfrage! Das Spiel wird dann sofort beendet!
Zusätzlich gibt es noch ein Kontextmenü (zu erreichen mit der rechten Maustaste). In diesem Kontextmenü gibt es fünf Menüpunkte, die man mit der linken Maustaste auswählen kann.- Als ersten Menüpunkt gibt es dort den Eintrag "Programm-Informationen". Beim Klick darauf erscheint ein Fenster, wo Informationen zu dem Programm angezeigt werden. Unter anderem auch eine Statistik.
- Der zweite Menüpunkt heißt "Spielanleitung & Spielregeln". Beim Klick darauf wird diese Spielanleitung aufgerufen.
- Der dritte Menüpunkt heißt "Hintergrundbild ändern". Beim Klick darauf kann man eine Bilddatei (jpg, bmp, png) auswählen, die als Hintergrundbild angezeigt werden soll. Wenn wieder das interne Hintergrundbild angezeigt werden soll, einfach bei der Auswahl auf "Abbrechen" klicken.
- Der vierte Menüpunkt heißt "Bestenliste importieren". Beim Klick darauf kann man eine Datei auswählen, die die Bestenliste eines anderen Spielers enthält. Diese Bestenliste wird dann mit der eigenen Bestenliste abgeglichen/importiert.
- Der fünfte Menüpunkt heißt "Bestenliste exportieren". Beim Klick darauf muss man eine Datei angeben, in der dann die eigene Bestenliste gespeichert/exportiert wird. Ein anderer Spieler kann diese Datei dann bei sich importieren.
Zusätzlich habe ich noch eine "Boss-Taste" eingebaut. Es handelt sich dabei um die Tastenkombination: {STRG} & {b}
Wenn man diese Tastenkombination drückt, wird das ChipHunter-Fenster minimiert und es tarnt sich in der Taskleiste als Taschenrechner (Titel und Icon).
Viel Spaß beim Abschießen der Chips!Rechtliches:
Das Spiel steht unter der "CC BY-NC-ND 4.0"-Lizenz (freie Weitergabe mit Namensnennung, nicht kommerziell, keine Bearbeitung).History
Update v0.9.1.0:
Es sind nun 3 Chips, die sich über den Desktop bewegen. Immer wenn einer weggeklickt wird, dauert es eine Zeit (zwei Sekunden) bis er erneut erscheint.
Wenn ihr es schafft alle drei Chips wegzuklicken, so kommt als nächstes ein Gold-Chip, der 250 Punkte wert ist.Update v0.9.2.0:
Jetzt mit Hintergrundbild, damit ihr euch nicht durch das rumgeklicke den Desktop zerschießt.
Einen Treffer-Sound gibt es jetzt auchUpdate v0.9.3.0:
Die Anzeige der Punkte, usw. erfolgt nun direkt auf dem Hintergrundbild.
Es gibt jetzt einen neuen Zeichensatz (7Segment) für die Anzeige.
Eine Anzeige für die Anzahl der Mausklicks und für die Anzahl der Treffer ist dazugekommen.
Außerdem wird der Zeichensatz skaliert (Danke, Musashi).
Zehn Sekunden vor dem Ablauf der Zeit wird nun ein Sekunden-Signal (Pling) ausgegeben.
Nach Ablauf der Zeit ertönt nun eine Glocke.Update v0.9.4.0:
Nun wird die Trefferquote (in Prozent) berechnet, z.B. 20 Mausklicks und 10 Treffer = 50%, und diese Trefferquote wirkt sich auf die Gesamtpunkte aus: z.B. 3000 Punkte, 50% = 1500 Punkte
Die Spielzeit habe ich auf 90 Sekunden reduziert.
Außerdem habe ich eine CPU-Bremse eingebaut, weil schnellere Rechner benachteiligt wurden, indem sie mehr Bewegungen pro Sekunde berechnen konnten.
Das Programm versucht nun, die Bewegungen pro Sekunde (Moves per second = MPS) auf ca. 140 einzustellen. Die Anzeige dafür findet ihr auf der rechten Seite.
Das Problem mit dem zeitweisen "festhaken" in den Ecken sollte nun beseitigt sein.Update v0.9.5.0:
Der Schließen-Button ist jetzt ein eigenes Icon. Die "imageres.dll" ist leider nicht in allen Windowsversionen gleich.
Nachdem die Zeit abgelaufen ist und die Glocke ertönte, vergehen jetzt noch 3 sek. bevor die Buttons wieder erscheinen.
Neue Chips mit höherer Auflösung (256 Pixel), die aber entsprechend der Desktop-Auflösung runterskaliert werden.
Statt des 5er-Chip gibt es nun einen 10er-Chip.
Die "Auszeit" der Chips, nach einem Treffer habe ich von 2 auf 1.5 sek. verkürzt (weniger Goldmünzen).
Bestenliste (Top-Ten) hinzugefügt. Die wird verschlüsselt im Anwendungsordner gespeichert.
Lautstärkeregler für die Sounds eingebaut (oben rechts). Mausrad oder Mausklick über dem Regler verändert die Lautstärke.
Das Programm-Icon befindet sich nun mit im ZIP-Archiv.Update v0.9.6.0:
Drei verschiedene Schwierigkeitsstufen (Ansitzjäger, Treibjäger, Jagdhund) mit jeweils eigener Bestenliste.
Hintergrundbild geändert.
Lautstärkeregler überarbeitet. Während des Spiels kann man die Lautstärke nur über das Mausrad ändern, die Maus muss sich aber nicht über den Regler befinden.
Beim Abschuß aller 3 Chips, kommt nun nur in 60% der Fälle eine Goldmünze. In den anderen 40% kommt entweder "+5sek.", "+10sek.", "+5%" oder "+10%". Wobei die Sekunden zur Restzeit addiert werden und die Prozente zur Trefferquote.Update v1.0.0.0:
Umstellung auf die "bass.dll" zum abspielen der Sounds.
Import und Export der Bestenliste. Damit man sich mit anderen messen kann. Erreichbar über das Contextmenü (rechte Maustaste).
Etwas Feintuning bei den Schwierigkeitsstufen.
Einige Bugs behoben (Prozentberechnung, Timerprobleme).Update v1.1.0.0:
Ein ganz blöder Fehler beim Start. Der Timer und der Verstecktzähler wurden zurückgesetzt, nachdem die Chips erstellt wurden.Update v1.2.0.0:
Irgendwie machen die Timer-Befehle (TimerInit und TimerDiff) Probleme. Wenn man mehrere Spiele hintereinander spielte, dann blieb die Anzeige für die Restzeit stehen, obwohl sich die Chips weiter bewegten und man sie auch abschießen konnte. Ich habe das jetzt auf die Timer-Befehle aus der Timers-UDF umgestellt und seit dem sind die Probleme vorbei.
Es gab noch einen Bug bei den versteckten Chips. Beim Neustart habe ich sie nicht auf "nicht versteckt" zurückgesetzt, was zur Folge hatte, dass dann keine Spezial-Chips mehr erschienen. Behoben!
Die Prozent- und Sanduhr-Icons besitzen jetzt einen Hintergrund und einen Rand. Gerade das Sanduhr-Icon war, aufgrund der Transparenz, sehr schwer zu treffen.
Die prozentuale Verteilung der Spezial-Chips habe ich auch noch geändert. Es gibt jetzt in 80% der Fälle eine Goldmünze und zu jeweils 5% einen der anderen Chips ("+5%", "+10%", "+5sek." oder "+10sek.").Update v1.3.0.0:
Das Hintergrundbild wurde gar nicht skaliert angezeigt. Behoben!
Kleinere Änderungen (andere Versionsnummer nach dem zweiten Punkt) werden nicht mehr als andere Version angesehen. Bestenliste kann trotzdem importiert werden.
Das Fadenkreuz ist jetzt wieder ein richtiger Mauscursor, aber trotzdem das PNG-Fadenkreuz (vorher: Extra-Gui). Dadurch sollten die Mausklicks wieder zuverlässiger funktionieren.
Fehler beim importieren der Bestenliste. Die bestehenden Einträge wurde nicht nach unten geschoben, sondern von den importierten Werten ersetzt. Behoben!
Außerdem wurde beim importieren nicht überprüft, ob bereits genau dieser importierte Eintrag bereits vorhanden ist. Das führte zu doppelten Einträgen. Behoben!
Die Versionsnummer wird nun oberhalb des Lautstärkereglers angezeigt.Update v1.3.1.0:
Ich habe das flackern des Mauscursors beseitigt. Der Cursor wird jetzt, während des Spiels, als Systemcursor gesetzt. So muss er nicht dauernd gesetzt werden, was das flackern verhindert.
Auch das flackern der Zeit-, Prozent-, Treffer- und Punkteanzeige habe ich beseitigt, indem ich diese Elemente auf eine extra GUI (Transparent, Layered) verlagert habe.
Die Anzeige der MPS habe ich ausgeschaltet, weil sie nur für's Debugging nötig war.
Es handelt sich hierbei um ein "kleines" Update, bei dem die bisherigen Bestenlisten erhalten bleiben und auch die Bestenlisten aus v1.3 importiert werden können.Update v1.3.2.0:
Noch ein "kleines Update". Hauptsächlich kosmetischer Art.
Das Contextmenü hat jetzt ein paar Icons bekommen.
Im Contextmenü kann man jetzt auch "Programm-Informationen" auswählen. Dort gibt es Hinweise zum Programm und die Danksagungen.
Die Bestenliste befindet sich jetzt auch mit auf der Display-GUI. So flackert auch die nicht mehr beim umschalten der Schwierigkeitsstufe.
Die ganzen Grafiken, Sounds, Fonts usw. habe ich jetzt in eine "Resources.au3" ausgelagert. So hat man einen besseren Überblick über das eigentliche Script.Update v1.3.3.0:
Die Display-GUI befindet sich jetzt immer hinter den Chips. Es kam manchmal vor, dass die Chips hinter der Display-GUI auftauchten.
Man kann jetzt das Hintergrundbild ändern. Dazu kann man jedes JPG-, BMP- oder PNG-Bild auf der eigenen Platte verwenden. Es wird entsprechend skaliert.
Außerdem gibt es jetzt eine Statistik. Anzahl der Spiele, der Mausklicks und der Treffer, sowie die längste Spielzeit und die Gesamtspielzeit. Zu erreichen über "Programm-Informationen".
Die Programm-Informationen sind auch noch ausführlicher geworden.Update v1.3.4.0:
Es ertönt jetzt bei jedem Schuss ein Sound. Beim Treffer eine Explosion. Danke UEZ, für die Idee!
Zusätzlich erscheint an der Stelle des abgeschossenen Chip ein zerstörter Chip (verschwindet nach einiger Zeit).Update v1.3.5.0:
Das Kontextmenü konnte während des Spiels aufgerufen werden, wodurch die Chips angehalten wurden und man sie abschiessen konnte. Behoben!
Standard-Hintergrundbild geändert.Update v1.4.0.0:
Einen zusätzlichen Spezial-Chip ("die freundliche Bombe") hinzugefügt.
Die Lizenzbedingungen von der BASS.dll und der BASS-UDF als Textdateien in den BASS-Ordner kopiert.
Einige kleinere Änderungen am Sourcecode.Update v1.4.1.0:
Blöder C&P-Fehler! Es konnte passieren, dass beim Einsatz der Bombe eine endlose Folge von Spezial-Chips aufrief. Behoben!Update v1.5.0.0:
EInführung von Munition. Man erhält bei Spielstart 100 Schuss Munition und kann zusätzliche Munitions-Chips einsammeln.
Nach einer Bombe kommt jetzt auf jeden Fall ein Gold-Chip, nicht wie vorher ein beliebiger Spezial-Chip.Update v1.5.1.0:
Einige Änderungen am Sourcecode, um die fehlerhafte Transparenz zu beseitigen.
Das flackern, wenn mehrere Chips übereinander fliegen, ist jetzt auch geringer.Update v1.6.0.0:
Spielanleitung in das Spiel eingebaut. Aufruf über Icon oben rechts oder im Kontextmenü.
Boss-Taste hinzugefügt. {STRG} & {b} minimiert das Spiel und es tarnt sich in der Taskleiste als Taschenrechner (Titel und Icon).
Es gibt jetzt noch einen Magnet-Chip. Beim abschiessen, wird das Fadenkreuz magnetisch und zieht die anderen Chips an. Dauer: 10 Sekunden.Update v1.6.1.0:
Die Häufigkeit des Magnet-Chips angepasst. Kommt jetzt öfter.
Die Fehler bei der Anleitung korrigiert.
Es gibt jetzt auch eine Installer-Version, damit auch Laien das Spiel installieren können.Update v1.7.0.0:
Die Munition kommt jetzt seltener. Wenn man noch mehr als 90 Schuss hat, dann kommt gar keine weitere Munition.
Beim abschießen der Bombe wurde die Munition und der Magnet nicht gezählt. Behoben!
Es gibt jetzt einen Teufel- und einen Zauberhut-Chip. Die sind beide 10 Sekunden lang aktiv und verschwinden dann von alleine, wenn man sie nicht vorher abschießt.
Der Teufel-Chip verwandelt alle Chips in Einer-Chips und der Zauberhut-Chip verwandelt alle Chips in Gold-Chips.[b]Screenshot:
ChipHunter_Screenshot.jpgIm ZIP-Archiv (Anhang) findet ihr ein Verzeichnis mit dem Script, dem Programm-Icon und dem BASS-Verzeichnis.
Falls ihr eine Installer-Version haben wollt, damit auch Laien das Spiel installieren können, müsst ihr euch diese von meiner Seite herunterladen: https://forum.technik-hobby.de/attachment.php?aid=44
-
Wenn ich jetzt noch den roten Zauberschweif bekommen nehme ich dein statt mein Script
Für Zauberschweif ist UEZ (GDI+ Meister) zuständig.
Von mir kannst Du einen "WanderingBug" bekommen:AutoIt
Alles anzeigen#include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> Opt('GUIOnEventMode', 1) _GDIPlus_Startup() Global $bBug = _bug() Global $iPoint = 150, $iStartX = @DesktopWidth / 2, $iStartY = @DesktopHeight / 2 $hGui = GUICreate('WanderingBug', 32, 32, $iStartX - 8, $iStartY - 8, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_LAYERED + $WS_EX_TOPMOST) GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') GUISetBkColor(0xABCDEF) GUISetCursor(16, $GUI_CURSOR_OVERRIDE, $hGui) GUISetState() _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF) $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui) $hImage = _GDIPlus_BitmapCreateFromMemory($bBug) $iWidth = _GDIPlus_ImageGetWidth($hImage) $iHeight = _GDIPlus_ImageGetHeight($hImage) $hMatrix = _GDIPlus_MatrixCreate() _GDIPlus_MatrixTranslate($hMatrix, $iWidth / 2, $iHeight / 2) GUIRegisterMsg($WM_PAINT, 'WM_PAINT') _GDIPlus_MatrixRotate($hMatrix, 0, 'False') _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix) _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2) Global $aMousePos, $aWinPos = WinGetPos($hGui), $iStepX, $iStepY, $iAngle = 0 Global $iMouseSpeed = 1, $aMousePos, $iWay = 0 Global $iX = $iStartX, $iY = $iStartY MouseMove($iStartX, $iStartY, 0) _RotateBug(90) Do Switch $iWay Case 0 $iStepX = 1 $iStepY = 0 $iX += 1 If $iX = $iStartX + $iPoint Then $iWay = 1 _RotateBug(90) EndIf Case 1 $iStepX = 0 $iStepY = 1 $iY += 1 If $iY = $iStartY + $iPoint Then $iWay = 2 _RotateBug(90) EndIf Case 2 $iStepX = -1 $iStepY = 0 $iX -= 1 If $iX = $iStartX - $iPoint Then $iWay = 3 _RotateBug(90) EndIf Case 3 $iStepX = 0 $iStepY = -1 $iY -= 1 If $iY = $iStartY - $iPoint Then $iWay = 0 _RotateBug(90) EndIf EndSwitch MouseMove($iX, $iY, $iMouseSpeed) $aMousePos = MouseGetPos() $aWinPos[0] += $iStepX $aWinPos[1] += $iStepY WinMove($hGui, '', $aWinPos[0], $aWinPos[1]) Until $aMousePos[0] <> $iX Or $aMousePos[1] <> $iY _CloseGui() Func _CloseGui() _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_ImageDispose($hImage) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_Shutdown() Exit EndFunc ;==>_CloseGui Func _RotateBug($iAngle) _GDIPlus_MatrixRotate($hMatrix, $iAngle, 'False') _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix) _GDIPlus_GraphicsClear($hGraphic, 0xFFABCDEF) _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2) EndFunc ;==>_RotateBug Func WM_PAINT($hWnd, $Msg, $wParam, $lParam) _GDIPlus_MatrixRotate($hMatrix, 0, 'False') _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix) _GDIPlus_GraphicsClear($hGraphic) _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2) EndFunc ;==>WM_PAINT ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-09-19 Func _bug($bSaveBinary = False, $sSavePath = @ScriptDir) Local $bug $bug &= '4LVIAAABABAgIAFwIAAAqBAAABYAAMwAKAAYAJAAQAAYAVwNAQCAAGylARwcHLcDgQGLCmYPABZ2XQAAF3e0ABh4zPAABC3/ggHBAsEEwQYHwQjeEeIftB0dHf8ABwcHTgAAVQwAABh3jQAZePYAABt8/wAgjf+AACSc/wANWsMA/8ECwQTBBsEIwQrADMEOwRADwRLtHxQUFCYBAQAB/gEDHd8AHAB73gAhiv8AKQCk/wAwuf8ANADF/wA2y/8AHP6rwwDBAsEEwQbBCMEKwAxwAQcf3MEQwRLxYAEADS/JACB//wAAKp7/ADO7/wBAOc7/ADzUwADV+cMAHrbDAMUDwQbBCMEKD8EMwA7CEDEAH4shAAAnkOsAMKj/AAA3uf8KLYH/CgQuhMAXs/8AQdn5wwAgvcMA5QFgA2EEYQU/YQZiB2EIYQkfAAgAVQMAACybxgAypv8ADihm/xsdIf8IGxsbZgAOK3D/gABF3f8AI8NjAP9gAWECaQRhBmEHYQhiCWEKAx8AAwA0p1QAOa8w/xAoXWsKZAAZHQAl/wBL4f8AJf7KYwBgAWECcQVhCGEJYgoDHwBjHzuw1QBExBD/GR4ocwovbf+AAFDl/wAo0mMA/2ABYQJyFWAIYQliCn8gALYAtzwARMD/AE4g2P8RM3fuCRMwAGz/AFPf/wBV/ulgTGA+YQBhAWACYQPtBUdhCGEJYgo9tj/dDwIARsCKA0/Q/wUAV+T/Blvs/w4ASbn/Ez2T/xBAQqD/C1HRYALt+WYAACzgEGAAaQJhBGEFH2EGYQdhCGEJYQoCSMACiv0PCFDNxg1XAN3/EF7s/xBg4vF6AAAv52IA/QRhCQdhCmEL/Q8QVdjqFgBe6P8XY/H/FwRk9XoAAi7c/wJ8L9/+BGEJYQphC/0PGQBd4fkdZvL/HxRp+GAA+XIAHlbGEP8dKERmPBwrTTD/HlrSvwI2APj/DzEFsQUfBwsAGyM1/wAfPoD/I2jw/wgjbPs/AGny/xvEICt+Jh0nP78CNQAfsAQxBbEFHwcLABogLwL98QQfN2//J28C/T4AKG35/x0l4jz+Bx4uVf8CNACxBI8xArEFHwf8DypO8jIFwB4i/ypx/z8AMACAKGXi/yE5cDBHAi0wADH/ITx7//gpaeu/AjQAsQQyBbAFhx8HBwDwckkaMGLyBwAhOnD/LXP//wAvdP//VYX//wBukf//fpn//0CLof//magzAJP+mjMA9QCxATECsQIxA7ED/zEEsQTyD7AFMQafB3OCsAEA/wocRP0jQYQA/y1w9v9Gfv8A/4mf/P9ve7wA/09Xhv81O1wA/x4hNf8CAgL/PwAwALEBMQKxAjEDsQMxBL+xBDEFsQUxBv+I8ge9cHogtwYMHiugZNIrAHL//3GG2v8lwCg5/w0NDT8APwD/PgCxAzEEsQQxBbEFMQaxBkMfEAcAIWr5VHErOvw+WD9dPwA/ADgAMQSxBA8xBZ8GDwADAKoDEmIA8cYoKCz/KSn+KT8APwA/ADQAMQSxBDEFB38GDwAGAE3oIVZoAHv8lbO8/7nfAOv/rM7Y/3GE8In/NTUwHj8ANgAxAv+xAjEDsQMxBLEEDwYPAAkAAAYGBoNRZ3n+AI+uuP+kxtL/ALvh7v/F7fr/gIqgp/9BQUE/APEwAIOYnzICsQIxA7ED3zEEsQQfBg8AuCgtsRswLQDveJCc0X6ZoQD/kbC5/6fL1gD/rtHc/0hISAD/SUlJ/0pKSscyALEAMQGu0d0yArECwzEDsQMEBATuMlowBQefBg8AMlAaGoEeHgwe/3EA8QB2iZiPAHeSm/x3kZn/AHyWn/86Ojr/gD8/P/9CQkIyAP+xADEBsQExArECMQO/BA8AYw8AMFAbG9IxAz0LdQCImoFWZ3/VLwAzSvIxMzv8MjgyMv8xALEAMQFUZPx81DECvRSxBDEFnwYPAP00A34xAJ8BDwAPAA8A/wT/DwAPAA8ADwAPAA8ADwAPAA8P' $bug &= 'AA8ADwADAESwCgA6AP8IAPzgBz8I/AAAAgb+AAB/IQEO+AAAHwEG8AAEAA8dBuAAAAfAeAAAAwEDBTcFTwIPgAABH/jgBx/5/wT/nwVz' $bug = _WinAPI_Base64Decode($bug) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($bug) & ']') DllStructSetData($tSource, 1, $bug) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 4286) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\bug.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_bug Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress -
Hast Du mein Script aus Post#6 mal ausprobiert.
Das funktioniert nämlich viel einfacher.
-
und sendet mit ControlSend an das Fenster
Bist Du sicher, das ein ControlSend das einschalten des Bildschirmschoners verhindert?
Generell würde ich keine Tasten-Emulation verwenden, denn wenn der Anwender gerade einen Editor oder so benutzt und einen Text eingeben will, dann kommst Du ihm damit ins Gehege.
Eine Maus-Bewegung hingegen ist weniger kritisch. -
Wenn das unbedingt mit den Mausbewegungen sein soll, dann bewege die Maus immer nur einen Schritt und sieh nach, ob die Maus sich danach wirklich dort befindet.
Wenn nicht, dann hat der Benutzer die Maus zusätzlich bewegt und das Programm kann beendet werden:AutoIt
Alles anzeigen#NoTrayIcon Global $iStartX = @DesktopWidth / 2, $iStartY = @DesktopHeight / 2 Global $iMouseSpeed = 5, $aMousePos, $iX = $iStartX, $iY = $iStartY, $iWay = 0 MouseMove($iStartX, $iStartY, 0) Do Switch $iWay Case 0 $iX += 1 If $iX = $iStartX + 50 Then $iWay = 1 Case 1 $iY += 1 If $iY = $iStartY + 50 Then $iWay = 2 Case 2 $iX -= 1 If $iX = $iStartX - 50 Then $iWay = 3 Case 3 $iY -= 1 If $iY = $iStartY - 50 Then $iWay = 0 EndSwitch MouseMove($iX, $iY, $iMouseSpeed) $aMousePos = MouseGetPos() Until $aMousePos[0] <> $iX Or $aMousePos[1] <> $iY Exit -
Wenn Du verhindern willst, dass der Bildschirmschoner "zuschlägt", warum deaktivierst Du ihn dann nicht?
Einfach in der Registry den Zeitwert auf Null setzen:AutoIt
Alles anzeigen_DeActiveScreenSaver(True) ; Bildschirmschoner deaktivieren _DeActiveScreenSaver(False) ; Bildschirmschoner aktivieren Func _DeActiveScreenSaver($fDeactivate = True) Local Const $sRegPath = 'HKEY_CURRENT_USER\Control Panel\Desktop' Local Static $iOldScreenSaveTimeOut = 0 If $fDeactivate Then $iOldScreenSaveTimeOut = RegRead($sRegPath, 'ScreenSaveTimeOut') RegWrite($sRegPath, 'ScreenSaveTimeOut', 0) Else RegWrite($sRegPath, 'ScreenSaveTimeOut', $iOldScreenSaveTimeOut) EndIf EndFunc -
autoiter: Ein verstecken des Listviews während des Resizing finde ich nicht so gut. Ich habe jetzt aber mal das $LVS_EX_DOUBLEBUFFER hinzugefügt. Damit reduziert sich das flackern zumindest.
flummi1988: Ja, Du warst der Auslöser, dass ich das endlich mal in Angriff genommen habe. Ich wollte das Beispiel schon länger mal ändern, weil ich das so wie damals schon lange nicht mehr handhabe.
Es gibt aber (schon wieder) ein paar kleine Änderungen am Script. Update auf v3.2 in Post#1.
-
Ich danke euch für die Lorbeeren!

Es gibt noch ein paar kleine Änderungen. Update auf v3.1 in Post#1.
-
-
sieht aus wie der Rahmen einer Group, habe aber auf Anhieb nichts gefunden was oben links bei 0,0 beginnt
Ja, jetzt sehe ich den Fehler auch!
Wobei das nach einem Neustart des Programms weg ist.
Tatsächlich verursacht der Rahmen der Suchbegriff-Group diesen Fehler und noch kurioser ist, dass der Fehler nicht mehr auftritt, wenn man die Zeile GUICtrlCreateGroup('', -99, -99, 1, 1) auskommentiert. -
Früher (mit weniger Erfahrung) hielt ich es für eine gute Idee, eine Datenbank ausschließlich mit einem Listview zu verwalten (siehe: Listview-Datenbank-Beispiel).
Also die Daten direkt in das Listview eintragen, dort sortieren und dort suchen. Von dort aus speichern und auch dahin von der Festplatte laden.
Mit wenigen Datensätzen ist das machbar und auch schnell genug, deshalb ist mir das erst nicht bewusst geworden.
Erst als ich so eine "Datenbank" im praktischen Einsatz hatte und die Datensätze immer mehr wurden, wurde mir klar, dass das keine so gute Idee war.Lange Rede, kurzer Sinn! Ich handhabe das mittlerweile anders: alle Daten werden in ein Array geladen, eingegeben, sortiert, dort gesucht und von dort gespeichert.
Das Listview dient im Wesentlichen nur der Anzeige. Auf diese Weise ist das Ganze sehr viel schneller und man kann auch umfangreichere Datensätze verwalten.Ich wurde nach einem Beispiel-Script gefragt und so habe ich mich mal hingesetzt und solch ein Beispiel-Script geschrieben.
Das Script ist ganz schön umfangreich geworden (ca. 47kB), aber rund die Hälfte davon sind Kommentare.
Dabei habe ich auch an die AutoIt-Anfänger gedacht und jede Zeile kommentiert, mit der Hoffnung, dass das damit verständlich wird.Das Script ist nicht nur einfach ein Datenbank-Beispiel geworden. Ich habe auch andere Erfahrungen, speziell mit der GUI-Verwaltung, mit einfliessen lassen:
- Für AutoIt-Anfänger ist wohl der OnEvent-Modus ein Beispiel dafür.
- Andere haben mit Arrays so ihre Probleme.
- Ein größenveränderbares Hauptfenster wird hier ebenso benutzt, wie das abspeichern der Größe und Position des Fensters in einer Inidatei.
- Auch das abwechselnde benutzen des OnEvent- wie auch des MessageLoop-Modus (z.B. für das Infofenster) wird in dem Beispiel gezeigt.
- Verwenden einer Menüleiste und einer Statuszeile.
- Doppelkliick-Auswertung auf ein Listview
- usw.
Screenshot:
Bedienung des Programms:
Es gibt sieben Buttons auf dem Hauptfenster:- Neue Datenbank erstellen -> Wenn bereits eine Datenbank geladen ist, wird vorher nachgefragt, ob das wirklich passieren soll.
- Datenbank laden -> Es öffnet sich ein Dialogfenster, indem man eine Datenbankdatei auswählen kann, die dann geladen wird.
- Datenbank speichern -> Es öffnet sich ein Dialogfenster, indem man eine Datei angeben kann, unter der die Datenbank gespeichert wird (".lvdb" wird hinzugefügt).
- Neuen Eintrag erstellen -> öffnet ein Fenster, zur Eingabe eines neuen Datensatzes.
- Eintrag bearbeiten -> öffnet ein Fenster, in dem man den ersten markierten (bzw. den mit Doppelklick ausgewählten) Eintrag bearbeiten kann.
- Markierte Einträge löschen -> alle markierten Einträge werden, nach Rückfrage, aus der Datenbank gelöscht.
- Programm-Informationen -> öffnet ein Fenster mit den Programm-Informationen.
Außerdem gibt es die Suche, mit dem Suchbegriff-Eingabefeld und dem Lupen-Button.
Wobei es zwei Arten der Suche gibt:- Einmal die "Einzelsuche" (Aufruf ohne gedrückte Shift-Taste), hier wird der Suchbegriff im Listview einzeln angesteuert und der Suchtreffer markiert.
- Und zum Anderen die "Treffersuche" (Aufruf mit gedrückter Shift-Taste), hier wird ein extra Suche-Listview angezeigt, indem alle Suchtreffer aufgelistet sind (und nur diese).
Zurück zum normalen Daten-Listview kommt man, wenn man die Suche mit leerem Eingabefeld startet.
Im ZIP-Archiv (Anhang) findet ihr das komplette Script, sowie eine Beispiel-Datenbankdatei mit über 16.000 Datensätzen (die habe ich mit Zufallsdaten erstellt).
Die Datenbankdateien bekommen von dem Programm die Endung ".lvdb". Es handelt sich aber um reine Textdateien. Man kann sie also auch mit einem Editor öffnen.Lizenz:
Freeware! Das heißt, ich stelle euch das Script zur freien Verfügung. Ihr dürft es verwenden und verändern, wie ihr wollt. Auch das Infofenster dürft ihr beliebig anpassen.
Ein Hinweis auf mich als Autor der Vorlage wäre zwar schön, ist aber keine Bedingung.Update 31.05.2017 Version3.1:
- Fehler beim schliessen der Gruppe behoben.
- Beim aendern der Spaltenbreite des Listview wurde die neue Spaltenbreite erst beim beenden des Programms gespeichert.
- Beim beenden des Programms wurde für die Nachfrage noch eine MsgBox benutzt. Ich habe nun die Funktion "_ConfirmDelete" in "_Confirm" umbenannt und verwende sie für beide Nachfragen.
- Einige Kommentare hizugefügt/korrigiert.
Update 01.06.2017 Version3.2:
- Beim Listview $LVS_EX_DOUBLEBUFFER hinzugefügt. Damit reduziert sich das flackern beim Resizing.
- Bei dem Eingabefenster ist das erste Element nun ein Date-Control, so braucht man das eingegebene Datum nicht auf Gültigkeit überprüfen und es erleichert die Eingabe.
- Das zweite und dritte Input-Control habe ich mit $ES_NUMBER erweitert, weil man dort ja nur Zahlen eingeben soll.
- Beim begrenzen des Fensters auf ein Minimum werden nun die Systemwerte für den Fensterrahmen ausgelesen. Die sind ja bei den Windowsversionen unterschiedlich.
- Beim resize "_WM_SIZE" wird nun die Aufteilung der Statuszeile mehr zugunsten der linken Seite berücksichtigt.
- Die Funktion "_Confirm" wird nun auch beim neu erstellen der Datenbank benutzt.
-
Danke AspirinJunkie!
Ich habe die Datei mal in Post#1 eingefügt, sodass das Script wieder oben verfügbar ist.