Menu Demarrer

Résolu
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009 - 13 avril 2005 à 12:33
Niki2001 Messages postés 85 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 17 décembre 2005 - 13 juil. 2005 à 20:09
salut les Pro

Je suis sur un projet et j'arrive a cacher le bouton Demarrer de windows mais la touche windows du clavier me pose probleme en pet toujour ouvrir la bar de programme
y a t-il un moyen de bloquer cette touche (Seul) ou de cacher la barde programme ou la desactiver sans cacher la bar des taches

plus on vie plus on apprend

8 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
14 avril 2005 à 13:34
N.B. Par la suite le code en rouge est sensé être déjà présent !!!

Tu crées un nouveau projet., (ou tu utilises le tien, ATTENTION, si c'est le cas ce n'est pas Form1 ou TForm1 que tu auras !!)

Tu ajoutes dans la section interface de ta fiche principale sous le code existant la variable du hook et la definition de la fonction d'interception des messages clavier (code en noir).
var
Form1: TForm1;
HookClavier : HHook ;


function HookClavierCallBack ( Code : Integer
; WParam : Word
; LParam : LongInt
) : LongInt ; stdcall ;

implementation

Tu ajoutes dans la section implementation le code de la structure d'information clavier et la fonction d'interception des messages clavier (code en noir)

implementation

type
// Structure pour recueillir les informations clavier
PHookClavierInfo = ^THookClavierInfo ;
THookClavierInfo = record
vkCode : DWORD ;
scanCode : DWORD ;
flags : DWORD ;
time : DWORD ;
dwExtraInfo : PULONG ;
end ;

// La fonction d'interception du hokk clavier
function HookClavierCallBack ( Code : Integer
; WParam : Word
; LParam : LongInt
) : LongInt ; stdcall ;
var
Infos : PHookClavierInfo ;
begin Result :0 ; //0 pas d'inhibition des touches
if ( Code = HC_ACTION ) then
begin
Infos := PHookClavierInfo( LParam );
case WParam of
WM_KEYDOWN : // Interception des touches appuyées
begin
case ( Infos^.vkCode ) of
VK_LWIN , VK_RWIN : Result :1 ; //1 inhibition des touches concernées
end ;
end ;
end ;
end ;
end ;


Tu ajoutes à ta fiche les deux evenements suivant : OnCreate et OnDestroy (Se positionner sur la fiche, F11 editeur de propriété, sélection onglet evenement et doubleclick sur zone saisie du Oncreate puis du OnDestroy)
Delphi a alors créer le code associé aux evenements. Dans chacune de ces procedures tu rajoutes le code fourni (en noir)

// Installation du hook clavier
procedure TForm1.FormCreate(Sender: TObject);
const
WH_KEYBOARD_LL = 13 ; // low level keyboard, non défini d'origine dans l'unité Windows
begin
HookClavier := SetWindowsHookEx( WH_KEYBOARD_LL
, @HookClavierCallBack
, HInstance
, 0
) ;
end;

// Retrait du hook clavier
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx( HookClavier ) ;
end;

Tu compiles ton projet, et hop c'est tout bon.

Cordialement.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
13 avril 2005 à 16:31
Bon alors rapido :
Qu'est ce qu'il faut faire ? Un hoo (Non pas celui de Peter Pan..., celui de Bill Gates)
Comment ? Comme ça.

Ajout dans la section interface
var
Form1: TForm1;
HookClavier : HHook ;


function HookClavierCallBack ( Code : Integer
; WParam : Word
; LParam : LongInt
) : LongInt ; stdcall ;

Ajout dans la section implementation

type
// Structure pour recueillir les informations clavier
PHookClavierInfo = ^THookClavierInfo ;
THookClavierInfo = record
vkCode : DWORD ;
scanCode : DWORD ;
flags : DWORD ;
time : DWORD ;
dwExtraInfo : PULONG ;
end ;

