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
############################################################################ # 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
--~> Fantasie ist wertvoller als Wissen, denn Wissen ist begrenzt. (Einstein) <~: 1. Demo hier erhältlich =D -------------------------------------
Foren-Regeln