Não há nenhuma funcionalidade incorporada para fazer qualquer uma das coisas que você está solicitando no servidor ou no sistema operacional do cliente (e você não verá nenhuma nova funcionalidade passando do W2K para o W2K3 em seus servidores ). Você vai ter que codificar algo para conseguir o que deseja.
Em relação ao computador servidor, "logon" não significa o que você acha que faz. Um logon "Interativo" em um computador cliente definitivamente tem uma hora inicial e uma hora final. O "logon" do cliente para os computadores servidores remotos dependerá do que o cliente está fazendo. Os logons dos Serviços de Terminal de um cliente para um servidor são "Interativos" e compartilham as propriedades da sessão "Interativa" do próprio cliente.
Suponho que você provavelmente deseje saber a duração da sessão "Interativa" em um computador cliente. Você pode consultar a classe WMI Win32_LogonSession como uma maneira de obter essa informação.
Acho que você está pensando em usar os logs de eventos em um computador servidor para descobrir quando os computadores cliente passam por um logon "Interativo". Você não pode.
Executar a autenticação de domínio inicial ou acessar uma "unidade" mapeada "em um computador servidor de um computador cliente é um logon de" Rede "e os horários associados ao logon e logoff se relacionarão quando o cliente começar a acessar o recurso e quando o cliente (ou servidor) fecha a conexão para inatividade (ou um logoff "não mapeado" ou "Interativo" da sessão do cliente do usuário).
Você não deve pensar em "Logons de Domínio" ou em sessões de Arquivo e Impressão da Microsoft como sessões SSH ou TELNET em ter uma duração fixa que começa quando o usuário "efetua logon" e termina quando o usuário "efetua logoff". A conexão com o computador servidor pode subir e descer durante o uso normal do computador cliente. Usar o log de eventos do lado do servidor para determinar a duração de uma sessão "Interativa" em um computador cliente não é bom.
Há um código de exemplo aqui para detectar se a estação de trabalho está bloqueada: link Novamente, você pode adaptar que de C # para qualquer linguagem que possa chamar as APIs necessárias.
Parece que o resto do que você quer saber está no estado do protetor de tela, principalmente. Aqui está um artigo da Microsoft que descreve a verificação do estado do protetor de tela com uma chamada de API do Win32 (usando VB no exemplo, mas você pode fazê-lo em qualquer idioma que permita chamar essa API): link
Se você definir "inativo" como a proteção de tela em execução, poderá obter "ociosidade" da mesma maneira. Se você tem alguma definição diferente de "ocioso", então você está sozinho - o sistema operacional não o ajudará com isso.