// La fonction d'interception du hokk clavier
function HookClavierCallBack ( Code : Integer
; WParam : Word
; LParam : LongInt
) : LongInt ; stdcall ;
var
Infos : PHookClavierInfo ;
begin Result :0 ; //0 pas d'inhibition des touches
if ( Code = HC_ACTION ) then
begin
Infos := PHookClavierInfo( LParam );
case WParam of
WM_KEYDOWN : // Interception des touches appuyées
begin
case ( Infos^.vkCode ) of
VK_LWIN , VK_RWIN : Result :1 ; //1 inhibition des touches concernées
end ;
end ;
end ;
end ;
end ;


// Installation du hook clavier
procedure TForm1.FormCreate(Sender: TObject);
const
WH_KEYBOARD_LL = 13 ; // low level keyboard, non défini d'origine dans l'unité Windows
begin
HookClavier := SetWindowsHookEx( WH_KEYBOARD_LL
, @HookClavierCallBack
, HInstance
, 0
) ;
end;


// Retrait du hook clavier
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx( HookClavier ) ;
end;

Cordialement.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
13 avril 2005 à 16:34
Oups tout le monde aura rectifier il s'agissait d'un HOOK pas d'un HOO .

Cordialement.
0
cs_MAsterC Messages postés 217 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 19 décembre 2012
13 avril 2005 à 16:41
Salut,

en faite si tu veux désactivé les tousches Windows de ton clavier voici les Constantes et leurs caractère ASCII.

Pour la touche Windows Gauche: VK_LWIN 91
Pour la touche Windows Droite:
VK_RWIN 92

Donce voici un petit exemple...

*On peut supprimer le traitement par défault d'un caractère en affectant la valeur zéro au paramètre Key.

Dans l'événement OnKeyPress possède le paramètre Key de type Char qui permet de tester un caractère ASCII. Le paramètre Key spécifie le caractère représenté par la touche enfoncée et pas le code de touche virtuel Windows.

if key = VK_LWIN then
begin
key = 0;
end;

Voila, j'esprère que j'ai bien compris ta question et que ma réponse va t'aider.
Si l'exemple ne fonctionne pas, fait une recherche sur le site et tu trouvera quelques choses.

MAsterC
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
13 avril 2005 à 17:23
Il y a une solution simple et radicale.



Désactivation de la touche démarrer :

SystemParametersInfo(SPI_SCREENSAVERRUNNING, Ord(True), nil, 0);



(Ré)Activation de la touche démarrer :

SystemParametersInfo(SPI_SCREENSAVERRUNNING, Ord(False), nil, 0);



Bonne prog'
0
koaiz Messages postés 49 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 8 août 2009
14 avril 2005 à 12:07
Salut les Pro
Tous dabord merci de se soicier de mes problemes

pour la premiere reponce j'ai esseyer de l'utiliser sans succes !!!
je n'ai pas su comment utiliser la fonction je croit qu'elle demarre auto dans OnCreate.
si WhiteHippo peut donner plus d'explication ca sera pas de refus

pour la reponce de MAsterC lorsqu'on appuit sur une touche windows c'est Windows qui prent la prioriter donc pas de temps pour intercepter la frape avec KeyPreview

Pour la reponce de japee ca ne fonction pas. le menu demarrer marche toujours si ca desactive le boutton demarrer c'est la meme chose il marche toujours.

plus on vie plus on apprend
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
14 avril 2005 à 17:22
La question était :



"j'arrive a cacher le bouton Demarrer de windows mais la touche windows du clavier me pose probleme en pet toujour ouvrir la bar de programme"



Mon code répond au problème que tu nous exposais au départ, me semble-t'il...



Bonne prog'
0
Niki2001 Messages postés 85 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 17 décembre 2005 1
13 juil. 2005 à 20:09
Question pour WhiteHippo: ce code que tu as donné m'intéresse beaucoup et je voudrais bien savoir a quoi correspondent scancode, flags, time et dwExtraInfo. Si tu regarde ce message (toi ou un autre qui peut m'aider, d'ailleurs!)....
0
Rejoignez-nous