[autoit]
If Not $clip = $clip_old Then
[/autoit]
Entweder schreibst du:
If Not ($clip = $clip_old) Then
[/autoit]
oder gleich
If $clip <> $clip_old Then
[/autoit]If Not $clip = $clip_old Then
[/autoit]
Entweder schreibst du:
If Not ($clip = $clip_old) Then
[/autoit]
oder gleich
If $clip <> $clip_old Then
[/autoit]Das ist ganz schön Kompliziert!
Ist doch jetzt nicht mehr kompliziert für dich. Für jedes Bild ein Array mit den Positionsdaten erstellen und die Funktion mit den Arrays aufrufen. Gibt es Überschneidungen, wird TRUE zurückgegeben, sonst FALSE.
Hier, kannst auch diese Funktion nutzen:
[autoit]Local $pic1[4] = [0,0,100,50] ; x,y,Breite,Höhe
Local $pic2[4] = [101,51,50,70]
ConsoleWrite(_PosCompare($pic1,$pic2) & @CRLF)
[/autoit][autoit][/autoit][autoit]Func _PosCompare(ByRef $a1, ByRef $a2) ; by BugFix
Local $oComp = ObjCreate("System.Collections.ArrayList")
For $i = $a1[0] To $a1[0] + $a1[2]
$oComp.Add($i)
Next
For $i = $a2[0] To $a2[0] + $a2[2]
If $oComp.Contains($i) Then Return True
Next
$oComp.Clear
For $i = $a1[1] To $a1[1] + $a1[3]
$oComp.Add($i)
Next
For $i = $a2[1] To $a2[1] + $a2[3]
If $oComp.Contains($i) Then Return True
Next
Return False
EndFunc ;==>_PosCompare
Beim Kompilieren in SciTE kannst du doch den Pfad für ein eigenes Icon angeben.
Oder du schreibst die Direktive selbst an den Skriptanfang:
#AutoIt3Wrapper_icon=..\..\Eigene Bilder\ICONS\MeinIcon.ico
[/autoit]Ist doch reines Rechnen, hier mit Tweakys Bsp.:
belegter Bereich Bild 1:
X >>> 20 - 120 (x1Start=20, x1Ende=120)
Y >>> 50 - 120
belegter Bereich Bild 2:
X >>> 0 - 100 (x2Start=0, x2Ende=100)
Y >>> 0 - 70
Für X-Koordinaten
Wenn (x2Start >= x1Start UND x2Start <= x1Ende) ODER (x2Ende >= x1Start UND x2Ende <= x1Ende) DANN Kollision
Sind Complierte Autoit Scripte nicht immernoch Scripte???
Streng genommen ja, da sie nur zur Laufzeit interpretiert werden. Oscar wollte aber zum Ausdruck bringen, dass wir hier die Source unserer Skripte zeigen, damit wir alle unseren Horizont erweitern können.
Denn schließlich geht es uns doch darum (zumindest den meisten hoffe ich) eigene Projekte auch unter Einbeziehung bereits erstellter Module anderer User (wozu Fahrrad neu erfinden?) optimal umzusetzen. Dass fremde Skripte auch als solche kenntlich gemacht werden, ist ja wohl eine Selbstverständlichkeit.
Wer seine Source nicht offenlegen möchte, braucht natürlich seine Skripte nicht zu posten. Dann fehlt ihm aber auch das Feedback zu seinem Werk, da außer zur Funktionalität niemand etwas sagen kann. Oder aber es reagiert niemand, da nur wenige Russisch Roulett spielen und fremde EXE-Files ausführen. ![]()
Da kann man aber noch kürzen ![]()
#include <Inet.au3>
$time = StringRegExp(_INetGetSource("http://www.uhrzeit.org/atomuhr.html"), '(?:\s*\<div id="anzeige"\>)(\d{2}:\d{2}:\d{2})', 3)
MsgBox(0, 'Aktuelle Zeit', $time[0])
Deine Funktion entfernt aber nicht nur Kommentare, sondern einfach alles was nach einem Semikolon kommt.
Wenn ich z.B. eine DLL-Struktur erstelle, ist das hinterher nur noch Schrott:
; vorher:
$struc = "int var1;ubyte var2;uint var3;char var4[128]"
; hinterher:
$struc = "int var1
Hallo BugFix,
für die _SQLite_EXEC brauchst Du eigentlich keine @error-Abfrage.
Die steht doch schon in der Funktion _SQLITE_EXEC selbst drin, oder?
Ja, du hast recht. Ich könnte statt 'If $SQLITE_OK <> _SQLite_Exec...' direkt 'Return _SQLite_Exec...' verwenden.
Da meist mehr als eine Fehlerabfrage in Funktionen stattfindet, habe ich mir angewöhnt Fehler+Fehlernummer zurückzugeben. Ist in diesem Fall tatsächlich nicht notwendig, da nur ein einziger Fehlerfall auftreten kann.
Danke für's aufmerksame Lesen. ![]()
Noch eine Zusatzfunktion zum Ermitteln aller erstellten Laufwerke mit Lw-Buchstaben und zugehörigem Pfad. ==> s. Post 1
An alle Streithähne: Ich bitte um Mäßigung
- OK ?
Zerstört nicht den Geist der Weihnacht, den wir mühevoll versucht haben einzufangen ![]()
MsgBox(0, 'Antwort', InputBox('Frage', 'Sag was', 'blabla') )
[/autoit]Mit Standardaufrufen wird man vermutlich nicht weit kommen. Schau mal ob die Treiber-DLL zur Maus vom Hersteller dokumentiert ist. Dann kann man evtl. per DllCall darauf zugreifen.
BugFix, mir ist gerade noch aufgefallen, dass man zum Löschen auch den Zielpfad angeben muss.
Danke für den Hinweis. Habe jetzt eine Erweiterung eingefügt, dass der zugehörige Pfad selbständig ermittelt wird. Es braucht also nur noch der Laufwerksbuchsstabe angegeben werden. (s. Post1)
FirePanther:
Danke für die Info, dadurch habe ich bemerkt, dass man mit FileExist('Drive:') keine LEEREN CD/DVD-Lw auf Existenz abfragen kann. deshalb wurde deines nicht erkannt.
Ich habe die Abfrageroutine jetzt geändert, und somit sollte dein Problem gelöst sein. Korrektur s. 1. Post.
Zitat von FirePanthergibts ne möglichkeit sowas dauerhaft zu erstellen? virtuelle laufwerke eben
Der einfachste Weg: Du schreibst den Aufruf zum Erstellen des Lw in ein Autostart-Skript.
Schau dir mal StdoutRead() an.
da ich letztens in der schule rekursion behandelt habe, dacht ich mir ich bau es mal ein. funktioniert ja auch, aber wie ihr auf die 100% cpu auslastung kommt weiß ich nicht^^
Nichts gegen Rekursion, aber sie muß auch beendet werden. Ich sehe hier keinen Endpunkt, daher gehe ich davon aus dass die Funktion totläuft und da die Anzahl der möglichen Rekursionen nicht unendlich ist, ist irgendwann dein Speicher vollgemüllt und die CPU-Last geht auf 100.
Hier mal dein Programmablauf vom ersten geposteten Skript für die entsprechende Stelle als PseudoCode:
...
wenn Msg=$Start dann
Aufruf readini()
Aufruf go()
Aufruf sendini()
mehrere CtrlSend
erneuter Aufruf sendini() ==> gefangen in endlosem sendini()
erneuter Aufruf go() ==> gar nicht mehr möglich wegen sendini()
würde rekursiver Aufruf erfolgreich, würde wieder sendini() gestartet
Erinnert mich an: Und täglich grüßt das Murmeltier
- oder liege ich falsch mit meiner Synthese?
Welchen Sinn hat diese Rekursion?
[autoit]Func go()
sendini()
go()
EndFunc
So wie ich das sehe, löst du damit eine 100%-ige CPU-Last aus und schreibst pausenlos in die INI. Zumal du in der Func sendini wiederum eine Rekursion hast.
Sowas ist ganz nützlich, wenn irgendein Programm 'darauf besteht' Daten von Laufwerk A: einzulesen. Solche Scherze gibt es nach wie vor, nur haben die meisten Laptops und PC inzwischen kein Disketten-Lw mehr ![]()
Das kann man auch dauerhaft mit dem DOS-Befehl SUBST [Lw:] [Pfad] erstellen. Allerdings ist das Löschen dieser Verknüpfung laut Syntaxbeschreibung mit SUBST [Lw:] /D möglich - in der Praxis hat mir aber bisher jeder PC gesagt, dass er den Schalter /D nicht kennt. ![]()