概要
過去 に HammerSpoon で紹介しましたがうまく動作しないケースがあるようです
その場合は event.types.leftMouseDragged
イベントをうまく使うとドラッグアンドドロップできるようになります
環境
- macOS 15.2
- HammerSpoon 1.0.0
ドラッグアンドドロップする関数
function dragMouse(pointA, pointB, sleep)
local event = hs.eventtap.event
local xdiff = pointB.x - pointA.x
local ydiff = pointB.y - pointA.y
-- ここの割り算の3の数が少ないほどドラッグが滑らかになる
-- 速いドラッグにしたい場合は数を大きくする
local loop = math.floor(math.sqrt((xdiff * xdiff) + (ydiff * ydiff)) / 3)
local xinc = xdiff / loop
local yinc = ydiff / loop
sleep = math.floor((sleep * 1000) / loop)
midPoint = {x=pointA.x, y=pointA.y}
for i = 1,loop do
midPoint.x = midPoint.x + xinc
midPoint.y = midPoint.y + yinc
newPoint = {x = math.floor(midPoint.x), y = math.floor(midPoint.y)}
hs.mouse.absolutePosition(newPoint)
event.newMouseEvent(event.types.leftMouseDragged, newPoint):post()
hs.timer.usleep(sleep)
end
newPoint = {x = math.floor(pointB.x), y = math.floor(pointB.y)}
hs.mouse.absolutePosition(newPoint)
event.newMouseEvent(event.types.leftMouseDragged, newPoint):post()
end
使い方
hs.hotkey.bind({"cmd", "alt"}, "T", function()
local upSlideStartPoint = {x=500, y=500}
local upSlideEndPoint = {x=200, y=200}
-- カーソル位置を移動
hs.mouse.absolutePosition(upSlideStartPoint)
-- マウスを押した状態にする
hs.eventtap.event.newMouseEvent(hs.eventtap.event.types.leftMouseDown, upSlideStartPoint):post()
-- マウスを押しながら移動する
-- 1の数字の部分を調整することでドラッグアンドドロップのスピードが変わる
-- 数が少ないほど速くなる
dragMouse(upSlideStartPoint, upSlideEndPoint, 1)
-- マウスを離す
hs.eventtap.event.newMouseEvent(hs.eventtap.event.types.leftMouseUp, upSlideEndPoint):post()
end)
最後に
ポイントはカーソルを移動した際に event.types.leftMouseDragged
を実行する点かなと思います
多くのサンプルはマウスダウンをしてそのままカーソルを移動してその後マウスを上げるになっているのですがそれだとダメなようです
0 件のコメント:
コメントを投稿