[BlitzMax]Mausklick an beliebiger Position simulieren

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

 

dubitat

Betreff: [BlitzMax]Mausklick an beliebiger Position simulieren

BeitragFr, Jan 09, 2009 2:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe mit einigen Code Schnipseln hier aus dem Forum und aus dem Netz eine Funktion für die WindowsAPI geschrieben, mit welcher ihr einen Mausklick an eine beliebige Stelle setzen könnt, unabhängig von dem BlitzWindow, da alles über die Api Funktionen läuft. Für Anregungen bin ich gerne offen.
Code: [AUSKLAPPEN]

Strict

Extern "win32"
Function win32_LoadLibrary:Int(lpFileName$z) = "LoadLibraryA@4"
Function win32_GetProcAddress:Byte Ptr(hModule:Int, lpProcName$z) = "GetProcAddress@8"
End Extern


Function MouseHitLeft(x,y)
 Local Mouse_LDOWN = $2
 Local Mouse_LUP = $4
 Local hModule:Int = win32_LoadLibrary("user32.dll")
 If hModule = 0 Then
    Return
 EndIf

Local MousePos(point:Byte Ptr)  "win32"=win32_GetProcAddress(hModule, "GetCursorPos")

 'In MouseKoords[0] ist die X und in MouseKoords[1] die Y Position gespeichert
 Local MouseKoords:Int[]
 MouseKoords = New Int[2]
 MousePos(MouseKoords) 

 Local ChangeMouse(F:Int, dx:Int, dy:Int, D:Int, S:Int) "win32"=win32_GetProcAddress(hModule, "mouse_event")
 
 MoveMouse x,y
 ChangeMouse Mouse_LDOWN,0,0,0,0
 ChangeMouse Mouse_LUP,0,0,0,0
 MoveMouse MouseKoords[0],MouseKoords[1]

End Function


MouseHitLeft(1240,10)


mfg
dubitat

P.S. Ich habe keine Ahnung, ob ihr diesen BlitzMax Code als sauber empfindet, da es meine ersten versuche in BlitzMax sind vorher Blitz3d
Erare humanum est - Irren ist Menschlich
 

DjDETE

BeitragFr, Jan 09, 2009 2:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Also in BlitzBasic geht das doch eh, und wenn der Code für BlitzMax ist (was er definitv ist) gehört er doch ins BlitzMax Codearchiv.
MfG DeTe
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Valnar

BeitragFr, Jan 09, 2009 2:18
Antworten mit Zitat
Benutzer-Profile anzeigen
DjDete, du hast anscheinend nicht dne Sinn u nd Zweck dieses Scruptes erfunden. Du kannst, wenn ich es richtig verstanden habe, AUSSERHALB deines Blitzfensters einen klick Simulieren. Also kannst du sowas ähnliches wie AutoIt (oder wie dieses Programm heisst) basteln.

Aber ja: Falsches Forum scheint es definitiv zu sein!

hamZta

Administrator

BeitragFr, Jan 09, 2009 2:21
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~

Falsches Codearchiv Wink

mfg,
hamZta
Blog.
 

dubitat

BeitragFr, Jan 09, 2009 2:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
heute sind wohl viele Nachtaktive unterwegs Very Happy

Ich muss zu meiner Schande gestehen, dass ich das BlitzMax Codearchiv glatt übersehen habe...

mfg
dubitat

Edit:

Hier gibts nochmal die abgewandelte Version um unabhängig von Pixeln und somit Auflösung zu sein:
(Angegeben in Prozentwerten zwischen 0% und 100% als Float)
Code: [AUSKLAPPEN]

Strict

Extern "win32"
Function win32_LoadLibrary:Int(lpFileName$z) = "LoadLibraryA@4"
Function win32_GetProcAddress:Byte Ptr(hModule:Int, lpProcName$z) = "GetProcAddress@8"
End Extern

