# Changelog - Cliente NoIdle Corrigido ## 🔧 Correções Implementadas ### 1. **Captura de Janela Ativa Corrigida** - ✅ Função `get_active_window_info()` agora sempre tenta capturar dados reais - ✅ Garante que o nome do processo tenha `.exe` - ✅ Se não conseguir o título, usa o nome do processo - ✅ **NUNCA** retorna "System Idle" se há uma janela ativa ### 2. **Lógica de Monitoramento Melhorada** - ✅ Sempre tenta enviar dados reais quando há janela ativa - ✅ Só envia "[IDLE]" quando realmente não consegue capturar janela E usuário está ocioso - ✅ Verifica se usuário está ocioso antes de marcar como idle ### 3. **Intervalo de Monitoramento Ajustado** - ✅ Mudado de 1 minuto para **10 segundos** (mais frequente) - ✅ Captura mudanças de aplicativo mais rapidamente ### 4. **Heartbeat Implementado** - ✅ Envia heartbeat a cada 30 segundos para manter dispositivo ativo - ✅ Garante que dispositivo apareça como online mesmo sem atividade ### 5. **Tratamento de Erros Melhorado** - ✅ Melhor tratamento de exceções em todas as funções - ✅ Logs mais informativos para debug - ✅ Continua funcionando mesmo se uma parte falhar ### 6. **Histórico de Navegação** - ✅ Melhor tratamento de erros ao ler histórico do Chrome/Edge - ✅ Valida URLs antes de enviar - ✅ Remove duplicatas e URLs inválidas ### 7. **Ativação Corrigida** - ✅ Corrigido para salvar `device_id` corretamente após ativação - ✅ Validação melhor do resultado da ativação ## 📋 O que foi corrigido especificamente: ### Antes (ERRADO): ```python if idle_time > (IDLE_THRESHOLD * 60): send_activity_log(device_id, '[IDLE]', 'System Idle', int(idle_time)) elif window_info: send_activity_log(...) ``` **Problema:** Enviava "[IDLE]" mesmo quando havia janela ativa se o tempo ocioso fosse alto. ### Depois (CORRETO): ```python if window_info and window_info.get('window_title') and window_info.get('process_name'): # Sempre enviar dados reais se há janela ativa if idle_time_seconds > IDLE_THRESHOLD: # Ocioso mas ainda tem janela send_activity_log(device_id, window_title, application_name, idle_time_seconds, urls) else: # Ativo send_activity_log(device_id, window_title, application_name, 0, urls) else: # Só enviar "[IDLE]" se realmente não conseguiu capturar janela if idle_time_seconds > IDLE_THRESHOLD: send_activity_log(device_id, '[IDLE]', 'System Idle', idle_time_seconds, None) ``` ## 🎯 Resultado Esperado Agora o cliente deve enviar: - ✅ Títulos reais das janelas (ex: "Visual Studio Code", "Documento - Word") - ✅ Nomes reais dos executáveis (ex: "Code.exe", "WINWORD.EXE", "chrome.exe") - ✅ URLs do Chrome/Edge quando disponíveis - ✅ Eventos de logon/logoff - ✅ Heartbeat regular ## 📦 Para Rebuild 1. Instalar dependências: ```bash pip install pyinstaller psutil pywin32 requests pystray pillow schedule ``` 2. Criar executável: ```bash pyinstaller --onefile --windowed --icon=icon.ico --name=NoIdle CLIENTE_CORRIGIDO.py ``` 3. O executável estará em `dist/NoIdle.exe`