Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VERROUILLEUR D'APPLICATION


Information sur la source

Catégorie :Système Classé sous : verrouillage, système, raccourcis, clavier, hook Niveau : Expert Date de création : 05/05/2006 Date de mise à jour : 25/05/2006 01:29:02 Vu / téléchargé: 6 026 / 1 130

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce source comprend le composant TVerrouilleur qui permet de bloquer certaines fonctionnalités parfois indésirables pour un certain type de logiciel.

Les verrous gérés sont :
  * Les combinaisons de touches suivantes :
      CTRL + ESC       : Ouverture du menu "Démarrer".
      CTRL + ALT + SUP : Affichage du gestionnaire de tâches.
             ALT + TAB : Basculement entre les différents programmes ouverts.
             ALT + ESC : Réactivation d'une application ouverte

  * Les touches de clavier Microsoft ( et donc les raccourcis associés, comme par exemple "Logo Windows" + E ) :
      Touches Logo Windows
      Touche Applications
  
  * La barre des tâches

Ce composant est un singleton (un seul composant par application) facilement modifiable pour rajouter d'autres verrous.

Il a été testé UNIQUEMENT avec Delphi 7 et sous Windows XP SP2. Pour les autres versions de windows, à vous de tester.

 

Conclusion

Pour l'utilisation du composant, il suffit de le placer sur une fiche, de sélectionner les verrous que l'on veut activer, un à un, ou bien en utilisant le verrouillageTotal.

L'activation (respectivement la désactivation) des verrous se fait en mettant la propriété Actif à TRUE (respectivement FALSE).

ATTENTION !! Les verrous sont également fonctionnels dans le concepteur de fiches, et pas uniquement à l'execution.

Voici des exemples d'utilisation possible :

  * En combinaison avec un verrouillage par mot de passe, interdisant la fermeture du programme, ce composant garantira que seule l'application sera accessible.

  * Faire disparaitre la barre des tâches pour avoir accès en permanence à la totalité du bureau.
  

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

25 mai 2006 01:29:02 :
25/05/2006 : Correction du bug repéré par SRAVERDY (Lorsque le verrouillage total était désactivé tous les verrous existants étaient supprimés.)

Commentaires et avis

signaler à un administrateur
Commentaire de jeanr le 05/05/2006 21:00:45

Beau boulot :-)

signaler à un administrateur
Commentaire de SOUMIA le 05/05/2006 21:32:42

tres bien
ce composant ma aide dans mon logiciel de cyber
merci

signaler à un administrateur
Commentaire de WhiteHippo le 05/05/2006 23:21:07

Merci à tous les deux.

Cordialement.

signaler à un administrateur
Commentaire de Emandhal le 06/05/2006 01:52:01

"ATTENTION !! Les verrous sont également fonctionnels dans le concepteur de fiches, et pas uniquement à l'execution." <<< personnellement je trouve que c'est un problème. Mais ca n'engage que moi ^^

J'ajouterai cette ligne au tout début de chaque procedures et fonctions qui créent ce vérrouillage :

If (csDesigning in ComponentState) Then Exit;

Normalement après les touches fonctionneront quand on est dans le concepteur et plus du tout à l'exécution.

signaler à un administrateur
Commentaire de f0xi le 06/05/2006 05:59:42 administrateur CS

correction d'une petite erreur sur le type TVerrous :


TKeyLock = (vAltEsc, vAltTab, vCtrlEsc, vCtrlAltSup, vBarreDesTaches, vTouchesMicrosoft);
{ ps : on ne commence jamais une phrase par une virgule meme en code }
TKeyLockers = set of TKeyLock

cela permet d'avoir d'un coté les valeurs TVerrou et un Set de ces valeur.
ce qui nous permet de faire des tests de ce type :

if vAltEsc in Lockers then ...

ensuite on traduit correctement :

