desenvolvimento

Deixando o status de disponível no Teams

V1PERFX 3 min de leitura

O aplicativo não sabe exatamente o que você está fazendo. Para manter seu status como disponível, ele basicamente verifica se houve alguma atividade recente no mouse ou no teclado.

Resolvi isso com um script de AutoHotkey que dá uma mexida no mouse de tempos em tempos, ele anda um pixel e volta para o mesmo lugar.

O script está configurado pra ligar e desligar no F9, e o ícone da bandeja muda junto, para eu saber em qual estado ele está sem precisar abrir nada.

O script

#Requires AutoHotkey v2.0
#SingleInstance Force

ativo := false

; Ícone inicial
TraySetIcon(A_ScriptDir "\keep-off.ico")

F9::{
    global ativo

    ativo := !ativo

    if (ativo) {
        TraySetIcon(A_ScriptDir "\keep-on.ico")
        Agendar()
    } else {
        TraySetIcon(A_ScriptDir "\keep-off.ico")
        SetTimer(MoverMouse, 0)
    }
}

Agendar() {
    SetTimer(MoverMouse, -Random(60000, 180000))
}

MoverMouse() {
    global ativo

    if !ativo
        return

    MouseGetPos(&x, &y)
    MouseMove(x + 1, y, 0)
    Sleep(100)
    MouseMove(x, y, 0)

    Agendar()
}

Os dois ícones, keep-on.ico e keep-off.ico, precisam estar na mesma pasta do .ahk, sem eles o script reclama quando inicia.

O intervalo é randômico, e é aí que está a graça

A parte que faz o script randomizar é esta:

SetTimer(MoverMouse, -Random(60000, 180000))

O sinal de menos antes do Random é o que importa. No AutoHotkey, período negativo quer dizer dispare uma vez só. Sem ele, o timer repetiria para sempre naquele mesmo intervalo.

Como o timer morre depois de disparar, quem o traz de volta é o próprio MoverMouse(), que termina chamando Agendar() de novo. E aí o Random roda outra vez, escolhendo um novo número entre 60000 e 180000 milissegundos. Na prática, o mouse se mexe a cada 1 a 3 minutos, e nunca duas vezes com o mesmo espaçamento.

O movimento em si é ida e volta:

MouseGetPos(&x, &y)
MouseMove(x + 1, y, 0)
Sleep(100)
MouseMove(x, y, 0)

Registra onde o cursor está, anda um pixel para a direita, espera 100 ms para o sistema registrar que houve movimento, e volta o cursor para a posição original. O terceiro parâmetro 0 do MouseMove é a velocidade, e com esse valor o salto fica instantâneo, sem aquela animação do cursor deslizando pela tela.

Se você estiver usando o mouse na hora, o pequeno movimento passa despercebido. Se não estiver, o cursor volta para exatamente o mesmo lugar.

O if !ativo logo no começo do MoverMouse() é uma pequena proteção: se o F9 for apertado no intervalo entre o timer ser agendado e ele disparar, a função sai sem mexer em nada.

← voltar aos logs