Buenas,
Entre ayer y hoy se me dió por crear una pequeña tool que ni bien iniciada se minimiza al trayicon, y luego va "cronometrando" el tiempo que se pasa en una ventana. El registro lo guarda o bien en formato de texto (esta "hardcodeado" el formato), o bien en XML.
Para que se hagan una idea, el XML es más o menos así;
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfWatchedWindow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<WatchedWindow>
<Executable>c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe</Executable>
<ProcessId>5492</ProcessId>
<WindowText>WinWatcher (Running) - Microsoft Visual Studio</WindowText>
<ElapsedTime>00:00:01</ElapsedTime>
</WatchedWindow>
<WatchedWindow>
<Executable>C:\Program Files (x86)\Google\Chrome\Application\chrome.exe</Executable>
<ProcessId>6048</ProcessId>
<WindowText>(37) Twitter - Google Chrome</WindowText>
<ElapsedTime>00:00:16</ElapsedTime>
</WatchedWindow>
<WatchedWindow>
<Executable>C:\Program Files (x86)\Google\Chrome\Application\chrome.exe</Executable>
<ProcessId>6048</ProcessId>
<WindowText>Foro de elhacker.net - Índice - Google Chrome</WindowText>
<ElapsedTime>00:01:13</ElapsedTime>
</WatchedWindow>
<WatchedWindow>
<Executable>C:\Program Files (x86)\Windows Media Player\wmplayer.exe</Executable>
<ProcessId>6276</ProcessId>
<WindowText>Reproductor de Windows Media</WindowText>
<ElapsedTime>00:00:03</ElapsedTime>
</WatchedWindow>
</ArrayOfWatchedWindow>
La jerarquía en base a la cual se cronometran las ventanas es justamente la que se ve en el XML;
Ejecutable > PID de proceso > Texto de ventana
Existen dos momentos en los que se vuelcan los datos a archivo;
- Cada 15 minutos
- Al cerrar la aplicación
Con click derecho en el icono del trayicon se puede cambiar la configuración y ver el log actual sin necesidad del volcado
Descarga de código fuente: http://bit.ly/WinWatcher (C# Visual Express 2010)
Le quería dar un uso personal, pero tal vez luego le haga alguna mejora y/o refactoring de código, porque se por ejemplo que tiene un bug conocido, si en un navegador se cambia de pestaña no se refleja hasta bien no se minimize y vuelva a restaurar la ventana, y esto es porque preferí hookear el cambio de ventana en lugar de hacer polling con un timer, así que al cambiar de tab no se entera
Cualquier consulta y/o comentario ya saben
Saludos