 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: Sa Aug 18, 2007 11:49 pm Titel: [Threadsplit] Doppelklick |
|
|
Da ich mich an die klaren regeln und kategorie halten hab ich hier im diesen thread: http://de.autohotkey.com/forum/viewtopic.php?t=1787 es hier hin geleitet.
| AGU hat Folgendes geschrieben: | Die Schleife ist absolut sinnlos. Wie Gapa schon gezeigt hat, ist MouseClick der richtige Befehl.
MouseClick
Per Parameter ClickCount kann man die Anzahl der Klicks genau festlegen.
Wozu also der überflüssige Loop? |
Ich entnehme: Die Schleife ist absolut sinnlos. Wie Gapa schon gezeigt hat, ist MouseClick der richtige Befehl.
Die schleife ist sinnlos.
Das kann nicht sein: Der Loop wiederholt das was vorgegeben ist, egal was. Es ist eine feste regel ohne ausnahmen. Wenn ich in einer schleife oder einen Loop(schleife und loop ist das selbe nur anderes wort) einen mausklick habe und es wird zwei mal ausgeführt führt es auch zwei mal aus.
| Code: | Loop, 2 ; führt das zwischen den {} zwei mal aus
{
MouseClick, left, 52, 95 ; die sache die ausgeführt wird
} |
Man kann auch alternativ es so ausführen:
| Code: | MouseClick, left, 52, 95, 2
|
Das bedeutet es wird auf die koordinaten 52x95 geklickt und dies zwei mal weil, am ende eine zwei steht. Es macht keinen unterschied(bis auf die schreibweise) gegenüber zum loop. Das resultat ist genau das selbe.
Daraufhin hab ich AGU(AGermanUser) klargemacht das es keinen unterschied ist und das der fehler von meiner sicht aus auf seiner seite liegt.
| AGU hat Folgendes geschrieben: | Gut, das hätte ich wohl anders formulieren müssen. Wenn du den kastrierten MouseClick Befehl ohne ClickCount verwendest, brauchst du selbstverständlich deinen Loop.
Wenn du allerdings ClickCount verwendest, ginge das, wie Gapa schon gezeigt hat, in einer einzigen Codezeile. |
Deine ausdrucksweise ist schon sehr komsich das du MouseClick als kastriert bezeichnest. Mouse = Maus(tier) oder eingabegerät(hardware) via computer. Die einen schneiden das kabel ab, die anderen die....
Mit und ohne ClickCount... das hättest du am besten im vorherigen post beschreiben müssen, aber trozdem ist es nicht ganz logisch zu meiner oben aussage. Das macht irgendwie keinen so richitgen sinn!!
Ich finde der fehler liegt auf deiner seite!
Ich hab diesen thread hier weitergeführt damit kein gespamme und nicht von thema abgelankt wird! Dazu will ich mich an die klaren regeln, strukturen, katigorien, themenbereiche halten!
msgbox  |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Aug 19, 2007 12:47 am Titel: |
|
|
Zuerst mal vielen Dank, das du das Thema hier im Smalltalkforum weiterführst. Sogar an das [Threadsplit] hast du gedacht.
| Zitat: | | Das kann nicht sein: Der Loop wiederholt das was vorgegeben ist, egal was. | Ich will hier gern einräumen, das es falsch war von "sinnlos" zu reden. Überflüssig wäre wohl besser gewesen.
| Zitat: | | Es macht keinen unterschied(bis auf die schreibweise) gegenüber zum loop. Das resultat ist genau das selbe. | Einen Unterschied gibt es schon. Der eine Code hat vier Zeilen, der andere nur eine.
Ziel sollte doch eigentlich immer der performanteste Code sein, oder nicht? Ansonsten könnten wir statt
ja auch
| Code: | Loop, 6
{
If A_Index = 1
Var = m
If A_Index = 2
Var = %Var%s
If A_Index = 3
Var = %Var%g
If A_Index = 4
Var = %Var%b
If A_Index = 5
Var = %Var%o
If A_Index = 6
Var = %Var%x
} | schreiben. Das Ergebnis ist in beiden Fällen das gleiche. Verstehst du was ich meine?
In deinem speziellen Code ist der Loop zwar nicht sinnlos, aber überflüssig. Überflüssig, weil der MouseClick Befehl die Funktionalität bereits mitbringt.
Deswegen sprach ich auch vom kastrierten MouseClick Befehl. Du kastrierst den Befehl um ClickCount, und rüstest dieses Merkmal anschließend per Loop wieder nach. Das ist in meinen Augen Flickwerk.
Natürlich ist der Loop in deinem Beispiel nicht sinnlos. Der muss sogar dastehen, weil du ja auf ClickCount verzichtest. Wenn das mißverständlich rausgekommen ist, will ich mich gern dafür entschuldigen.
Hast du nach Gapa's Einzeiler übrigens mal die Doku zum MouseClick Befehl angeschaut? Davon bin ich bei meiner Antwort nämlich ausgegangen. Ich mache sowas immer, wenn ich den Befehl nicht oft verwende.
Dann wäre dir nämlich schon vor deinem Posting aufgefallen, das der Loop gar nicht notwendig ist.
Ich hoffe damit ist das ausgeräumt.
P.S. Ein Moderationsjob macht übrigens noch nicht allwissend und unfehlbar. Du solltest mir ruhig auch hin und wieder einen Fehler zugestehen.
Sei also nicht überrascht, wenn ich hin und wieder einen fabriziere.
__________________________
Gruß AGU |
|
| Nach oben |
|
 |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: So Aug 19, 2007 2:18 pm Titel: |