(vAltEsc, vAltTab, vCtrlEsc, vCtrlAltSup, vSysTray, vMicrosoftKey);

SetVerrouillageBarreDesTaches > SetLockSysTray
SetVerrouillageTouchesMicrosoft > SetLockMicrosoftKey
SetActif > SetActive
SetVerrouillageTotal > SetLockAll
SetVerrous > SetLockers

pas mal de chose qui ne vont pas, par exemple aucune gestion de l'evenementiel qui pourtant faciliterais le declanchement des methodes, des noms de methode a ralonge (UTILISEZ L'ANGLAIS!)
une methodologie hazardeuse ... bref ... y'a encore du boulot ...

signaler à un administrateur
Commentaire de f0xi le 06/05/2006 06:16:42 administrateur CS

il faut egalement tester et declancher des evenements :


par exemples :


private
  fLockers    : TKeyLockers;
  fLockAltEsc : boolean
  fLockAltTab : boolean

  procedure SetLocker(index : integer; value : boolean);

protected
  procedure ChangeLockers; virtual;

published
  property LockAltEsc : boolean index 0 read fLockAltEsc write SetLocker;
  property LockAltTab : boolean index 1 read fLockAltTad write SetLocker;


procedure TClasse.ChangeLockers;
begin
  ... traitements des verroux ...
end;

procedure TClasse.SetLocker(index : integer; value : boolean);
  procedure _Lock(lck : TLockers; Adding : boolean);
  begin
    if Adding then
       fLockers := fLockers + [lck]
    else
       fLockers := fLockers - [lck];
  end;
begin
  case Index of
    0 : if fLockAltEsc <> Value then
        fLockAltEsc := Value;
        _Lock(vAltEsc, fLockAltEsc);
        ChangeLockers;
    end;    
    1 : if fLockAltTab <> Value then
        _Lock(vAltTab, fLockAltTab);
        ChangeLockers;
    end;    
  end;
end;



et un dernier truc, bien verifier a la destruction qu'on restaure correctement l'etat du registre pour le taskmanager...
donc il faut sauvegarder son etat avant toute chose et restaurer cet etat tel qui doit l'etre quand on detruit le composant.

signaler à un administrateur
Commentaire de WhiteHippo le 06/05/2006 10:26:51





EMANDHAL, le fait d'avoir laissé le composant actif dans le concepteur de fiche permet de vérifier que tout fonctionne correctement durant la conception sans attendre la compilation puis l'execution. C'est un choix ! murement réfléchi que je ne changerais pas mais libre à quiconque de le faire.

FOXI, FOXI, FOXI .... ;P

"correction d'une petite erreur sur le type TVerrous"
  - Une erreur !! Le code compile pas ???? Sinon, c'est qu'il n'y a pas d'erreurs :P

"cela permet d'avoir d'un coté les valeurs TVerrou et un Set de ces valeur."
  - J'ai VOLONTAIREMENT défini un type ensemble TVerrous pour les verrous !!!
  - Quel serait l'intérêt de définir ICI un type TVerrou ? Ils n'ont d'intéret que réunis dans un ensemble.

"ce qui nous permet de faire des tests de ce type : if vAltEsc in Lockers then ..."
  - Là tu utilises l'opérateur "in" pour tester l'appartenance, et ??? je le fais déjà dans mon code : "SetVerrouillageAltEsc ( vAltEsc in FVerrous ) ;"

"ps : on ne commence jamais une phrase par une virgule meme en code"
  - ça fait longtemps que je n'ai pas participé à la dictée de Pivot. ;P
  - Si le code à été formatté de cet façon, il y a, là encore, des raisons. Notamment la clarté, la facilité de modification, etc ...
Je code depuis assez longtemps pour connaitre les conventions dont tu parles, mais au vu de mon experience et d'un codage quasi journalier j'ai fini par adopter MES PROPRES CONVENTIONS de formattage de code.
N.B. Même si je sais que m’opposer à la convention risque de me marginaliser, je le fais à bon escient. Tant pis pour ceux à qui ça ne plait pas.

