RapidFire Button
-
- Beiträge: 234
- Registriert: 27.02.2007 10:54
- Wohnort: Germany
RapidFire Button
Hallo Leute,
Habt ihr eine Idee wie man die Maustaste so ansprechen kann das sie für einen in einer vorgeschriebenen Geschwindigkeit klickt wenn man sie gedrückt hällt. Und ja ich weiß das man so was auch per Macro lösen könnte aber würde so was gerne mal mit PureBasic versuchen vor allem da ich ja gerade wieder in PureBasic richtig loslegen möchte.
Ich hoffe ihr könnt mir dabei Helfen und Danke schon ein mal im voraus für die Hilfe.
Eine Möglichkeit wo man so ein Rapid-Fire Testen kann: *Link*
Habt ihr eine Idee wie man die Maustaste so ansprechen kann das sie für einen in einer vorgeschriebenen Geschwindigkeit klickt wenn man sie gedrückt hällt. Und ja ich weiß das man so was auch per Macro lösen könnte aber würde so was gerne mal mit PureBasic versuchen vor allem da ich ja gerade wieder in PureBasic richtig loslegen möchte.
Ich hoffe ihr könnt mir dabei Helfen und Danke schon ein mal im voraus für die Hilfe.
Eine Möglichkeit wo man so ein Rapid-Fire Testen kann: *Link*
Zuletzt geändert von Coder Pinhead am 07.05.2011 14:31, insgesamt 1-mal geändert.
Windows 8.1 x64 | PureBasic v5.x x86/x64
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Re: RapidFire Button
Code: Alles auswählen
OpenWindow(0, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
#TimeDifference = 200
Repeat
If GetAsyncKeyState_(#VK_LBUTTON)
If DownTime < ElapsedMilliseconds()-#TimeDifference
Debug "Feuer"
If Not DownTime
DownTime = ElapsedMilliseconds()
Else
DownTime + #TimeDifference
EndIf
EndIf
Else
DownTime = 0
EndIf
Until WindowEvent() = #PB_Event_CloseWindow
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 234
- Registriert: 27.02.2007 10:54
- Wohnort: Germany
Re: RapidFire Button
Danke, da lässt sich schon mal was daraus machen jetzt müsst ich nur noch wissen wie ich allgemein Fenster ansprechen kann oder ein gezieltes Fenster ansprechen könnte. 
Gebt mir mal ein Tipp wie man andere Fenster anspricht.

Gebt mir mal ein Tipp wie man andere Fenster anspricht.
Zuletzt geändert von Coder Pinhead am 16.05.2011 11:19, insgesamt 1-mal geändert.
Windows 8.1 x64 | PureBasic v5.x x86/x64
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
-
- Beiträge: 234
- Registriert: 27.02.2007 10:54
- Wohnort: Germany
Re: RapidFire Button
Keiner eine Idee wie man so was mit PureBasic richtig Lösen könnte? 
In AutoHotkey sehe so was Beispielsweise so aus:

In AutoHotkey sehe so was Beispielsweise so aus:
Code: Alles auswählen
LAlt::Suspend ;ALT Links Ein- und Ausschalter
LButton::
Loop
{SetMouseDelay 45 ;Klick Geschwindigkeit
Click
If (GetKeyState("LButton","P")=0) ;Linke Maustaste für RapidFire
Break
}
Windows 8.1 x64 | PureBasic v5.x x86/x64
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Re: RapidFire Button
Ziemlich sinnfrei, aber lustiger Weg zum Erlernen von Mauseingabesynthese! 
In Deiner Signatur steht, dass Du Anfänger bist, aber länger im Board als ich... Weiß Dich gerade nicht wirklich einzuschätzen...
Schau Dir mal Deinen (bzw. Stargates) Code genauer an: Der macht noch nichts, das ist nur die Taktung! Es reicht nicht <Debug "Feuer"> durch <Debug "RapidFire"> zu ersetzen.
Quellen zum Einarbeiten:
Wenn's für Windows ist geht's per API mit den "alten Funktionen" mouse_event_() für Mauseingabesynthese sowie (wenn schon dabei bist
) keybd_event_() für Tastatureingabesynthese.
Die zwei oben genannten API-Funktionen sind gut für den "Einstieg". Wenn Du ein wenig mit rumgespielt hast und begriffen hast, wie es funktioniert, dann kannst Du Dich an die "neue Funktion" SendInput_() ranwagen, welche sozusagen mouse_event_() und keybd_event_() vereint, d.h. Du kannst mit Ihr Maus- und Tastatureingabe synthetisieren (+ Hardwareeingabe, wo ich aber keinen Plan von habe
). Der Vorteil ist, dass Du eine Reihe von Events mit einem Aufruf absetzten kannst.
Grundlegendes:
) bereit, damit Du im Notfall alle Tasten per Software "loslassen" kannst (Meistens wird wegen dem Doppelklick beim starten eine Taste mehr als nötig gelöst: #VK_LBUTTON; also lass Dich davon nicht irriteren):
Wenn Du später das ganze nur für ein bestimmtes Fenster "aktivieren" möchtest weiß ich das jetzt auch nicht so aus dem Stehgreif. Mit GetForegroundWindow_() bekommst Du das Handle des aktuell aktiven Fensters. Dann halt noch z.B. den Fenter-Titel ermitteln um zu schauen, ob's sich um Dein gewünschtes Zielfenster handelt. Musst Dich mal durch dir Window-APIs durchwühlen (...also Window... nicht Windows
).

In Deiner Signatur steht, dass Du Anfänger bist, aber länger im Board als ich... Weiß Dich gerade nicht wirklich einzuschätzen...

Schau Dir mal Deinen (bzw. Stargates) Code genauer an: Der macht noch nichts, das ist nur die Taktung! Es reicht nicht <Debug "Feuer"> durch <Debug "RapidFire"> zu ersetzen.

Quellen zum Einarbeiten:
Wenn's für Windows ist geht's per API mit den "alten Funktionen" mouse_event_() für Mauseingabesynthese sowie (wenn schon dabei bist

Die zwei oben genannten API-Funktionen sind gut für den "Einstieg". Wenn Du ein wenig mit rumgespielt hast und begriffen hast, wie es funktioniert, dann kannst Du Dich an die "neue Funktion" SendInput_() ranwagen, welche sozusagen mouse_event_() und keybd_event_() vereint, d.h. Du kannst mit Ihr Maus- und Tastatureingabe synthetisieren (+ Hardwareeingabe, wo ich aber keinen Plan von habe

Grundlegendes:
- Maus- wie Keyboardtasten benötigen für eine Betätigung immer ZWEI Anweisungen, "Taste drücken" und "Taste loslassen".
- Der Effekt ist der gleiche wie bei "echten" Eingaben! Du kannst damit ein ziemliches Tohuvabohu veranstanten!
- Admin-Manifest einbinden! User dürfte nicht genügen! (Bin zwar "XPler" und weiß es somit nicht aus erfahrung, aber wenn User reichen würde wäre es echt ein Witz...)

Code: Alles auswählen
If OpenConsole()
Dim KeyInput.INPUT($FF)
For i = $00 To $FF
If GetAsyncKeyState_(i) & ~1
PrintN("Löse VirtualKey: "+Str(i)+" ($"+Hex(i)+")")
KeyInput(Anzahl)\type = #INPUT_KEYBOARD
KeyInput(Anzahl)\ki\wVk = i
KeyInput(Anzahl)\ki\dwFlags = #KEYEVENTF_EXTENDEDKEY|#KEYEVENTF_KEYUP
Anzahl + 1
EndIf
Next i
PrintN("")
PrintN("Fertig! Es wurden "+Str(SendInput_(Anzahl, @KeyInput(), SizeOf(INPUT)))+" von "+Str(Anzahl)+" gedrückten Tasten gelöst.")
Input()
EndIf

PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
-
- Beiträge: 234
- Registriert: 27.02.2007 10:54
- Wohnort: Germany
Re: RapidFire Button
War für eine lange Zeit nicht mehr am Computer aus diversen gründen. Damals wo ich mich Registriert hatte war ich noch Blutiger Basic angefangener. Bin dementsprechend da ich längere Zeit inaktive war noch auf meinem alten Stand bzw. bin etwas eingerostet. Werde mir die Befehle die du geschrieben hast mal anschauen und mal schauen was ich damit anfangen kannRegenduft hat geschrieben:In Deiner Signatur steht, dass Du Anfänger bist, aber länger im Board als ich... Weiß Dich gerade nicht wirklich einzuschätzen...

Windows 8.1 x64 | PureBasic v5.x x86/x64
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Re: RapidFire Button
Brauchst Dich nicht "rechtfertigen". Will nur (z.B.) folgendes vermeiden:
Regenduft: "API API API API API API API API API"
Coder Pinhead: "Aha..."
Regenduft: "Structure Structure Structure Structure Structure Structure"
Coder Pinhead: "Oho..."
Regenduft: "Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger"
Coder Pinhead: "Mhm..."
Regenduft: "Alles Roger?"
Coder Pinhead: "Was ist denn ein String?"
Regenduft:

(Nicht angreifend sondern überspitzt lustig gemeint
)
Regenduft: "API API API API API API API API API"
Coder Pinhead: "Aha..."
Regenduft: "Structure Structure Structure Structure Structure Structure"
Coder Pinhead: "Oho..."
Regenduft: "Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger Zeiger"
Coder Pinhead: "Mhm..."
Regenduft: "Alles Roger?"
Coder Pinhead: "Was ist denn ein String?"
Regenduft:



(Nicht angreifend sondern überspitzt lustig gemeint

PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
-
- Beiträge: 234
- Registriert: 27.02.2007 10:54
- Wohnort: Germany
Re: RapidFire Button
Habe mich nun etwas mit den WinAPI's beschäftigt und Krieg es trotzdem nicht gebacken.
Also ich habe das Programm zwar schon soweit das es z.B. wenn ich auf mein Startmenü oder auf irgend etwas in der Task-leiste schnell klickt und dort alles auf bzw. zuklappt. Nur wären da noch zwei Sachen die für mich ungelöst sind und zwar Funktioniert mein Programm z.B. nicht in Spielen wie z.B. King of Buttons und es lastet mein System zu 85 - 100 Prozent aus. Kann nicht wer ein kleines Funktionierendes Beispiel schreiben was ich mir anschauen kann damit ich die Funktionsweise verstehe und das endlich hinkriege
.
Also ich habe das Programm zwar schon soweit das es z.B. wenn ich auf mein Startmenü oder auf irgend etwas in der Task-leiste schnell klickt und dort alles auf bzw. zuklappt. Nur wären da noch zwei Sachen die für mich ungelöst sind und zwar Funktioniert mein Programm z.B. nicht in Spielen wie z.B. King of Buttons und es lastet mein System zu 85 - 100 Prozent aus. Kann nicht wer ein kleines Funktionierendes Beispiel schreiben was ich mir anschauen kann damit ich die Funktionsweise verstehe und das endlich hinkriege

Windows 8.1 x64 | PureBasic v5.x x86/x64
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Re: RapidFire Button
Poste doch einfach mal Deinen Code, dann weißt Du nicht nur wie es funktioniert, sondern auch warum es bei Dir nicht funktioniert hat. Brauch Dir auch nicht peinlich sein, denn jeder hier war mal Anfänger! 
Zum Verständnis: Während einer Delay-Zeit wird dem Prozess vom Betriebssystem keine "Rechenzeit" zur Verfügung gestellt. Diese Zeit steht dann anderen Prozessen zur Verfügung. Wenn diese anderen Przozesse diese Zeit nicht "wollen", dann werden sie dem "Leerlaufprozess" geschenkt, sprich garnix gemacht (auch "NOP" oder "NOOP" wie "No Operation").
WaitWindowEvent() hat (sozusagen) ein eingebautes Delay(). Das Betriebssystem weist dem Prozess solange keine Rechenzeit zu, bis ein Event auftritt.
Beispiele:
(alle Codes setzen vorraus, das bereits ein Fenster geöffnet wurde. Der Übersichlichkeit zu liebe habe ich das in den Code-Schnippseln hier weggelassen.)
1. KEIN WaitWindowEvent() und KEIN Delay() = 100% Auslastung:
2. WaitWindowEvent() und KEIN Delay() < 100% Auslastung:
3. KEIN WaitWindowEvent() ABER Delay() < 100% Auslastung:
Beim dritten Beispiel siehtst Du, dass ich das "Delay(10)" nur aufrufe, wenn "WinEvnt" gleich 0 ist. Das hat den Vorteil, das wenn viele Events zum Verarbeiten in der Event-Queue (= Warteschlange) stehen, diese ruck-zuck hintereinander ohne Wartezeit zwischen den einzelnen Events abgeabeitet werden. Würe ich das nicht machen würden z.B. 100 direkt aufeinanderfolgende Events eine ganze Sekunde zur Abarbeitung benötigen:

Das geschieht immer, wenn man im Programm entweder mit WindowEvent() anstatt WaitWindowEvent() arbeitet und/oder kein Delay() pro Schleifendurchlauf drin hat.Coder Pinhead hat geschrieben:Es lastet mein System zu 85 - 100 Prozent aus.
Zum Verständnis: Während einer Delay-Zeit wird dem Prozess vom Betriebssystem keine "Rechenzeit" zur Verfügung gestellt. Diese Zeit steht dann anderen Prozessen zur Verfügung. Wenn diese anderen Przozesse diese Zeit nicht "wollen", dann werden sie dem "Leerlaufprozess" geschenkt, sprich garnix gemacht (auch "NOP" oder "NOOP" wie "No Operation").
WaitWindowEvent() hat (sozusagen) ein eingebautes Delay(). Das Betriebssystem weist dem Prozess solange keine Rechenzeit zu, bis ein Event auftritt.
Beispiele:
(alle Codes setzen vorraus, das bereits ein Fenster geöffnet wurde. Der Übersichlichkeit zu liebe habe ich das in den Code-Schnippseln hier weggelassen.)
1. KEIN WaitWindowEvent() und KEIN Delay() = 100% Auslastung:
Code: Alles auswählen
Repeat
WinEvnt = WindowEvent()
If WinEvnt
; ... Event-Auswertung ...
EndIf
Until WinEvnt = #PB_Event_CloseWindow
Code: Alles auswählen
Repeat
WinEvnt = WaitWindowEvent() ; <- Solange NOP, bis Event auftritt
If WinEvnt
; ... Event-Auswertung ...
EndIf
Until WinEvnt = #PB_Event_CloseWindow
Code: Alles auswählen
Repeat
WinEvnt = WindowEvent()
If WinEvnt
; ... Event-Auswertung ...
Else
Delay(10) ; <- Wenn KEIN Event, dann 10 ms NOP.
EndIf
Until WinEvnt = #PB_Event_CloseWindow
Code: Alles auswählen
Repeat
WinEvnt = WindowEvent()
; ... Event-Auswertung ...
Delay(10) ; <- Macht das Programm bei vielen Events träge!
Until WinEvnt = #PB_Event_CloseWindow
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)