Hello All!

Can I get an user's inactivity time on PocketPC 2002.


Thanks
Vladimir Zinin

Re: User's inactivity time by KS

KS
Mon Feb 23 10:06:26 CST 2004

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
>
>
>



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
> >
> >
> >
>
>