Exibindo uma animação personalizada no local do clique no Windows 10 em resposta a um evento


4

Existem muitos programas relacionados à alternância da aparência do cursor, especialmente no Mac OS, no qual é possível alterar a aparência do cursor, por exemplo, eventos de mouse, com belas animações e figuras. Eu estava procurando por uma substituição idêntica do aplicativo Mouseposé para o Windows 10, mas eu não tive a sorte, até agora. Se você sabe de tal aplicativo, então por favor familiarizar comigo. No entanto, eu encontrei alguns que funcionam muito bem (mas não tão desejado) para o Windows, como o CursorFX e o SpotOn TheMouse ; o primeiro parece apropriado, mas não é visualmente compatível com os ícones do Windows 10 e o mesmo acontece com o último, mas ele sofre de baixa qualidade.

O que eu quero perguntar é além dos aplicativos acima mencionados. Alguns scripts podem ser escritos para teclas de atalho no Windows, mas de acordo com a resposta dada neste post , algo parecido com o seguinte será produzido como resultado:

insira a descrição da imagem aqui

Como você pode ver, a Ctrlchave é substituída pelos botões do mouse e cria uma funcionalidade semelhante aos aplicativos mencionados anteriormente. Mas essa animação padrão do Windows 10 é tão feia, monstruosa, muito rápida e inadequada.

Eu quero criar uma situação, se possível, através do script AutoHotKey em que a seguinte animação SVG linda aparece quando o botão do mouse clica. Como eu faço isso? Obrigado por todas as suas ajudas.

insira a descrição da imagem aqui

O arquivo SVG ( Spinning-Circles.SVG ) animado (você pode reproduzi-lo abrindo-o em um navegador diferente do IE) A animação que eu quero ter no local do clique no Windows 10.


Owwee! Essa primeira animação é difícil para os olhos.
Twisty Impersonator

Respostas:


3

Eu tenho um script AutoHotkey que gera esse efeito, embora eu ainda não tenha testado no Windows 10 - suponho que ele funcionará lá também. Eu queria a mesma funcionalidade para mostrar eventos automatizados de clique de mouse. Eu postei meu código fonte completo aqui para você tentar / usar / modificar e ver se funciona para você.

O script gera a animação a partir do zero (vs. mostrando um arquivo SVG ou GIF), por meio do desenho de círculos concêntricos a partir do ponto em que foi clicado. Isso permite o ajuste dos anéis concêntricos, seleção de cores, taxa de fade, tamanho, espessura, etc. Essas variáveis ​​são atualmente codificadas, mas são agrupadas se você quiser jogar com a aparência da animação. Não é tão polido quanto o SVG mostrado porque os círculos desenhados não são suavizados, mas o efeito é o mesmo.

A execução do script requer alguns conhecimentos básicos sobre como ativar o AutoHotkey, baixar a biblioteca GDIP e soltá-la na mesma pasta do script. Deixe um comentário se tiver algum problema para testá-lo.


Você pode fornecer um exemplo que funciona bem no Windows 10?
quarta

@Qaher O código fornecido não funciona para você?
Annan

@Annan Sim está funcionando. Você precisa primeiro fazer o download a Gdip_All.ahkpartir deste link, dropbox.com/sd/e9gdfetbfa8v0o/Gdip_All.ahk e renomeá-lo para GDIP.ahk, colocar este arquivo no mesmo diretório com o código-fonte que você deseja executar! Eu testei esses arquivos no Windows 10, está funcionando, mas também é feio e não é suavizado ou suavizado, é muito rápido e ruim!
Qaher

@Qaher É bom saber que está funcionando. Ele estava trabalhando para mim também no Windows 10. Seu comentário anterior fez parecer que não estava funcionando para você e é por isso que eu perguntei.
Annan

1

Aqui está outro script simples do AHK.

  • Não requer nenhuma biblioteca externa.
  • Funciona sem problemas no Windows 10.
  • Pode editar facilmente os parâmetros de ondulação no script.

Autor original: 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
}

Obrigado pela sua resposta, a suavidade é perfeitamente adequada, mas infelizmente quando você clica duas vezes em qualquer lugar, a animação não reinicia até que a primeira seja completamente feita!
Qaher
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.