|
|
Wie du schon beschrieben hast macht es keinen unterschied zwischen:
| Code: | Loop, 3 ; darf auch mehr sein
{
if A_Index = 1
Var = A
if A_Index = 2
Var = %Var%G
if A_Index = 3
Var = %Var%U
}
msgbox, %Var% |
und
| Code: | Var = AGU
msgbox, %Var% |
Aber der sinn und zweck ist der selbe! Ich kann einen mausklick so schreiben:
| Code: | | MouseClick, left, 52, 95, 2 |
oder auch so
| Code: | Loop, 2
{
MouseClick, left, 52, 95, 1
} |
oder auch so
| Code: | Loop, 3
{
MouseClick, left, 52, 95, 4
} |
Bis auf die schreibweise macht es keinen unterschied
Schaut euch doch mal den ersten post von the_boxer an:
| the_boxer hat Folgendes geschrieben: | Hallo,
wie programmiere ich einen Doppelklick?
Habe schon viele Sachen ausprobiert, aber
nichts hat funktioniert. z.B.:
| Code: | Loop, 2
{
Send, {LButton}
}
|
klappt nicht!
Wieß jemand wie es geht?
Gruß,
the_boxer |
Er hats auch mit Loop gemacht, aber mit einen kleiner fehler...
Daraufhin hat Gapa es so gelöst:
| Zitat: | | Code: | | MouseClick, left, 52, 95, 2 |
|
Anschließend habe ich es korrigiert:
| Zitat: | | Code: | Loop, 2
{
MouseClick, left, 52, 95 ; man KANN ", 1" hinschreiben
} |
|
Ich habe genau die fragen von the_boxer gelöst wo er auch ein loop verwendet hat. Nur seine fehler hab ich überarbeitet. Gapa hat eine alternative gemacht.
Daraufhin hat AGU....
Wo liegt der fehler GENAU bei mir? Ich hab genau das gemacht was the_boxer falsch gemacht hat. Mehr nicht!
Das von AGU mit den Var finde ich umnötig(aber auch ein gutes beispiel) da es nicht so "richitg" war...
Jetzt will ichs genau wissen!
msgbox |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Aug 19, 2007 2:43 pm Titel: |
|
|
Ich will dir das gerne mal aus meiner Sicht schildern.
the_boxer hat einen Loop genommen, weil er es wahrscheinlich nicht besser wusste. Ich gehe mal davon aus, das er noch AHK Anfänger ist.
Daraufhin beschreibt Gapa, wie es mit einer Zeile geht. Damit war the_boxer doch gut geholfen. An seiner Stelle hätte ich dann einen Blick in die Doku zu MouseClick geworfen und er hätte gesehen, das der Befehl genau das ist, was er gesucht hat.
Hier bin ich dann irrtümlich davon ausgegangen, du hättest ebenfalls die Doku zum MouseClick Befehl gelesen, und würdest erkennen, das es die beste Lösung ist.
Stattdessen ziehst du es vor, the_boxers (ich will nicht sagen falschen) nicht optimalen Code einfach zu verbessern, anstatt ihm gleich die beste Lösung zu liefern.
| Zitat: | | Bis auf die schreibweise macht es keinen unterschied | Doch, in der Performance. Vermute ich zumindest. In deinem Code müssen zwei Befehle abgearbeitet werden. In Gapas Fall nur einer.
Das mag in dem Fall vielleicht nicht viel ausmachen, aber wie wäre es bei 100 Klicks? In deinem Code müsste erst der Loop ausgeführt werden (Schleifenvariable inkrementiert, ...), dann wird der MouseClick Befehl ausgeführt, dann wieder Loop, ...
Bei Gapa wird stets nur der MouseClick Befehl ausgeführt.
Bei langen Schleifen gehe ich schon davon aus, das es da einen Performanceunterschied gibt.
Es geht darum, nicht nur den bestehenden Code zu verbessern, sondern darüber hinaus gleich die beste Lösung zu posten. Ansonsten verwendet the_boxer in Zukunft stets einen Loop, um einen Doppelklick zu machen anstatt von Anfang an gleich direkt den MouseClick Befehl zu verwenden.
| Zitat: | | Wo liegt der fehler GENAU bei mir? | Hören wir doch einfach auf, hier von Fehler zu reden. Sagen wir einfach so. Deine Lösung ist nicht falsch, liefert aber nur 80%. Du verbesserst the_boxers Code sozusagen von schlecht auf mittelmäßig. Er funktioniert, es ginge aber besser.
_______________________
Gruß AGU |
|
| Nach oben |
|
 |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: So Aug 19, 2007 2:57 pm Titel: |
