Project1
标题:
关于设定鼠标位置的方法。内有自己的笨蛋方法。
[打印本页]
作者:
蓝翎
时间:
2013-1-3 11:09
标题:
关于设定鼠标位置的方法。内有自己的笨蛋方法。
本帖最后由 hcm 于 2013-1-14 12:54 编辑
{:2_253:}
本意是想让鼠标和键盘同时响应按钮,
实践的时候发现鼠标和键盘要同时设置要考虑很多问题,比如优先级之类的问题。
后来觉得如果能直接设定鼠标坐标就可以不用在意这种细节~☆
自己查了查API之后试着用了下SetCursorPos,发现这种函数设定的是屏幕坐标,这么一来除非是全屏状态,否则坐标肯定会偏移的。
然后自己睡前想了想做了个奇怪的方法↓
def self.set_mouse_pos(game_x, game_y)
$SetCursorPos.call(0, 0)
desktop_x,desktop_dy = $GetSystemMetrics
mouse_x, mouse_y = Mouse.get_mouse_pos
x = 0
y = 0
while mouse_y < game_y
y = y + 1
$SetCursorPos.call(0, y)
mouse_x, mouse_y = Mouse.get_mouse_pos
end
while mouse_x < game_x
x = x + 1
$SetCursorPos.call(x, y)
mouse_x, mouse_y = Mouse.get_mouse_pos
end
end
复制代码
【>。<文科生不要在意冗杂的语句。总之就是这样循环到游戏中的位置为止
说了这么多其实就是想问问有米有更好的方法~
补充:
好吧我太笨了,
表示今天早上翻鼠标脚本的时候无意间翻到ScreenToClient,
想是不是还有ClientToScreen?
百度了一下果然有,
然后自己仿照ScreenToClient做了一下,
居然成功了!
def self.set_mouse_pos(game_x, game_y)
point = [game_x, game_y].pack('ll')
$ClientToScreen.call($Window_HWND, point)
desktop_x, desktop_y = point.unpack('ll')
$SetCursorPos.call(desktop_x, desktop_y)
end
就当我是卖萌好了……
作者:
羞射了
时间:
2013-1-3 12:15
本帖最后由 hcm 于 2013-1-6 12:31 编辑
看我鼠标脚本里的这两段
def self.set_to(x,y)
rect = self.get_client_rect
$SetCursorPos.call(rect[0]+x,rect[1]+y)
x, y = Mouse.get_mouse_pos
end
复制代码
这段功能和你的需求类似,功能为设置鼠标到指定的点,先获取窗口区域的范围,然后用 $SetCursorPos.call
获取窗口区域的方法
def self.get_client_rect
rect = [0,0,0,0].pack('l4')
$GetClientRect.call(Kernel::get_hwnd, rect)#窗口句柄
$ClientToScreen.call(Kernel::get_hwnd, rect)#窗口句柄
rect = rect.unpack('l4')[0..3]
client_rect = [rect[0],rect[1],rect[0]+rect[2],rect[1]+rect[3]]
return client_rect#返回的这个数组记录了窗口的起始坐标和长宽
end
复制代码
思路应该差不多的。
作者:
羞射了
时间:
2013-1-3 12:25
哈哈,我也不是学计算机的,反正
$GetClientRect.call(Kernel::get_hwnd, rect)#窗口句柄
$ClientToScreen.call(Kernel::get_hwnd, rect)#窗口句柄
这两句连用可以定位游戏窗口的相对坐标,我之前和你一样试过其他方法,可是窗口移动或者分辨率变动后坐标就对不上了,你可能也遇到过吧。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1