Re: User's inactivity time by KS
KS
Mon Feb 23 10:25:07 CST 2004
If anyone figures out how to get mouse clicks, please let me know.
KS
kschlegelmilch<at>bluedotsolutions<dot>com
"KS" <ks@blah.com> wrote in message
news:%23mc4%23bi%23DHA.4084@tk2msftngp13.phx.gbl...
> This is a "work in progress", so don't expect it to look pretty. You can
> only capture key strokes and not mouse clicks to reset the timer. So if
> all they're doing is clicking, then it won't reset the idle time.
>
> --- .h file
>
> #if
>
!defined(AFX_CIdleTracker_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_
> )
> #define
AFX_CIdleTracker_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_
>
> #if _MSC_VER > 1000
> #pragma once
> #endif // _MSC_VER > 1000
>
> #include <windows.h>
> #include <winuser.h>
>
> #if defined(UNDER_CE)
>
> #define WH_JOURNALRECORD 0
> #define WH_JOURNALPLAYBACK 1
> #define WH_KEYBOARD_LL 20
>
> #define HC_ACTION 0
> #define HC_GETNEXT 1
> #define HC_SKIP 2
> #define HC_NOREMOVE 3
> #define HC_SYSMODALON 4
> #define HC_SYSMODALOFF 5
>
> #define HC_NOREM HC_NOREMOVE
> #define WH_KEYBOARD WH_KEYBOARD_LL
>
> typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM
> lParam);
> typedef HHOOK (__stdcall *SetWindowsHookExW)(int, HOOKPROC, HINSTANCE,
> DWORD);
> typedef LRESULT (__cdecl *CallNextHookEx)(HHOOK, int, WPARAM, LPARAM);
> typedef LRESULT (__cdecl *UnhookWindowsHookEx)(HHOOK);
>
> #endif
>
> class CIdleTracker
> {
>
> public:
>
> DWORD IdleTrackerGetLastTickCount();
> BOOL IdleTrackerInit();
> void IdleTrackerTerm();
>
> public:
>
> static DWORD m_dwLastTick; // tick time of last input event
> static HHOOK m_hHkKeyboard; // handle to the keyboard hook
>
> #if defined(UNDER_CE)
>
> static HINSTANCE m_hLibrary;
> static HHOOK m_hHook;
> static CallNextHookEx m_pfCallNextHook;
> static SetWindowsHookExW m_pfSetWindowsHook;
> static UnhookWindowsHookEx m_pfUnhookWindowsHook;
>
> #else
>
> static HHOOK m_hHkMouse; // handle to the mouse hook
> static LONG m_mouseLocX; // x-location of mouse position
> static LONG m_mouseLocY; // y-location of mouse position
>
> #endif
>
>
> };
>
> #endif //
>
!defined(AFX_CIdleTracker_H__99976B4B_DBA1_4D1E_AA14_CBEB63042FD1__INCLUDED_
> )
>
> ---- .cpp file
>
> #include "stdafx.h"
> #include "TPS_IdleTracker.h"
>
> #ifdef _DEBUG
> #undef THIS_FILE
> static char THIS_FILE[]=__FILE__;
> #define new DEBUG_NEW
> #endif
>
> // -----------------------------------------------------------
>
> DWORD CIdleTracker::m_dwLastTick = 0; // tick time of last input event
> HHOOK CIdleTracker::m_hHkKeyboard = NULL;
>
> #if defined(UNDER_CE)
>
> HINSTANCE CIdleTracker::m_hLibrary = NULL;
> CallNextHookEx CIdleTracker::m_pfCallNextHook = NULL;
> SetWindowsHookExW CIdleTracker::m_pfSetWindowsHook = NULL;
> UnhookWindowsHookEx CIdleTracker::m_pfUnhookWindowsHook = NULL;
>
> LRESULT CALLBACK KeyLogProc(int code, WPARAM wParam, LPARAM lParam)
> {
> //
> if(code == HC_ACTION)
> {
> CIdleTracker::m_dwLastTick = GetTickCount();
> }
> return CIdleTracker::m_pfCallNextHook(CIdleTracker::m_hHkKeyboard, code,
> wParam, lParam);
> }
>
> #else
>
> HHOOK CIdleTracker::m_hHkMouse = NULL; // handle to the mouse hook
> LONG CIdleTracker::m_mouseLocX = -1; // x-location of mouse position
> LONG CIdleTracker::m_mouseLocY = -1; // y-location of mouse position
>
> /**
> * Keyboard hook: record tick count
> **/
> LRESULT CALLBACK KeyboardTracker(int code, WPARAM wParam, LPARAM lParam)
> {
> if (code == HC_ACTION) {
> m_dwLastTick = GetTickCount();
> }
> return CallNextHookEx(m_hHkKeyboard, code, wParam, lParam);
> }
>
> /**
> * Mouse hook: record tick count
> **/
> LRESULT CALLBACK MouseTracker(int code, WPARAM wParam, LPARAM lParam)
> {
> if (code==HC_ACTION) {
> MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lParam;
> //we will assume that any mouse msg with the same locations as spurious
> if (pStruct->pt.x != m_mouseLocX || pStruct->pt.y != m_mouseLocY)
> {
> m_mouseLocX = pStruct->pt.x;
> m_mouseLocY = pStruct->pt.y;
> m_dwLastTick = GetTickCount();
> }
> }
> return ::CallNextHookEx(m_hHkMouse, code, wParam, lParam);
> }
>
> #endif
>
> // -----------------------------------------------------------
>
> /**
> * Get tick count of last keyboard or mouse event
> **/
> DWORD CIdleTracker::IdleTrackerGetLastTickCount()
> {
> return m_dwLastTick;
> }
>
> /**
> * Initialize DLL: install kbd/mouse hooks.
> **/
> BOOL CIdleTracker::IdleTrackerInit()
> {
>
> BOOL aRetVal = TRUE;
> HINSTANCE aInstance = AfxGetInstanceHandle();
>
> m_dwLastTick = GetTickCount();
>
> #if defined(UNDER_CE)
>
> m_hLibrary = LoadLibrary(L"coredll.dll");
> if(m_hLibrary == NULL)
> {
> TRACE(_T("Could not LoadLibrary(coredll.dll)\n"));
> aRetVal = FALSE;
> }
> else
> {
> m_pfSetWindowsHook = (SetWindowsHookExW)GetProcAddress(m_hLibrary,
> L"SetWindowsHookExW");
> if(m_pfSetWindowsHook == NULL)
> {
> TRACE(_T("Could not GetProcAddress(SetWindowsHookExW)\n"));
> aRetVal = FALSE;
> }
> else
> {
> m_hHkKeyboard = m_pfSetWindowsHook(WH_KEYBOARD_LL, KeyLogProc,
aInstance,
> 0);
> if(m_hHkKeyboard == NULL)
> {
> TRACE(_T("Could not SetWindowsHook(WH_KEYBOARD_LL)\n"));
> aRetVal = FALSE;
> }
> }
> m_pfCallNextHook = (CallNextHookEx)GetProcAddress(m_hLibrary,
> L"CallNextHookEx");
> if(m_pfCallNextHook == NULL)
> {
> TRACE(_T("Could not GetProcAddress(CallNextHookEx)\n"));
> aRetVal = FALSE;
> }
> m_pfUnhookWindowsHook = (UnhookWindowsHookEx)GetProcAddress(m_hLibrary,
> L"UnhookWindowsHookEx");
> if(m_pfUnhookWindowsHook == NULL)
> {
> TRACE(_T("Could not GetProcAddress(UnhookWindowsHookEx)\n"));
> aRetVal = FALSE;
> }
> }
>
> return aRetVal;
>
> #else
>
> if (m_hHkKeyboard == NULL) {
> m_hHkKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardTracker,
aInstance,
> 0);
> }
> ASSERT(m_hHkKeyboard);
>
> if (m_hHkMouse == NULL) {
> m_hHkMouse = SetWindowsHookEx(WH_MOUSE, MouseTracker, aInstance, 0);
> }
> ASSERT(m_hHkMouse);
>
> if (!m_hHkKeyboard || !m_hHkMouse)
> return FALSE;
> else
> return TRUE;
>
> #endif
>
> }
>
> /**
> * Terminate DLL: remove hooks.
> **/
> void CIdleTracker::IdleTrackerTerm()
> {
>
> #if defined(UNDER_CE)
>
> if(m_hHkKeyboard)
> {
> m_pfUnhookWindowsHook(m_hHkKeyboard);
> m_hHkKeyboard = NULL;
> }
>
> if(m_hLibrary)
> {
> FreeLibrary(m_hLibrary);
> m_hLibrary = NULL;
> }
>
> #else
>
> if(m_hHkKeyboard)
> {
> UnhookWindowsHookEx(m_hHkKeyboard);
> m_hHkKeyboard = NULL;
> }
> if(m_hHkMouse)
> {
> UnhookWindowsHookEx(m_hHkMouse);
> m_hHkMouse = NULL;
> }
>
> #endif
>
> }
>
>
>
>
> "Vladimir Zinin" <zinin@eldos.org> wrote in message
> news:c1d5al$1m1$1@news.dg.net.ua...
> > Hello All!
> >
> > Can I get an user's inactivity time on PocketPC 2002.
> >
> >
> > Thanks
> > Vladimir Zinin
> >
> >
> >
>
>