|
|
Ich will einfach nicht verstehen wieso du deinen fehler nicht einsiehst! Ich erkläre es dir schon zum zweiten mal, aber ich hab das gefühl das du es nicht verstehst oder nicht verstanden hast.
Ich hab the_boxers script nur verbessert, Gapa hat eine alternative gezeigt, du hast es....
Mit der performance hägt es doch nicht ab?! Wie wäre es mit #NoEnv oder SetBatchLines -1 oder ähnliches. Soll ich dir noch berechnungen aufstellen und dir die millisekunden, Grafiken, Sinuskurven, Hz ... aufstellen?
Ich finde ich hab aus meiner sicht keinen fehler gemacht. Wenn du es von meiner sicht siehst wird du es auch merken. Du hast mit deinen post nur für verwirrung gesorgt und anschließend nicht zugegeben das du den fehler gemacht hast.
Zu Gapas script habe finde ich eine gute alternative, aber trozdem nicht wie the_boxer es haben wollte(warscheinlich). the_boxer hat es mit einen Loop gemacht. Ich hab es anschliesend auch mit einen loop weitergeführt und die fehler korrigiert.
Und du AGU redest von Performance und Var´s....
 |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Aug 19, 2007 3:00 pm Titel: |
|
|
Du hast Recht und ich meine Ruh.
_____________________
Gruß AGU |
|
| Nach oben |
|
 |
BoBo¨ Gast
|
Verfasst am: So Aug 19, 2007 3:38 pm Titel: |
|
|
Hi hi  |
|
| Nach oben |
|
 |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: So Aug 19, 2007 3:59 pm Titel: |
|
|
| AGU hat Folgendes geschrieben: | Du hast Recht und ich meine Ruh.  |
Endlich
@BoBo: Was zu kommentieren oder wieder mal langeweile ? |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Aug 19, 2007 5:15 pm Titel: |
|
|
Auch wenn es Perlen vor die Säue geworfen ist, habe ich mal einen Performancevergleich der beiden Skripte gemacht. Hier das Performancetestkskript:
| Code: | StartTime := A_TickCount
; Hier steht der zu testende Code
EndTime := A_TickCount
ElapsedSeconds := (EndTime - StartTime)/1000.0
Msgbox, Skript benötigte %ElapsedSeconds% Sekunden |
Wenn ich dein Skript teste
| Code: | StartTime := A_TickCount
Loop, 2 ; führt das zwischen den {} zwei mal aus
{
MouseClick, left, 500, 500 ; die sache die ausgeführt wird
}
EndTime := A_TickCount
ElapsedSeconds := (EndTime - StartTime)/1000.0
Msgbox, Skript benötigte %ElapsedSeconds% Sekunden | komme ich bei meinem System auf Werte von 0.16 - 0.18 Sekunden.
Mit Gapas Code
| Code: | StartTime := A_TickCount
MouseClick, left, 500, 500, 2
EndTime := A_TickCount
ElapsedSeconds := (EndTime - StartTime)/1000.0
Msgbox, Skript benötigte %ElapsedSeconds% Sekunden | komme ich auf Zeiten von 0.14 - 0.16 Sekunden.
Zusammenfassung:
| Zitat: | msgbox: 0.16 - 0.18 Sekunden
Gapa: 0.14 - 0.16 Sekunden. |
Selbst bei nur zwei Schleifendurchläufen ergibt das auf meinem System schon einen Performanceunterschied. Würde wir theoretisch von einer längeren Schleife ausgehen (z.B. 100 Klicks) sähe das Ergebnis folgendermaßen aus:
| Zitat: | msgbox: 3.08 - 3.21 Sekunden
Gapa: 2.01 - 2.11 Sekunden |
Hast du jetzt begriffen, was ich mit Performanceunterschied meine? Da nützt dir dein SetBatchLines und #NoEnv nichts.
______________________
Gruß AGU |
|
| Nach oben |
|
 |
