Olá a todos, no post de hoje irei explicar como podemos determinar o tempo de inatividade da maquina pelo LastUserInput usando C# e powershell.
Muitas vezes para a execução de determinada rotina nos vemos em um cenário em que o script só pode ser executado caso, a maquina esteja idle por mais de x minutos. Para isso podemos utilizar a seguinte dica.
Iremos adicionar um namespace renomeado para Posh.idle, que no caso nao foi escrito por mim, mas também nao consegui localizar o autor.
Utilizaremos o comando Add-type para carregar o codigo em memória.
Add-Type @' using System; using System.Diagnostics; using System.Runtime.InteropServices;namespace PoSH.Idle {public static class UserInput { [DllImport("user32.dll", SetLastError=false)] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); [StructLayout(LayoutKind.Sequential)] private struct LASTINPUTINFO { public uint cbSize; public int dwTime; } public static DateTime LastInput { get { DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount); DateTime lastInput = bootTime.AddMilliseconds(LastInputTicks); return lastInput; } } public static TimeSpan IdleTime { get { return DateTime.UtcNow.Subtract(LastInput); } } public static int LastInputTicks { get { LASTINPUTINFO lii = new LASTINPUTINFO(); lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO)); GetLastInputInfo(ref lii); return lii.dwTime; } } } } '@
Após a execução do código o resultado em sí é bem simples e facilmente utilizado.
Chamando o NameSpace diretamente entre colchetes podemos verificar os resultados:
[PoSH.Idle.UserInput]
Pressionando a tecla TAB para autocomplete, podemos listar as propriedades que desejamos visualizar, por exemplo:
[PoSH.Idle.UserInput]::IdleTime
Em um exemplo Prático de aplicação podemos utilizar o seguinte snippet:
$time = ([PoSH.Idle.UserInput]::IdleTime).Milliseconds if($time -ge '15'){ Write-host 'Greater then 15 Milliseconds' } Else{ Write-host 'Less then 15 Milliseconds' }
No exemplo acima, será salvo o número de mili segundos de inatividade do computador/usuário, e se for superior a 15 irá exibir a mensagem ‘Greater then 15 Milliseconds’ senão, irá exibir ‘Less than 15 Milliseconds’.
Este é um exemplo bem simplista da aplicação deste código, porém pode ser utilizado das mais diversas formas.
Dúvidas? Sugestões? Comente!
Até a próxima!
3 Comments
Opa boa tarde que bom que voce se dedica ao powershell
eu tambem dou umas pinceladas no Powershell só pra passar tempo
abraços
Obrigado por acompanhar!
up