"ensuite on traduit correctement" :
  - Je n'ai rien traduit dans mon code ??? Ce qui est en anglais, reste en anglais, les mots clés, les méthodes héritées, les constantes déjà définies, etc... les SetVerrous et GetVerrous par exemple font partis de MES PROPRES CONVENTIONS de codage ( Je prefere à LireVerrous et EcrireVerrous, c'est tout :)
  - L'utilisation de l'anglais dans le code, là encore vaste débat. Je code souvent les méthodes que je rajoute en français, ce qui ne pénalise en rien le code. Ici, on est sur un forum français, ne laissons pas le code à une élite anglophile. De nos jours il y a toujours des gens qui ne pratiquent pas ou alors très mal l'anglais.

"aucune gestion de l'evenementiel"
  - Cette remarque je l'attendais :D
  - Ce composant est un composant dit "Bas niveau" (pour ce qu'il fait), donc son code est à son effigie. Il n'est pas alourdi par des méthodes qui ne me semblent pas nécessaire.
A chaque fois que je l'ai utilisé, les verrous ont été fixés dans le concepteur et seule l'activation était faite dans le code. On ne passe pas son temps dans une application à modifier les verrous (Basculer le verrouillage du ALT-TAB ou faire apparaitre/disparaitre la barre de tâche) Donc NON pas d'évenements !!!

N.B. Il est cependant facilement modifiable pour vos propres besoins, c'est pour ça qu'il dérive du TComponent ;)

"une methodologie hazardeuse..."
  - Le hasard n'a rien à faire dans la programmation, mis à part peut être dans les programmes génétiques.

"bref ... y'a encore du boulot ..." :
  - Ca je sais pas trop comment l'interpréter :)

"verifier a la destruction qu'on restaure correctement l'etat du registre pour le taskmanager"
  - Entierement d'accord avec toi.
  - Pour ma défense, je ne l'ai pas fait car la clé utilisée n'est pas une clé standard de la base de registre, c'est à dire qu'elle n'existe pas d'origine, il faut la créer. Partant de cette idée, je n'ai effectivement pas pensé au cas où elle serait déjà présente. Je vais y remédier.

Cordialement.

signaler à un administrateur
Commentaire de kam_2006 le 06/05/2006 11:59:04

Bonjour
je partage l'idée de Emandhal.Les verrous sont aussi fonctionnels dans le concepteur de fiches, ce qui est un problème.

signaler à un administrateur
Commentaire de WhiteHippo le 06/05/2006 12:05:33

KAM_2006 Merci de lire la réponse au dessus.

Cordialement.

signaler à un administrateur
Commentaire de f0xi le 07/05/2006 06:13:39 administrateur CS

hello!

ouai desolé pour les remarques, comme tu le dis, c'est surtout une histoire de conventions ...
tu as les tiennes ... c'est bien ... aprés tout pourquoi pas ... je ne te force en rien ... juste que c'est une mauvaise habitude que tu a pris ... toute proportions gardées. ^^

pour la methodologie hazardeuse, c'etait peut etre un bien grand mots pour definir ce que j'entend par la ... en fait ... il me semble que meme si le probleme est geré efficacement il manque un ... je ne sais quoi ... qui fait que ... peut etre ton indentation de code qui me donne cette inpression... je ne saurais l'expliquer clairement.

