Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mouseposition



Cornix
30.11.2009, 23:05
Guten Abend.
Ich habe mir gerade ein Script angeschaut welches die Benutzung der Maus ermöglichen soll.

Dieser liebe Herr (Herr könnte in diesem Fall auch rein theoretisch eine weibliche Person bezeichnen. Ich habe keine Ahnung) hier hat es geschrieben:

#==================================================================
# GMUS Guedez Mouse Use System
# Version: 1.0
# Released: 26/5/2006 Last Update: 1/6/2006
# Thx to: Cadafalso, Near Fantastica, and some guys from asylum!
# EDITED BY TSUNOKIETTE (to get neccesary parts only)
#==================================================================
und es sieht wie folgt aus:

$getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V')

class Mouse_Coordinates

attr_reader :x
attr_reader :y

def initialize
@x = get_pos('x')
@y = get_pos('y')
end

def update
@x = get_pos('x')
@y = get_pos('y')
end

def get_pos(coord_type)
lpPoint = " " * 8 # store two LONGs
$getCursorPos.Call(lpPoint)
x,y = lpPoint.unpack("LL") # get the actual values
if coord_type == 'x'
return x
elsif coord_type == 'y'
return y
end
end

end

Nun, neben der Tatsache, dass ich den Inhalt nicht verstehe habe ich ein kleines, relativ leicht verständliches Problem festgestellt.
Ich weis zwar durch das Script wo sich die Maus befindet, allerdings habe ich keine Ahnung wo sich denn genau das Fenster befindet in welchem das Project ausgeführt wird.

Der Autor des Scriptes machte es sich einfach und ging schlichtweg davon aus, dass niemand das Fenster verschieben würde.
Ich finde, dass ist ein sehr unfeiner Weg sich heraus zu stehlen.

Also, nach all der Menge Text nun hier meine Frage:
Wie finde ich die derzeitige Position des Fensters heraus, in welchem mein Project dargestellt wird?

Shining Advances
01.12.2009, 17:45
es ist nicht ganze die antwort auf deine frage, aber man kann koordinaten automatisch für das fenster umwandeln. dazu das folgende script:
("maus_atelier" durch den namen deines projektes ersetzen)

$getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V')

class Mouse_Coordinates

attr_reader :x
attr_reader :y

def initialize
@scr2cli = Win32API.new("user32", "ScreenToClient", "lp", "i")
@findwindow = Win32API.new("user32", "FindWindowA", "pp", "l")
@x,@y = screen_to_client(get_pos)
end

def update
@x,@y = screen_to_client(get_pos)
end

def get_pos
lpPoint = " " * 8 # store two LONGs
$getCursorPos.Call(lpPoint)
return lpPoint.unpack("LL") # get the actual values
end

def screen_to_client(pos)
pos = pos.pack('ll')
if @scr2cli.call(hwnd, pos) != 0
return pos.unpack('ll')
else
return [-1,-1]
end
end

def hwnd
return @findwindow.call("RGSS Player","maus_atelier")
end
end