在 Windows 10 上响应事件在点击位置显示自定义动画

在 Windows 10 上响应事件在点击位置显示自定义动画

有很多关于改变光标外观的程序,尤其是对于 Mac OS,人们可以通过鼠标事件等改变光标的外观,并添加漂亮的动画和图形。我正在寻找一个完全相同的替代品穆斯波塞我已经找到了适用于 Windows 10 的应用程序,但到目前为止,我还没有幸运到这个程度。如果你知道这样的应用程序,请告诉我。不过,我发现有些应用程序在 Windows 上运行得很好(但不如人意),比如光标特效鼠标点亮;前者看上去合适,但与 Windows 10 的图标视觉上不兼容;后者看上去合适,但质量较低。

我想问的是除了上述应用程序之外。一些脚本可以为 Windows 中的热键编写,但根据这个答案邮政,将产生类似以下的结果:

在此处输入图片描述

如您所见,Ctrl按键被鼠标按钮取代,并创建了与上述应用程序类似的功能。但这种默认的 Windows 10 动画太丑陋、太可怕、太快且不合适。

如果可能的话,我想通过 AutoHotKey 脚本创建一种情况,当鼠标单击时,会出现以下华丽的 SVG 动画。我该怎么做?感谢您的帮助。

在此处输入图片描述

动画 SVG(旋转的圆圈.SVG)文件(您可以在IE以外的浏览器中打开它来播放它)我想要在Windows 10中点击位置出现的动画。

答案1

我有一个可以生成此效果的 AutoHotkey 脚本,尽管我还没有在 Windows 10 上测试过它——我认为它在那里也能工作。我想要同样的功能来显示自动鼠标点击事件。我已发布我的完整源代码这里供您尝试/使用/修改并查看它是否适合您。

该脚本从头开始生成动画(而不是显示 SVG 或 GIF 文件),方法是从单击的点向外绘制同心圆。这样可以调整同心圆、颜色选择、淡入淡出率、大小、厚度等。这些变量目前是硬编码的,但如果您想玩动画的外观,可以将它们组合在一起。它不像您显示的 SVG 那样精致,因为绘制的圆圈没有抗锯齿,但效果是一样的。

要运行该脚本,需要具备一些有关如何启动和运行 AutoHotkey 以及下载GDIP 库并将其放入与脚本相同的文件夹中。如果您在尝试时遇到任何问题,请发表评论。

答案2

这是另一个简单的 AHK 脚本。

  • 不需要任何外部库。
  • 在 Windows 10 上顺利运行。
  • 可以轻松编辑脚本内的波纹参数。

原作者:https://www.autohotkey.com/boards/viewtopic.php?t=8963

#NoEnv
CoordMode Mouse, Screen
Setup()

~LButton::ShowRipple(LeftClickRippleColor)
~RButton::ShowRipple(RightClickRippleColor)
~LControl Up::ShowRipple(MouseIdleRippleColor)

Setup()
{
    Global
    RippleWinSize := 50
    RippleStep := 2
    RippleMinSize := 5
    RippleMaxSize := RippleWinSize - 20
    RippleAlphaMax := 0xff
    RippleAlphaStep := RippleAlphaMax // ((RippleMaxSize - RippleMinSize) / (RippleStep*1.0))
    RippleVisible := False
    LeftClickRippleColor := 0xff0000
    RightClickRippleColor := 0x0000ff
    MouseIdleRippleColor := 0x008000

    DllCall("LoadLibrary", Str, "gdiplus.dll")
    VarSetCapacity(buf, 16, 0)
    NumPut(1, buf)
    DllCall("gdiplus\GdiplusStartup", UIntP, pToken, UInt, &buf, UInt, 0)

    Gui Ripple: -Caption +LastFound +AlwaysOnTop +ToolWindow +Owner +E0x80000
    Gui Ripple: Show, NA, RippleWin
    hRippleWin := WinExist("RippleWin")
    hRippleDC := DllCall("GetDC", UInt, 0)
    VarSetCapacity(buf, 40, 0)
    NumPut(40, buf, 0)
    NumPut(RippleWinSize, buf, 4)
    NumPut(RippleWinSize, buf, 8)
    NumPut(1, buf, 12, "ushort")
    NumPut(32, buf, 14, "ushort")
    NumPut(0, buf, 16)
    hRippleBmp := DllCall("CreateDIBSection", UInt, hRippleDC, UInt, &buf, UInt, 0, UIntP, ppvBits, UInt, 0, UInt, 0)
    DllCall("ReleaseDC", UInt, 0, UInt, hRippleDC)
    hRippleDC := DllCall("CreateCompatibleDC", UInt, 0)
    DllCall("SelectObject", UInt, hRippleDC, UInt, hRippleBmp)
    DllCall("gdiplus\GdipCreateFromHDC", UInt, hRippleDC, UIntP, pRippleGraphics)
    DllCall("gdiplus\GdipSetSmoothingMode", UInt, pRippleGraphics, Int, 4)

    MouseGetPos _lastX, _lastY
    SetTimer MouseIdleTimer, 5000
    Return

MouseIdleTimer:
    MouseGetPos _x, _y
    if (_x == _lastX and _y == _lastY)
        ShowRipple(MouseIdleRippleColor, _interval:=40)
    else
        _lastX := _x, _lastY := _y
    Return
}

ShowRipple(_color, _interval:=20)
{
    Global
    if (RippleVisible)
        Return
    RippleColor := _color
    RippleDiameter := RippleMinSize
    RippleAlpha := RippleAlphaMax
    RippleVisible := True

    MouseGetPos _pointerX, _pointerY
    SetTimer RippleTimer, % _interval
    Return

RippleTimer:
    DllCall("gdiplus\GdipGraphicsClear", UInt, pRippleGraphics, Int, 0)
    if ((RippleDiameter += RippleStep) < RippleMaxSize) {
        DllCall("gdiplus\GdipCreatePen1", Int, ((RippleAlpha -= RippleAlphaStep) << 24) | RippleColor, float, 3, Int, 2, UIntP, pRipplePen)
        DllCall("gdiplus\GdipDrawEllipse", UInt, pRippleGraphics, UInt, pRipplePen, float, 1, float, 1, float, RippleDiameter - 1, float, RippleDiameter - 1)
        DllCall("gdiplus\GdipDeletePen", UInt, pRipplePen)
    }
    else {
        RippleVisible := False
        SetTimer RippleTimer, Off
    }

    VarSetCapacity(buf, 8)
    NumPut(_pointerX - RippleDiameter // 2, buf, 0)
    NumPut(_pointerY - RippleDiameter // 2, buf, 4)
    DllCall("UpdateLayeredWindow", UInt, hRippleWin, UInt, 0, UInt, &buf, Int64p, (RippleDiameter + 5) | (RippleDiameter + 5) << 32, UInt, hRippleDC, Int64p, 0, UInt, 0, UIntP, 0x1FF0000, UInt, 2)
    Return
}

相关内容