Function MouseHitLeft(x:Float,y:Float)
 Local Mouse_LDOWN = $2
 Local Mouse_LUP = $4
 Local hModule:Int = win32_LoadLibrary("user32.dll")
 If hModule = 0 Then
    Return
 EndIf

 Local ScreenRes(point:Int) "win32"= win32_GetProcAddress(hModule, "GetSystemMetrics")

 Local MousePos(point:Byte Ptr)  "win32"=win32_GetProcAddress(hModule, "GetCursorPos")

 'In MouseKoords[0] ist die X und in MouseKoords[1] die Y Position gespeichert
 Local MouseKoords:Int[]
 MouseKoords = New Int[2]
 MousePos(MouseKoords) 

 Local ChangeMouse(F:Int, dx:Int, dy:Int, D:Int, S:Int) "win32"=win32_GetProcAddress(hModule, "mouse_event")
 
 MoveMouse (ScreenRes(0)*x/100),(ScreenRes(1)*y/100)
 ChangeMouse Mouse_LDOWN,0,0,0,0
 ChangeMouse Mouse_LUP,0,0,0,0
 MoveMouse MouseKoords[0],MouseKoords[1]

End Function


MouseHitLeft(50,50)
Erare humanum est - Irren ist Menschlich

kog

BeitragFr, Jan 09, 2009 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es noch einbisschen umgeschrieben. Da du die Befehle nicht aus der DLL manuell laden gehen musst. Sondern sie direkt per Extern "laden" kannst:

Code: [AUSKLAPPEN]
SuperStrict

Extern "win32"
   Function ScreenRes:Int(point:Int)="GetSystemMetrics@4"
   Function MousePos(point:Byte Ptr)="GetCursorPos@4"
   Function ChangeMouse(f:Int,dx:Int,dy:Int,d:Int,s:Int)="mouse_event@20"
End Extern

Function MouseHitLeft(x:Float,y:Float)
 Local Mouse_LDOWN:Int = $2
 Local Mouse_LUP:Int = $4

 'In MouseKoords[0] ist die X und in MouseKoords[1] die Y Position gespeichert
 Local MouseKoords:Int[]
 MouseKoords = New Int[2]
 MousePos(MouseKoords) 
 Print(mousekoords[0]+"x"+mousekoords[1])
 
 MoveMouse ( ScreenRes(0)*x/100),( ScreenRes(1)*y/100)
 ChangeMouse Mouse_LDOWN,0,0,0,0
 ChangeMouse Mouse_LUP,0,0,0,0
 MoveMouse MouseKoords[0],MouseKoords[1]

End Function


MouseHitLeft(50,50)
 

DjDETE

BeitragFr, Jan 09, 2009 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht liegt es daran dass ich B+ besitze, aber ich kann auch einfach wenn ich kein Fenster offen habe die Maus mit Movemouse irgendwo auf dem Bildschirm positionieren.
MfG DeTe
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

#Reaper

Newsposter

BeitragFr, Jan 09, 2009 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
DjDETE hat Folgendes geschrieben:
Vielleicht liegt es daran dass ich B+ besitze, aber ich kann auch einfach wenn ich kein Fenster offen habe die Maus mit Movemouse irgendwo auf dem Bildschirm positionieren.
MfG DeTe


Aber wohl kaum damit zum klicken bewegen, gell? Wink


Hier mal alle Mouse-Events:

Code: [AUSKLAPPEN]
Const   MOUSEEVENT_MOVE       :Short      = $1             , ..
      MOUSEEVENT_ABSOLUTE    :Short      = $8000          , ..
      MOUSEEVENT_LEFTDOWN    :Short      = $2             , ..
      MOUSEEVENT_LEFTUP       :Short      = $4             , ..
      MOUSEEVENT_RIGHTDOWN    :Short      = $8             , ..
      MOUSEEVENT_RIGHTUP       :Short      = $10            , ..
      MOUSEEVENT_MIDDLEDOWN    :Short      = $20             , ..
      MOUSEEVENT_MIDDLEUP    :Short      = $40             , ..
      MOUSEEVENT_WHEEL      :Short      = $800

(Ok, mit Tabs war er ordentlich eingerückt...)

Ich meine es sollten so alle stimmen.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

DjDETE

BeitragFr, Jan 09, 2009 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, aber dafür gibt's ja auch schon ne dll für BlitzBasic.
Ich wollte ja auch eigentlich nur auf das falsche Codearchiv hinweisen Wink
MfG DeTe
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group