No sé qué tal funcione pero puedes probar esto.
En el timer comparas la hora actual con la última hora de actividad, Si la diferencias es mayor de la tolerada cierras la ventana.
Por otra parte colocas una componente ApplicationEvents (paleta "Additional") y en su evento OnMessage pones:
Código Delphi
[-]
if
((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST))
or
(Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)
then
begin
end;
El condicional te dice si se ha recibido algún mensaje del teclado o del ratón.
La segunda pregunta nada tiene que ver con la primera así que será mejor que abras otro hilo para ella.
// Saludos