BoBo¨ Gast
|
Verfasst am: So Aug 19, 2007 5:28 pm Titel: |
|
|
| Zitat: | | @BoBo: Was zu kommentieren oder wieder mal langeweile ? | Deine Beratungsresistenz scheint doch ausreichend resitent zu sein - damit stehen uns sicher noch viele unterhaltsame (philosophische) Stunden bevor ...  |
|
| Nach oben |
|
 |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: So Aug 19, 2007 5:30 pm Titel: |
|
|
| AGU hat Folgendes geschrieben: | | Da nützt dir dein SetBatchLines und #NoEnv nichts. |
SetBatchLines bestimmt die gewindigkeit wie schnell es laufen soll. Es hägt mit der bewegung zusammen! Das bedeutet die maus bewegt sich auf die vorgegeben koordinaten. Um es zu beschleinigen kann man hier das verwenden:
| Code: | SetMouseDelay, 0
#Noenv
StartTime := A_TickCount
Loop, 2 ; führt das zwischen den {} zwei mal aus
{
MouseClick, left, 500, 500 ; die sache die ausgeführt wird
}
EndTime := A_TickCount
ElapsedSeconds := (EndTime - StartTime)/1000.0
Msgbox, Skript benötigte %ElapsedSeconds% Sekunden |
Aber du lässt wirklich nicht locker
Edit:
@BoBo: Kannst du das mal auf normalen niveau sagen?
Zuletzt bearbeitet von msgbox am So Aug 19, 2007 5:32 pm, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
BoBo¨ Gast
|
Verfasst am: So Aug 19, 2007 5:31 pm Titel: |
|
|
Nachreichung: resistent  |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: So Aug 19, 2007 5:37 pm Titel: |
|
|
Selbst bei dieser Optimierung hat dein Code eine schlechtere Performance als Gapas Code.
msgbox: 0.05 - 0.07 Sekunden
Gapa: 0.04 - 0.05 Sekunden.
Der Performanceverlust steckt schon im Design des Codes. Egal mit was du die Skriptabarbeitung beschleunigst, bei dir müssen zwei Befehle abgearbeitet werden.
______________________
Gruß AGU |
|
| Nach oben |
|
 |
msgbox
Anmeldedatum: 05.05.2007 Beiträge: 727 Wohnort: C:\
|
Verfasst am: So Aug 19, 2007 5:49 pm Titel: |
|
|
| AGU hat Folgendes geschrieben: | msgbox: 0.05 - 0.07 Sekunden
Gapa: 0.04 - 0.05 Sekunden. |
Da irrst du dich! Bei mir kommt immer 0.00... raus! Ich weis nicht wie alt dein pc ist, aber dem ist nicht so |
|
| Nach oben |
|
 |
BoBo¨ Gast
|
Verfasst am: So Aug 19, 2007 6:06 pm Titel: |
|
|
| Zitat: | | @BoBo: Kannst du das mal auf normalen niveau sagen? | "Da sich deine Bereitschaft einen Rat anzunehmen offenbar in Grenzen hält, stehen uns sicher noch viele unterhaltsame (philosophische) Stunden bevor ...". Gut so? | Zitat: | | Bei mir kommt immer 0.00... raus! Ich weis nicht wie alt dein pc ist, aber dem ist nicht so. | Tja, AGU. Jetzt wird dein guter Rat auch noch teuer.
PS. bei dem am Flughafen stand auch sowas wie 00 drauf, ich weiss nicht wie alt dein Klo ist, aber dem ist so!!  |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|