Empecher le changement de fênetre

Signaler
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008
-
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008
-
Bonjour,



Je voudrais savoir s'il y a une technique pour empecher l'utilisateur
de sélectionner une autre fênetre que celle de mon appli ( j'ai essayé
avec WM_ACTIVATE, WM_KILLFOCUS et les API SetForegroundWindow,
SetFocus, ... mais rien n'y fait)



Merci pour vos réponse.

Clem0338

16 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Mets ta fenetre en Maximized, puis ajoute lui le style top on most.
Elle sera tout le temps au premier plan.
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

Merci, mais malheureusement, je voudrais quel ne soit pas en Maximized justement, (je suis chiant non ??? )



Je pensai aussi à faire un clip cursor, mais finallement, ca ne va pas avec le projet



Merci encore

Clem0338
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
J'oubliais,
Pour le style top most c'est : WS_EX_TOPMOST
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
SetWindowLong( hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) | WS_EX_TOPMOST );

Vala :p
if(!Meilleur("Joky")) return ERREUR;
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
L'autre solution est alors de faire un hook globale sur la souris.
Tu detectes les clics souris qui sont en dehors de ta zone client et si c'est le cas tu redonnes le focus a ta fenetre.
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Lol c'est une autre méthode ouai :D

Une autre encore, c'est de lister toutes les fenêtres, et toutes les cachées et voila lol :p



Le hook ca va loin quand même
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Qu'une fenêtre soit topmost n'empêche pas l'utilisateur d'en mettre une autre au 1er plan, le system modal a disparu avec le 16 bits, depuis le 32 bits l'utilisateur doit toujours avoir la main.
On peut détecter le changement d'app de 1er plan et y ramener la sienne mais totalement déconseillé, ceci s'apparenterait à un virus ou autre truc malfaisant.

ciao...
BruNews, MVP VC++
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

OK;

if ( poli ) {

MessageBox ( NULL, "Merci pour vos réponse, j'ai pas
trouvé mon bonheur mais je vais faire avec", "..::Encode merci::..",
MB_ICONEXCLAMATION );

} else {

MessageBox ( NULL, "Ouaips", "Pourquoi pas",
MB_ICONERROR );

}

Clem0338;
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

BruNews,

l'application que je suis en train de développer doit servir
d'interface utilisateur sur un PC dédié à cette interface, le but etant
d'empecher "monsieur tout le monde" d'acceder à Windows



pourrais tu développer ton explication STP.



Merci

Clem0338
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
oui j'entrevoyais ce que tu veux mais il n'y a pas trop moyen d'empêcher l'utilisateur de naviguer entre les progs.
On peut intercepter WM_ACTIVATEAPP et ramener son prog devant mais pas très joli. Il faudrait refaire un shell et remplacer celui de Windows.

ciao...
BruNews, MVP VC++
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

Cool, merci pour ta réponse, aurais tu par hazard quelques zéxemples?
Merci pour cette réponse qui me parrait beaucoup mieux correspondre à
mon attente

Clem0338
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Pourquoi ne pas mettre la fenetre en Maximized, supprimer la barre de titres et faire un hook sur le raccourci clavier comme Ctrl+Alt+Suppr, Al+Tab, ALt + Echap...

Les utilisateurs n'aurait d'autre choix que se se servir de ton appli a moins de rebooter le PC.

Pour info, c'est ce qui est fait ans les logiciels industrielles.

Cette solution reste propre et très évolutive. Par la suite tu pourras toi meme géré tes raccourcis, afin de donner la possibilités d'ouvrir d'autre programme.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Joky> Pour mettre une fenetre au premier plan, pas besoin de passer par SetWindowLong...
Soit tu le fais a la création en passant le style WS_EX_TOPMOST, soit tu le fais a n'importe quel moment dans ton prog avec :

SetWindowPos(hWnd,HWND_TOPMOST,X,Y,CX,CY,0);

X, Y etant les coordonnées du coin haut gauche de ton appli.
CX, CY etant la taille de ta fenetre.
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

C'est exactement ce que je fais actuellement ( un hook sur le clavier
pour bloquer les touches + "DLL Injection" pour bloquer CAD +
suppression de la barre des taches et des icones du bureau, Hook sur la
souris pour bloquer clic sur le bureau ).



Pour le TOP_MOST, je le fais directement avec CreateWindowEx( WS_EX_TOPMOST, "toto", ....



Il ne me manque plus que l'intégration en tant que shell (j'ai déjà
trouvé quelques choses intérressante pour ca, Merci BruNews).



Pourriez vous m'expliquer comment créer un composant Internet Explorer dans une fênetre???

Clem0338
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
CTRL_ALT_SUPPR ne peut pas être hooké, il est enregistré exclusif (RegisterHotKey) par Winlogon au démarrage system, interception seulement possible en kernel mode dans driver.

ciao...
BruNews, MVP VC++
Messages postés
65
Date d'inscription
mercredi 19 juin 2002
Statut
Membre
Dernière intervention
9 mars 2008

Je sais, c'est pourquoi j'ai du passé par une dll avec injection de
code dans SAS de WinLogon.exe pour annuler les touches et ca marche
vraiment nickel.

Clem0338