1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| // ATTENTION :
// si on active la case à cocher "A la reprise, proteger par mot de passe" sous l'onglet
// "ecran de veille" de la boite de dialogue "Propriété d'affichage", l'ecran de veille s'execute
// sur son propre bureau
// Si cette case à cocher est décochée, l'ecran de veille s'execute sur le bureau par defaut
// Cette fonction n'est executée que lors de l'ecran de veille AVEC mot de passe
// (sinon, on sort du mode secret avec le Hook)
BOOL CMonService::monitor_desktop()
{
BOOL ret;
CString Desktop;
HDESK hDesktop;
TCHAR tmp[256];
DWORD lpnLengthNeeded;
CString str_winlogon = _T("Winlogon");
CString str_tmp;
BOOL winlogon_desktop;
if (m_etat_mouse == MOUSE_INIT) // En mode secret
{
// Determiner le desktop actif
Desktop = _T("WinSta0\\");
// Récupération du Desktop actif
hDesktop = OpenInputDesktop(0,TRUE,GENERIC_READ|GENERIC_WRITE);
ret = (hDesktop != NULL);
if (ret)
{
ret = GetUserObjectInformation(hDesktop,UOI_NAME,tmp,256,&lpnLengthNeeded);
if (!ret) CloseHandle(hDesktop);
}
if (ret)
{
// Determiner si le desktop est Winlogon.
str_tmp = tmp;
winlogon_desktop = (str_tmp.CompareNoCase(str_winlogon) == 0);
// Si le mode veille possede un mot de passe
// Revenir en mode NON secret
if (m_bMuteStatus && winlogon_desktop )
{
m_etat_mouse = MOUSE_OFF;
// Fin du mode secret
SendNotifyMessage (m_hWnd, MONMSG_MUTE_END, 0, 0);
}
}
}
return ret;
} |
Partager