PDA

View Full Version : [.Net 4.0/C#]Servizio windows


RaouL_BennetH
13-04-2011, 12:58
Ciao a tutti :)

Devo implementare un servizio quanto più semplice possibile che scriva su un file tutte le applicazioni aperte dall'utente durante una sessione.
A scanso di equivoci, dico che mi interessano solo le applicazioni che vengono aperte e non cosa ci fa, nel senso che se apre un browser, non mi interessa sapere dove ha navigato ma soltanto che un browser è stato aperto.

Tengo a precisare che non si tratta di software malevolo (tant'è che qualsiasi utente, prima di iniziare la sessione è tenuto a leggere e sottoscrivere un'informativa con relativa liberatoria).

Per chiarire ancora meglio (in modo che non si pensi a spyware o altro), in sostanza in azienda un pc è stato destinato al pubblico (clienti/fornitori) che durante la loro permanenza, in caso di attesa, possono utilizzare questo pc per qualsiasi motivo gradiscano (leggersi la posta, sistemare una presentazione, etc..) e siccome c'è in vigore una legge anti-terrorismo, si deve tenere traccia delle attività così come in un qualsiasi internet point.

Fatta questa premessa, io avevo pensato a qualcosa del genere sulla base di documentazione trovata su msdn:


using System.Runtime.InteropServices;

[DllImport("user32.dll")]
private static extern IntPtr GetForeGroundWindow();

[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder buffer, int counter);



Con GetForeGroundWindow ottengo il nome dell'applicazione corrente, mentre GetWindowText mi serve per controllare che, una volta aperta l'applicazione, venga poi 'usata' per qualcosa, ad es.:

Internet Explorer -> www___someAddress_dot_something
Microsoft Word -> Nuovo Documento

Innanzitutto, vorrei capire se questo è l'unica via da seguire per ottenere questo risultato.

Poi vorrei sapere, in un contesto di tipo 'servizio', la scelta più saggia in merito al timing dell'informazione, ovvero:

Una volta lanciato il servizio, come mi conviene recuperare queste info ogni tot (ad es. mediante un timer) ?

Grazie a tutti :)

RaouL.