[B3D,B+] KeyDown und MouseDown ohne Dll simulieren

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Der Eisvogel

Betreff: [B3D,B+] KeyDown und MouseDown ohne Dll simulieren

BeitragDo, Mai 15, 2008 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
An alle, bei denen das hier nicht funktioniert, wie es bei mir der Fall ist.
Ich habe diese Funktion für mein jetztiges Projekt gebraucht, und habe mich sehr geärgert, dass das mit der Dll-Funktion bei mir nicht funktioniert.
Deswegen habe ich mir die Zeit genommen, mir selber eine solche Funktion zu schreiben. Da hab ich mir gedacht ihr könntet sie clt. auch gebrauchen.
Ihr müsst nur Die Befehle:
Code: [AUSKLAPPEN]
KeyHit(code)
KeyDown(code)
MouseHit(code)
MouseDown(code)

gegen diese eintauschen:
Code: [AUSKLAPPEN]
KeyHitEx(code)
KeyDownEx(code)
MouseHitEx(code)
MouseDownEx(code)

Wenn ihr die Befehle eingesetzt habt, ist die Tastatur immernoch aktiv.

Jetzt wird es Zeit euch die Funktionen zu geben. Bitte:
Code: [AUSKLAPPEN]
Dim keys(237)
Dim mouse(3)

Function KeyHitEx(code)
If code>237 Then code=237
If keys(code)=1 Then
   keys(code)=2
   Return True
Else
   Return KeyHit(code)
EndIf
End Function

Function KeyDownEx(code)
If code>237 Then code=237
If keys(code)=1 Or keys(code)=2 Then
   Return True
Else
   Return KeyDown(code)
EndIf
End Function

Function PressKey(code,down)
If code>237 Then code=237
If down=True Then
   keys(code)=True
Else
   keys(code)=False
EndIf
End Function


Function MouseHitEx(code)
If code>3 Then code=3
If mouse(code)=1 Then
   mouse(code)=2
   Return True
Else
   Return MouseHit(code)
EndIf
End Function

Function MouseDownEx(code)
If code>3 Then code=3
If keys(code)=1 Or mouse(code)=2 Then
   Return True
Else
   Return MouseDown(code)
EndIf
End Function

Function PressMouse(code,down)
If code>3 Then code=3
If down=True Then
   mouse(code)=True
Else
   mouse(code)=False
EndIf
End Function

Und jetzt noch ein Anwendungsbeispiel:
Code: [AUSKLAPPEN]
Include "include.bb"

SetBuffer BackBuffer()
Repeat
Cls

If KeyHitEx(57) Then Color 255,0,0 : Rect 10,10,100,100,1

If KeyDownEx(57) Then Color 0,255,0 : Rect 120,120,100,100,1

If KeyHitEx(28) Then PressKey(57,True)
If KeyHitEx(54) Then PressKey(57,False)

Delay 100
Flip
Until KeyDownEx(1)

Delay 100

Repeat
Cls

If MouseHitEx(1) Then Color 255,0,0 : Rect 10,10,100,100,1

If MouseDownEx(1) Then Color 0,255,0 : Rect 120,120,100,100,1

If KeyHitEx(28) Then PressMouse(1,True)
If KeyHitEx(54) Then PressMouse(1,False)

Delay 100
Flip
Until KeyDownEx(1)
End

In "include.bb" müssen die Funktionen abgespeichert werden.
Erläuterung des Anwendungsbeispiels:
Ihr könnt jetzt entweder die Leertaste selber drücken oder die Entertaste, um dem Computer das drücken der Leertaste zu überlassen.
Jetzt dürfte ein rotes Quadrat aufblitzen und wieder verschwinden und ein Grünes ist solange zu sehen bis die Taste wieder losgelassen wird.
Wenn ihr die Taste vom Computer habt drücken lassen, dann könnt ihr sie mit Shift wieder loslassen.
Wenn ihr jetzt ESC drückt, dann spielt sich das Ganze nochmal ab, aber diesmal kann die Maus simuliert werden.

Zum Schluss noch ein Download-Packet:
Download-Packet

Ich wünsche euch viel Spaß damit.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

FWeinb

ehemals "ich"

BeitragDo, Mai 15, 2008 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist aber nicht das gleiche was die DLL macht oder sehe ich das falsch ? Confused

Die Dll ermöglicht es doch das die Tasten auch in anderen Programmen gedrückt wird und nicht nur im Eigenen ?

mfg

ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

Marek

BeitragDo, Mai 15, 2008 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Richtig. Die Dll verursacht einen realen virtuellen Tastendruck, während der code hier einen virtuellen virtuellen Tastendruck verursacht der nur Programmintern verfügbar ist. Zu dem, warum sollte die Funktion nicht funktionieren? Im prinzip müsste sie immer funtzen :confused:
MfG
Wer lesen kann ist klar im Vorteil...

Der Eisvogel

BeitragDo, Mai 15, 2008 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, es geht nur im eigenen Programm, ich hbrauche es auch nur für mein Programm. Zum Thema das es bei jedem funktioniert: Bei mir geht es nicht. Es wusste auch niemand woran das liegen könnte.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group