有很多关于改变光标外观的程序,尤其是对于 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
}