pour le registre oui, ça m'a sauter au yeux tout de suite, car j'ai du me demener plusieurs fois contre des virus et trojan qui utilisés cette valeur du registre... donc la connaissant bien et surtout connaissant son effet sur le systeme (blocage non seulement du taskmanager mais egalement de l'adminbox), j'ai tout de suite remarquer que tu n'avais fait aucun control dessus, point trés important qui me semblais urgent de signaler.

Pour les evenements alors, ok, je comprend mieux ton approche et pourquoi tu n'a pas choisi ce genre de methode qui en effet, sont totalement inutile car tout est definit en conception et non en execution (quoique un peu, au moins a la creation et destruction).

Pour la traduction, la on ne serat pas d'accord et il serait dommage de partir sur un troll sans fin avec la fameuse question "write your code in english or not ?"
Mais loin de moi l'idée de faire une apologie elitiste de la langue anglaise dans le code.
C'est jsute peut etre que pour moi l'internationalisation voulue par internet est importante donc j'essaye de traduire au mieux mes identifiant en anglais ... Et si la traduction pose probleme, j'ajoute des explication complete et une trad en commentaire dans les sources de toute façon ... ce qui resoud en partie le probleme des non-anglophones ...
c'est juste qu'on soit francais, allemand, russe ou quoi, l'anglais "de base" et/ou "informatique" est assé comprehensibleet simple...
Tu m'aurais vus sur une Doc TurboPascal sur le ModeX commentée en Allemand avec des identifiant en Allemand egalement ... Doc Rare, introuvable presque ... j'ai du me resigné a ne pas l'utilisée... comme quoi ... et c'est aussi que l'anglais est composé de mots court et simple a retenir qui permettent donc d'ecrire des identifiant court et facilement comprehensible, SetValue, GetValue, ReturnValue, AddItem etc... comme je le dis souvent, imagine en français ou en bielo-russe ... DefinirValeur, RecupererValeur, RenvoyerValeur, AjouterElement ... BERK!
en plus ça rend le code Long et fastidieux a taper et plus c'est long, plus ça augmente les chances de fautes de frappes. Bref que des désaventage d'ecrire des identifiant en une langue autre que l'anglais.
mais bon ... ça ... c'est un soucis personnel ... comme la religion ou le sexe.

Pour ton indentation de code ... ben ... oui ... c'est la tienne quoi ... ^^

Pour le type TVerrou et TVerrous (Set) la aussi c'est une histoire de convention ... libre aprés de suivre ou pas...
les deux methodes fonctionne ... mais n'offre pas le meme lot depossibilitée ...

TFontStyle = (fsBold,fsItalic,fsUnderline,fsStrikeOut);
TFontStyles = set of TFontStyle;

TAsyncStyle =(asRead,asWrite,asOOB,asAccept,asConnect,asClose);
TAsyncStyles = set of TAsyncStyle;

ce qui permet par exemple d'ecrire des methodes de ce genre :

methode(FST : TFontStyle)
methode(ASYN: TAsyncStyle)

un peu comme quand on ecrit :

TCharArray = array of char;
TCharMatrix= array of TCharArray;

et

TCharMatrix = array of array of char;

dans la premiere declaration on pourras utilise le type TCharArray pour traiter les donnée ... dans la deuxieme declaration ... on devras travailler sur toute la matrice.

tu comprend pourquoi j'essaye de te demontrer l'importance de cela (bien que je pense que tu le sache deja).

et donc l'erreur, qui n'est effectivement pas une erreur de compil ou d'execution mais une "erreur" de declaration de type qui oblige une certaine façon d'ecrire le code et de traiter les donnée qui serat donc peu souple...

bien sur, si je dis tout cela, c'est dans le but de mieux comprendre pourquoi tu as fait comme cela mais egalement te donner un avis exterieur qui pourrais te donner des idées ...
voila.

sinon, cela reste bien sur un trés bon code et c'est pour cela que je m'y interresse tant et donc que j'ecris autant de "conneries" sur cette page... ^^

signaler à un administrateur
Commentaire de f0xi le 07/05/2006 22:52:03 administrateur CS

Petite suggestion pour les verroux actif a la conception, je pense qu'il serait bien d'ajouter un parametre ou un "editeur" qui permet de tester les verroux sans pour autant qu'il soit actif en permanence pendant la conception.
Un peut comme la propriété VisibleAtRuntime des dummycube de GLScene, tu pourrait mettre une prop EnabledAtConception ou dans le genre ...

je pense que ce serais vraiment mieux, surtout que la plupart du temps, quand on elabore un programme, il n'est pas rare de devoir "killer" le processus et donc dans ce cas, certain verroux (CtrlAltSup) pourraient rester actif ... ce qui peut etre un probleme.

signaler à un administrateur
Commentaire de Michele58 le 13/05/2006 23:08:38

C'est un bon composant pour travailler que sur une seul feuille (Form1).
Super et simple ce composant.
Je place des points au maximum.

Bizzz...
Michèle.

signaler à un administrateur
Commentaire de sraverdy le 24/05/2006 10:34:17

il y a un bug sous windows xp .....
si je met toucheswindows--> true et rien d'autre

lors de l'exécution de la fiche si on met l'instructions suivantes:
verouilleur1.active:=true;

ça ne marche pas

que faire???? car quand ont met total ça fonctionne???

merci

signaler à un administrateur
Commentaire de WhiteHippo le 25/05/2006 01:33:12

Merci SRAVERDY.

J'ai mis à jour le code du composant pour corriger le bug.

Cordialement.

signaler à un administrateur
Commentaire de WhiteHippo le 25/05/2006 01:35:00

Merci MICHELE58 pour les points.

Cordialement.

signaler à un administrateur
Commentaire de WhiteHippo le 25/05/2006 01:37:58

Enfin, ( puisque c'est la soirée des mercis :) Merci FOXI.
Je vais creuser l'idée d'un éditeur, histoire de voir ce que je peux en tirer.

Cordialement.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Supprimer les raccourcis clavier de window [ par jeje2 ] Bonjour,Je suis débutant en delphi, et malgrès les infos et autres sur ce site, j'arrive pas a suppimer les raccourcis clavier de window (Alt+Tab, Ctr Hook clavier sur windows XP et 9x [ par bebeb3 ] Bonjour, Je viens de finir un petit prog utilisant un hook du clavier.Sous Windows XP, il fonctionne parfaitement mais sous windows 9x, il plante d Créer des raccourcis système ? [ par f6dqm1 ] BonjourJe me pose la question de savoir si avec Windows (9X ou +) on peut cr&#233;er un raccourci syst&#232;me qui entre automatiquement dans un champ Hook clavier [ par Niki2001 ] Quand on fait un hook du clavier en utilisant WH_KEYBOARD_LL, on utilise la structure suivante:THookClavier = record&nbsp;&nbsp;&nbsp; vkCode: DWORD;& activer les raccourcis clavier [ par kam81 ] bonjour,j'ai un menu dans ma forme principale,dans lequel je d&#233;clare des raccourcis clavier pour ses differents elements dans leurs propri&#233;t Traduction descriptions raccourcis clavier [ par Indelphini ] Bonjour à tous, Encore une question de traduction ! Quand on met les flèches de direction comme shortcut d'un menu, on obtient 'Haut', 'Droite', 'Bas' hook clavier [ par mighty_warrior ] bonjours,je voulais savoir si le hook clavier fonctionne normalement sur n'importe quelles applications, que ce soit un jeu ou un programme de traitem enregiste touche clavier [ par ced55957 ] bonjourje voudrais que l'appli enegistre tout les touche du clavier . ex je tape "ordinateur" je voudrais que l'appli sauvegarde "odinateur"??estce po Informations système sous Xp [ par cincap ] Bonjour à tous,Y a t'il quelqu'un qui connaitrai la commande en Delphi pour faire apparaître la boîte des informations système soit l'équivalent de la raccourci clavier d'un outil [ par Guillemouze ] Attention tout le monde, question a 2 balles :Comment affecter un raccourci clavier a un outil que j'ai rajouté (par le menu outils=&gt;configurer les


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.