VB.Net Code Help in logging user activity.
Hi All,
I am trying to make application similar to Worktime.
http://www.nestersoft.com/worktime/
[No no, I am not trying to create a competing product but I want to create a simple application for my personal use + learn more of .NET]
Now, requirement is that this tool should capture the time user has spent on particular application. I looked in to Process class under System.Diagnostics namespace but it can tell me which processes are running, does it have window title etc. But I coudln't find property which indicates that this process is currently receiving user input/focuc.
Is there any object which gives me details about the application which user is interacting with? Also get event indicating that user has started using another application??
Any links/resources/sample code will be really helpful.
JD
http://jdk.phpkid.org
JD
Saturday, November 22, 2003
Only one window at a time can receive focus. So check which application is active, as that is the window receiving focus.
Then time it.
Saturday, November 22, 2003
And that is what I want to know. How do I know which application is 'active'?
Let me relook at process class properties/methods.
JD
http://jdk.phpkid.org
JD
Saturday, November 22, 2003
It's hard for me to believe that no one here as any pointers/suggestions to offer??
Guys, please help me!!!!!!
JD
JD
Sunday, November 23, 2003
How about the Windows API function called "GetForegroundWindow".
Christopher Wells
Sunday, November 23, 2003
Yep,
I just found it before I could check the this forum again!
I will re-state that my aim is to find how much time user has spent on each of the window he has opened.
I am using timer control with interval of 1 second.
I am capturing foreground window and checking if I already have that 'Window Title' in my list. If yes, then I add one second to the time spent for that particular window.
Here's how I have done as of now.
Declare Function GetActiveWindow Lib "user32.dll" () As Integer
Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As Integer
Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Integer) As Integer
Declare Function GetForegroundWindow Lib "user32" () As Integer
Private Sub tmrPoll_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrPoll.Tick
Dim hwnd As Integer = GetForegroundWindow
Dim sBuild As New System.Text.StringBuilder(GetWindowTextLength(hwnd) + 1)
GetWindowText(hwnd, sBuild, sBuild.Capacity)
Dim iSeconds As Integer
If htApps.ContainsKey(sBuild.ToString()) Then
htApps.Item(sBuild.ToString) = htApps.Item(sBuild.ToString) + 1
Else
htApps.Add(sBuild.ToString(), 0)
End If
End Sub
Have I picked up the correct way OR you think that same thing can be achieved in much better way?
Kindly share your views,
Thanks,
JD
JD
Sunday, November 23, 2003
What if the user goes for lunch or even leaves the computer on overnight - do you keep logging the window that they left open??
DJ
Monday, November 24, 2003
Just an idea. I guess you can also look at the mouse movement. Something like -- if no mouse movement for xx minutes that stop the clock...
Liam
Friday, November 28, 2003
Recent Topics
Fog Creek Home
|