begin process at 2012 05 29 09:25:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Idle - Hook - dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Idle - Hook - dll

jeudi 6 novembre 2003 à 09:41:11 | Idle - Hook - dll

Manson


Bonjour,

voila, j'ai trouve le code d'une dll permettant de savoir
depuis combien de temps le PC est inactif.
Mais voila, elle a un probleme, quelque fois elle passe
en idle alors que le pc est actif. Je ne trouve pas de solution, et je ne trouve aucun probleme similaire sur internet.

voila le code de la dll :

#include <windows.h>
#include <crtdbg.h>

/**
* The following global data is SHARED among all instances of the DLL
* (processes); i.e., these are system-wide globals.
**/
#pragma data_seg(".IdleTrac") // you must define as SHARED in .def
HHOOK g_hHkKeyboard = NULL; // handle to the keyboard hook
HHOOK g_hHkMouse = NULL; // handle to the mouse hook
DWORD g_dwLastTick = 0; // tick time of last input event
LONG g_mouseLocX = -1; // x-location of mouse position
LONG g_mouseLocY = -1; // y-location of mouse position
#pragma data_seg()
#pragma comment(linker, "/section:.IdleTrac,rws")

HINSTANCE g_hInstance = NULL; // global instance handle

/**
* Get tick count of last keyboard or mouse event
**/
__declspec(dllexport) DWORD IdleTracker_GetLastTickCount()
{
return g_dwLastTick;
}

/**
* Keyboard hook: record tick count
**/
LRESULT CALLBACK KeyboardTracker(int code, WPARAM wParam, LPARAM lParam)
{
if (code==HC_ACTION)
{
g_dwLastTick = GetTickCount();
}
return ::CallNextHookEx(g_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 != g_mouseLocX || pStruct->pt.y != g_mouseLocY)
{
g_mouseLocX = pStruct->pt.x;
g_mouseLocY = pStruct->pt.y;
g_dwLastTick = GetTickCount();
}
else if (wParam==WM_NCLBUTTONDOWN || wParam==WM_NCLBUTTONUP || wParam==WM_NCLBUTTONDBLCLK ||
wParam==WM_NCMBUTTONDOWN || wParam==WM_NCMBUTTONUP || wParam==WM_NCMBUTTONDBLCLK ||
wParam==WM_NCRBUTTONDOWN || wParam==WM_NCRBUTTONUP || wParam==WM_NCRBUTTONDBLCLK ||
wParam==WM_LBUTTONDOWN || wParam==WM_LBUTTONUP || wParam==WM_LBUTTONDBLCLK ||
wParam==WM_MBUTTONDOWN || wParam==WM_MBUTTONUP || wParam==WM_MBUTTONDBLCLK ||
wParam==WM_RBUTTONDOWN || wParam==WM_RBUTTONUP || wParam==WM_RBUTTONDBLCLK)
{
g_dwLastTick = GetTickCount();
}
}
return ::CallNextHookEx(g_hHkMouse, code, wParam, lParam);
}

/**
* Initialize DLL: install kbd/mouse hooks.
**/
__declspec(dllexport) BOOL IdleTracker_Start()
{
if (g_hHkKeyboard == NULL) {
g_hHkKeyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardTracker, g_hInstance, 0);
}
if (g_hHkMouse == NULL) {
g_hHkMouse = SetWindowsHookEx(WH_MOUSE, MouseTracker, g_hInstance, 0);
}

_ASSERT(g_hHkKeyboard);
_ASSERT(g_hHkMouse);

g_dwLastTick = GetTickCount(); // init count

if (!g_hHkKeyboard || !g_hHkMouse)
return FALSE;
else
return TRUE;
}

/**
* Terminate DLL: remove hooks.
**/
__declspec(dllexport) void IdleTracker_Stop()
{
BOOL bResult;
if (g_hHkKeyboard)
{
bResult = UnhookWindowsHookEx(g_hHkKeyboard);
_ASSERT(bResult);
g_hHkKeyboard = NULL;
}
if (g_hHkMouse)
{
bResult = UnhookWindowsHookEx(g_hHkMouse);
_ASSERT(bResult);
g_hHkMouse = NULL;
}
}

/**
* DLL's entry point
**/
int WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstance);
g_hInstance = hInstance;
break;
case DLL_PROCESS_DETACH:
//we do an unhook here just in case the user has forgotten.
IdleTracker_Stop();
break;
}
return TRUE;
}

/**
* This is to prevent the CRT from loading, thus making this a smaller
* and faster dll.
**/
extern "C" BOOL __stdcall _DllMainCRTStartup( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
return DllMain( hinstDLL, fdwReason, lpvReserved );
}


Voila si vous avez une idee, ca m'interresse.

D'avance merci.

Rno


Cette discussion est classée dans : code, dll, wm, wparam, hinstance


Répondre à ce message

Sujets en rapport avec ce message

Probleme de socket [ par alphaone ] // tcp_client.cpp*: définit le point d'entrée pour l'appli Appel d'une DLL à partir d'un code en C ? [ par hitachicm615 ] Bonjour à vous,J'ai un programme que j'ai codé en C.J'ai une carte d'experimentation livrée avec une DLL et je voulais savoir comment l'appeller dans Utilisation d'une dll c# dans du code c++ [ par renyone ] Bonjour à tous!J'espère que ce sujet ne fera pas doublon.J'aimerais pouvoir utiliser une dll que j'ai développée en c# dans du code C++ natif. Je n'ai DEV-C++ DLL VBA [ par fx_forum ] Bonjour, Pour acceller un code Excel VBA, j'aimerais sous-traiter des taches a une dll. C'est possible et il y a plein d'exemples sur ce site. Mais p Utilisation d'une Dll [ par sandy27 ] Bonjour,Je vais essayer d'être claire et aussi brève que possible. J'ai réçu d'un fournisseur un code C sous forme de Dll, contenant:- un .lib- un .dl WIN32 : Editbox non editable avec une boite de dialogue CHILD [ par Pistol_Pete ] BonjourVoila mon problème: J'ai créé une fenêtre et dans cette fenêtre j'ai une boite de dialogue avec le style WS_CHILD. Tous mes contrôles de cette exemple de creation et utilisation d'un simple dll . [ par bonapart002 ] Bonjour:je suis débutant en c++ .je travail  avec Borland C++ 5.01.je veux créer une dll puis l'utiliser dans un programme .pour cela j'ai crée  un pr créer une dll (appel de deux procédures) [ par vincenzo89 ] Bonjourje débute en C++, sous code block.J'ai un code qui est composé de 3 procédures.Je voudrais créer une dll avec ces procédures (dont une avec des Récupérer les événements sur une frame dans C++ via JNI [ par PleoX ] Bonjour,(J'espère avoir mis mon sujet dans le bon thème. J'ai pas trouvé de thème plus aproprié.)Je suis en train de créer une application multi-touch problème de passage de fonctions via dll [ par youppyy ] Bonjour, J'ai deux fonctions sont enregistrées dans une dll ecrite en langage C sur Dec-c++ : J'ai une fonction A qui renvoie une donnée et une fonct


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,825 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales