Comment obtenir la position du pointeur de la souris en ruby ?
Cela devrait être la position absolue (écran).
Si cela nécessite une réponse spécifique au système, je suis sur Ubuntu.
Merci
Comment obtenir la position du pointeur de la souris en ruby ?
Cela devrait être la position absolue (écran).
Si cela nécessite une réponse spécifique au système, je suis sur Ubuntu.
Merci
J'ai assemblé la fonction suivante. Elle effectue une répartition en fonction du système d'exploitation et suit une stratégie différente pour chaque SE :
require 'rbconfig'
##
# Retourne un tableau [x, y] contenant les coordonnées de la souris
# Notez que le système de coordonnées dépend du SE.
def getMouseLocation
def windows
require "Win32API"
getCursorPos = Win32API.new("user32", "GetCursorPos", 'P', 'L')
# point est une structure Long, Long
point = "\0" * 8
if getCursorPos.Call(point)
point.unpack('LL')
else
[nil, nil]
end
end
def linux
loc_string = `xdotool getmouselocation --shell`[/X=(\d+)\nY=(\d+)/]
loc_string.lines.map { |s| s[/.=(\d+)/, 1].to_i }
end
def osx
# si nous exécutons RubyCocoa, nous pouvons accéder aux bibliothèques objective-c
require "osx/cocoa"
OSX::NSEvent.mouseLocation.to_a
rescue LoadError
# nous n'exécutons pas ruby cocoa, mais il devrait être préinstallé sur chaque système
coords = `/usr/bin/ruby -e 'require "osx/cocoa"; puts OSX::NSEvent.mouseLocation.to_a'`
coords.lines.map { |s| s.to_f }
end
case RbConfig::CONFIG['host_os']
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
windows
when /darwin|mac os/
osx
when /linux|solaris|bsd/
linux
else
raise Error, "système d'exploitation inconnu : #{host_os.inspect}"
end
rescue Exception => e
[nil, nil]
end
Testé sur Ubuntu 13.04 (gnome-shell), Windows 7 64bit, OS x 10.8.4. Je serais ravi si quelqu'un pouvait confirmer que cela fonctionne sur d'autres systèmes. Une solution jruby manque également.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.