Ohne es selbst bisher ausprobiert zu haben, soll das ganz gut funktionieren:
Code:
############################################################################
# Script by: BEHEMOTH # #
####################### #
# Script: Mouse Module (Requires Window Module) #
# Current Version: 1.1 #
# #
# * Version 1.1 #
# - Fixed Mouse_Buttons from Array To Table #
# #
# * Version 1.0 #
# - get/set the mouse position #
# - get mouse button input #
# #
#############################################################################
#############################################################################
# ***Script Commands*** #
# #
# Mouse.press?(key) #
# Mouse.trigger?(key) #
# Mouse.repeat?(key) #
# Mouse.release?(key) #
# Mouse.show #
# Mouse.hide #
# Mouse.screen_pos_x #
# Mouse.screen_pos_y #
# Mouse.set_pos(x, y) #
# Mouse.pos_x #
# Mouse.pos_y #
# #
# ***Script commands intended for parrel processes*** #
# ***and/or loops inside scripts*** #
# #
# Mouse.update #
# #
#############################################################################
module Mouse
Mouse_Buttons = Table.new(3)
Left_Click = Mouse_Buttons[0] = 1
Right_Click = Mouse_Buttons[1] = 2
Middle_Click = Mouse_Buttons[2] = 4
@press = []
@trigger = []
@repeat = []
@release = []
@repeat_time = Table.new(255)
@release_num = Table.new(255)
REPEAT_TIME = 15
REPEAT_PAUSE = 3
@@cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
@@set_cursor_pos = Win32API.new('user32', 'SetCursorPos', 'ii', 'i')
@@show_cursor = Win32API.new('user32', 'ShowCursor', 'L', 'i')
State = Win32API.new("user32", "GetKeyState", 'i', 'i')
Key = Win32API.new("user32", "GetAsyncKeyState", 'i', 'i')
#-------------------------------------------------------------------------
# Shows Mouse Cursor
#-------------------------------------------------------------------------
def Mouse.show
@@show_cursor.call(-1)
end
#-------------------------------------------------------------------------
# Hides Mouse Cursor
#-------------------------------------------------------------------------
def Mouse.hide
@@show_cursor.call(0)
end
#-------------------------------------------------------------------------
# Checks if a key is being pressed and if it isn't anymore then is released
#-------------------------------------------------------------------------
def Mouse.check_press?(key)
if not State.call(key).between?(0, 1)
@release_num[key] = 1
return true
end
if @release_num[key] == 1
@release_num[key] = 0
@release.push(key)
end
return false
end
#-------------------------------------------------------------------------
def Mouse.check_trigger?(key)
return Key.call(key) & 0x01 == 1
end
#-------------------------------------------------------------------------
def Mouse.check_repeat?(key)
if @trigger.include?(key)
return true
elsif (not @trigger.include?(key)) && @press.include?(key)
if @repeat_time[key] >= REPEAT_TIME
@repeat_time[key] -= REPEAT_PAUSE
return true
else
@repeat_time[key]+=1
return false
end
else
@repeat_time[key] = 0
return false
end
end
#-------------------------------------------------------------------------
def Mouse.press?(key)
return @press.include?(key)
end
#-------------------------------------------------------------------------
def Mouse.trigger?(key)
return @trigger.include?(key)
end
#-------------------------------------------------------------------------
def Mouse.repeat?(key)
return @repeat.include?(key)
end
#-------------------------------------------------------------------------
def Mouse.release?(key)
return @release.include?(key)
end
#-------------------------------------------------------------------------
# * Updates Mouse
#-------------------------------------------------------------------------
def Mouse.update
Mouse.wheel
@press = []
@trigger = []
@repeat = []
@release = []
for i in 0...Mouse_Buttons.xsize
key_update(Mouse_Buttons[i])
end
end
#-------------------------------------------------------------------------
# * Updates Mouse's Key Input
#-------------------------------------------------------------------------
def Mouse.key_update(key)
if check_press?(key)
@press.push(key)
end
if check_trigger?(key)
@trigger.push(key)
end
if check_repeat?(key)
@repeat.push(key)
end
end
#-------------------------------------------------------------------------
# * Gets Mouse X Position, screen coordinate.
#-------------------------------------------------------------------------
def Mouse.screen_pos_x
return screen_pos[0]
end
#-------------------------------------------------------------------------
# * Gets Mouse X Position, screen coordinate.
#-------------------------------------------------------------------------
def Mouse.screen_pos_y
return screen_pos[1]
end
#-------------------------------------------------------------------------
# * Gets the mouse position relative to the screen
#-------------------------------------------------------------------------
def Mouse.screen_pos
spos = [0, 0].pack('ll')
@@cursor_pos.call(spos)
return spos.unpack('ll')
end
#-------------------------------------------------------------------------
# * Sets mouse position to the x, y
#-------------------------------------------------------------------------
def Mouse.set_pos(x, y)
x = [[x, 0].max, 640].min
y = [[y, 0].max, 480].min
x, y = Win.client_to_screen(x, y)
@@set_cursor_pos.call(x, y)
end
#-------------------------------------------------------------------------
# * Gets the mouse position relative to the cilent
# If mouse is outside of client area then mouse position is -1, -1
#-------------------------------------------------------------------------
def Mouse.pos
x, y = Win.screen_to_client(screen_pos_x, screen_pos_y)
if x.nil?
return -1, -1
else
width, height = Win.client_size
if (x >= 0 and y >= 0 and x < width and y < height)
return x, y
else
print("hello")
return -1, -1
end
end
end
#-------------------------------------------------------------------------
# Returns the Y coordinate relative to the client window
#-------------------------------------------------------------------------
def Mouse.pos_x
return pos[0]
end
#-------------------------------------------------------------------------
# Returns the Y coordinate relative to the client window
#-------------------------------------------------------------------------
def Mouse.pos_y
return pos[1]
end
#-------------------------------------------------------------------------
end