Mouse - Controller

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Mouse - Controller

Beitrag von Josef Sniatecki »

In der vertieften Arbeit zwischen Hausaufgaben und Projekte habe ich mal
ein bisschen erholung gebraucht. Doch anstatt ein Nickerchen zu machen
habe ich einfach mal was leichtes und doch irgendwie cooles geproggt:

Code: Alles auswählen

#Friction=0.96
#MaximalSpeed=8
#Speed=0.18



Global X.f,Y.f
Global MoveX.f,MoveY.f
Global ScreenWidth.w,ScreenHeight.w
Global Position.POINT


GetCursorPos_(@Position)
X=Position\X
Y=Position\Y
ScreenWidth=GetSystemMetrics_(#SM_CXSCREEN)
ScreenHeight=GetSystemMetrics_(#SM_CYSCREEN)

Repeat
  If GetAsyncKeyState_(#VK_RIGHT)
    MoveX+#Speed
  ElseIf GetAsyncKeyState_(#VK_LEFT)
    MoveX-#Speed
  EndIf
  If GetAsyncKeyState_(#VK_DOWN)
    MoveY+#Speed
  ElseIf GetAsyncKeyState_(#VK_UP)
    MoveY-#Speed
  EndIf
  If GetAsyncKeyState_(#VK_SPACE)
    MoveX*0.8
    MoveY*0.8
  EndIf
  
  If MoveX<-#MaximalSpeed
    MoveX=-#MaximalSpeed
  ElseIf MoveX>#MaximalSpeed
    MoveX=#MaximalSpeed
  EndIf
  If MoveY<-#MaximalSpeed
    MoveY=-#MaximalSpeed
  ElseIf MoveY>#MaximalSpeed
    MoveY=#MaximalSpeed
  EndIf
  
  X+MoveX
  Y+MoveY
  
  If X<0
    X=ScreenWidth
  ElseIf X>ScreenWidth
    X=0
  EndIf
  If Y<0
    Y=ScreenHeight
  ElseIf Y>ScreenHeight
    Y=0
  EndIf
  
  MoveX*#Friction
  MoveY*#Friction
  
  SetCursorPos_(Int(X),Int(Y))
  
  Delay(10)
Until GetAsyncKeyState_(#VK_ESCAPE)

End
Man kann durch diesen Code die Maus mit der Tastatur steuern. Dabei
gibt es einen coolen Reibungseffekt. Außerdem taucht die Maus an der
gegenüberliegenden Wand auf, falls sie durch eine Wand fliegt.

Was ich gerade versuche, durch ENTER einen Linksklick zu simulieren.
Da habe ich die API-Struktur INPUT\mi gefunden, doch irgendwie komme
ich nicht weiter.

Probiert es einfach mal aus und fügt etwas hinzu oder gebt einfach mal
eure Kommentare.

mfg Josef
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Witzig! Sinnlos, aber witzig :)

Erinnert mich sehr an die roten Gummi-Nippel bei (älteren) IBM Thinkpads.
meep?
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

Für mich auch witzig. Ich weiß das es sinnlos ist. Aber was solls. :wink:
Trotzdem macht es spaß damit und dem Code herumzuspielen. Was
mir halt fehlt ist die Linksklick-Simulation durch ENTER.
Vieleicht gibts hier API-Gurus. <)
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Josef Sniatecki
Ich find das ebenfalls lustig, sehr sogar *G*
Aber gut gemacht :allright: (auch wenn das nicht so nützlich ist)
Ist halt ne schöne Spielerei <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Peace
Beiträge: 41
Registriert: 15.09.2005 10:47
Wohnort: In my mind
Kontaktdaten:

Beitrag von Peace »

Hallo Josef,

finde die Idee echt cool :allright:
Hier mal ein Code mit dem Du die rechte (TAB) bzw. linke Maustaste (RETURN) simulieren könntest:

Code: Alles auswählen

...
  If GetAsyncKeyState_(#VK_RETURN)
    MouseB.INPUT
    MouseB\type         = #INPUT_MOUSE
    MouseB\mi\dwFlags	= #MOUSEEVENTF_LEFTDOWN
    SendInput_(1, @MouseB, SizeOf(MouseB))
	 ZeroMemory_(@MouseB, SizeOf(MouseB))
    MouseB\type         = #INPUT_MOUSE
    MouseB\mi\dwFlags   = #MOUSEEVENTF_LEFTUP
    SendInput_(1, @MouseB, SizeOf(MouseB))
  ElseIf GetAsyncKeyState_(#VK_TAB)
    MouseB.INPUT
    MouseB\type         = #INPUT_MOUSE
    MouseB\mi\dwFlags	= #MOUSEEVENTF_RIGHTDOWN
    SendInput_(1, @MouseB, SizeOf(MouseB))
	 ZeroMemory_(@MouseB, SizeOf(MouseB))
    MouseB\type         = #INPUT_MOUSE
    MouseB\mi\dwFlags   = #MOUSEEVENTF_RIGHTUP
    SendInput_(1, @MouseB, SizeOf(MouseB))
  EndIf
...
Bild
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

Danke Peace, :allright:

habe nun deinen Tipp in den Code eingebaut. Man kann nun durch
Enter (Links) und Tab (Rechts) Klicks simulieren. Doch mir sind da so
einige Probleme aufgefallen. Da viele Programme auf die Tastatur
reagieren (wie der win-explorer oder opera) kann das zu einem
durcheinander führen.

Ich glaube da brauche ich wieder einen API-Guru, da ich nicht möchte,
dass die Programme auf die benutzten Tasten reagieren.

Hier der Code:

Code: Alles auswählen

#Friction=0.96 
#MaximalSpeed=8 
#Speed=0.18 



Global X.f,Y.f 
Global MoveX.f,MoveY.f
Global Right.l,Left.l
Global ScreenWidth.w,ScreenHeight.w
Global Position.POINT,Input.INPUT


GetCursorPos_(@Position) 
X=Position\X 
Y=Position\Y 
ScreenWidth=GetSystemMetrics_(#SM_CXSCREEN) 
ScreenHeight=GetSystemMetrics_(#SM_CYSCREEN) 

Repeat 
  If GetAsyncKeyState_(#VK_RIGHT) 
    MoveX+#Speed 
  ElseIf GetAsyncKeyState_(#VK_LEFT) 
    MoveX-#Speed
  EndIf
  If GetAsyncKeyState_(#VK_DOWN)
    MoveY+#Speed
  ElseIf GetAsyncKeyState_(#VK_UP)
    MoveY-#Speed
  EndIf
  If GetAsyncKeyState_(#VK_SPACE)
    MoveX*0.8
    MoveY*0.8
  EndIf
  
  If Left=#False
    If GetAsyncKeyState_(#VK_RETURN)
      Input\type=#INPUT_MOUSE
      Input\mi\dwFlags=#MOUSEEVENTF_LEFTDOWN
      SendInput_(1,@Input,SizeOf(INPUT))
      ZeroMemory_(@Input,SizeOf(INPUT))
      Left=#True
    EndIf
  ElseIf GetAsyncKeyState_(#VK_RETURN)=#False
    Input\type=#INPUT_MOUSE
    Input\mi\dwFlags=#MOUSEEVENTF_LEFTUP
    SendInput_(1,@Input,SizeOf(INPUT))
    ZeroMemory_(@Input,SizeOf(INPUT))
    Left=#False
  EndIf
  If Right=#False
    If GetAsyncKeyState_(#VK_TAB)
      Input\type=#INPUT_MOUSE
      Input\mi\dwFlags=#MOUSEEVENTF_RIGHTDOWN
      SendInput_(1,@Input,SizeOf(INPUT))
      ZeroMemory_(@Input,SizeOf(INPUT))
      Right=#True
    EndIf
  ElseIf GetAsyncKeyState_(#VK_TAB)=#False
    Input\type=#INPUT_MOUSE
    Input\mi\dwFlags=#MOUSEEVENTF_RIGHTUP
    SendInput_(1,@Input,SizeOf(INPUT))
    ZeroMemory_(@Input,SizeOf(INPUT))
    Right=#False
  EndIf
  
  If MoveX<-#MaximalSpeed 
    MoveX=-#MaximalSpeed 
  ElseIf MoveX>#MaximalSpeed 
    MoveX=#MaximalSpeed 
  EndIf 
  If MoveY<-#MaximalSpeed 
    MoveY=-#MaximalSpeed 
  ElseIf MoveY>#MaximalSpeed 
    MoveY=#MaximalSpeed 
  EndIf 
  
  X+MoveX 
  Y+MoveY 
  
  If X<0 
    X=ScreenWidth 
  ElseIf X>ScreenWidth 
    X=0 
  EndIf 
  If Y<0 
    Y=ScreenHeight 
  ElseIf Y>ScreenHeight 
    Y=0 
  EndIf 
  
  MoveX*#Friction 
  MoveY*#Friction 
  
  SetCursorPos_(Int(X),Int(Y)) 
  
  Delay(10) 
Until GetAsyncKeyState_(#VK_ESCAPE) 

End
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

:mrgreen: so geil ENDLICH kann ich Moorhuhn mit der Tastatur spielen !! :lol:

funny Teil ;)
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Ich find dieses "schwammige", also das abbremsen und Gasgeben cool....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag von dige »

Bei einem einzelnen Cursor-Klick sollte die Muas aber nicht gleich wie auf Eis schlingern ... so kann man nicht besonders gut fein positionieren..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Eine Freundin hatte auf ihrer etwas betagteren Tastatur extra einen Button (wie zB der Num-Block oder Capslock) mit dem man die Maus mitm Nummernblock kontrollieren konnte. Auf den Tasten standen dann auch schöne Pfeile für die Richtung oder auch "Doppelclick" etc.
Sehr lustige Sache, nutzen... naja, es macht spass...
pb 4.51
Antworten