[win32] forcer une fenetre a rester en premier plan

tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005 - 24 août 2003 à 22:08
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 25 août 2003 à 14:20
bonjour a tous,

voila mon probleme, je developpe une application qui protege l'ordinateur sur lequel elle tourne, pendant l'absence de l'utilisateur, en demandant un mot de passe.
donc g fait une fenetre plein écran avec une petite boite de dialogue pour le passe et ca marche impecable..

le probleme c que alt-tab reduit a neant tous mes efforts.
pourtant en cherchant g trouvé un truc qui aurait pu mettre fin a mon cauchemar :
SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);

avec SPI_SETFASTTASKSWITCH comme action.

mais MSDN dit que c obsolete et que le "FASTTASKSWITCH" est tout le temps operationnel maintenant

est ce que vous connaissez un moyen de contourner mon probleme, si oui, je vous en serais tre reconnaissant ;-)

merci d'avance pour vos lumieres !

ps: g deja teste dans WM_KILLFOCUS :
SetForegroundWindow()
SetActiveWindow()
SetWindowPos()
SetWindowPlacement()

le meilleur resultat c SetWindowPos car elle remet bien ma fenetre en premier plan, mais la barre de taches ne se cache pas donc ca sert a rien... :sad)

@+
tcok

26 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 août 2003 à 22:55
fonction de HOOK dans une dll.
BruNews, ciao...
0
guiguikun Messages postés 92 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 octobre 2003 1
25 août 2003 à 02:17
Tu peux aussi killer explorer.exe au lancement de ton application et le relancer à la fermature.

Ca supprime le desktop windows, le menu démarrer ainsi que alt+tab
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 10:59
je connais rien aux hook, je les ai jamais utilisés. est ce que tu pourrais etre plus précis. je fais un hook sur ma fenetre avec une fonction dans une dll. pk faut il qu'elle soit dans une dll ?
merci

@+
tcok
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 11:02
est ce que cette solution supprime aussi le ctrl+alt+suppr et le alt+f4 ? parce que g besoin de tous virer pour la protection soit sans failles :)
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 11:03
Dans une dll parce qu'elle devra etre mappee sur tout processus tentant de demarrer, donc niveau systeme.
Regarde SetWindowsHookEx() dans MSDN, j'ai deja fait exemples.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 11:11
bon je recapitule, tu me dis si je me trompe :

je fais SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)lpfn,hinst_dll,0 );

et dans la dll je bloque tous ce qui vient de WM_SIZE dans ma fenetre et ca va l'empecher de se faire "resizer".

@+
tcok
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 11:24
A toi de voir ce qui te convient dans la dll mais ATTENTION, enregistre bien ton travail avant les essais !!!
On peut faire des trucs fantastiques (au sens propre) avec un hook systeme.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 11:34
y'a un truc que je capte pas du tout. comment je fais pour savoir si c bien vers ma fenetre que le message est envoyé vu que je n'ais plus mon HWND dns la dll ? faut que je fasse
un FindWindow a chaque fois q'on rentre dans la fonction hook ?

@+
tcok
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 11:57
je capte pas du tout les hook, g fait
if( lpmsg->message WM_SIZE && lpmsg->hwnd GetForegroundWindow() )
return 0;

dans la HOOKPROC et ca bloque rien du tout.

tu pourrais pas me donner un tit exemple ou me mettre un peu plus sur la voie sil te plait?

@+
tcok
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 12:00
je capte pas du tout les hook, g fait
if( lpmsg->message WM_SIZE && lpmsg->hwnd GetForegroundWindow() )
return 0;

dans la HOOKPROC et ca bloque rien du tout.

tu pourrais pas me donner un tit exemple ou me mettre un peu plus sur la voie sil te plait?

@+
tcok
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 12:09
je capte pas du tout les hook, g fait
if( lpmsg->message WM_SIZE && lpmsg->hwnd GetForegroundWindow() )
return 0;

dans la HOOKPROC et ca bloque rien du tout.

tu pourrais pas me donner un tit exemple ou me mettre un peu plus sur la voie sil te plait?

@+
tcok
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 12:16
mets une variabe:
HWND myhwnd = 0;
tu exportes une func depuis la dll pour initialiser myhwnd avant lancement du hook.
A ce point tu devrais rencontrer un probleme de reconnaissance de ta hwnd.
Je te laisse trouver seul pour l'instant. On reprendra si tu arrives jusque la.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 12:28
desole pour tous les messages en doubles, c ma connexion 56k qui a buguée...

lorsque je fais HWND myhwnd = 0;
et une fonction pour l'initialiser, ca ne marche pas non plus.
G l'impression que le myhwnd reste tjs egal a 0...
je comprends plus rien la !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 12:32
voila ou il fallait arriver, c'est bien.
Trouve un debut d'explication, on y remedie ensuite.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 12:35
je crois que le systeme utilise une autre instance de la dll ce qui fais que hwnd est tjs a 0 .
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 12:58
alors, comment faire ?
place le mywnd en segment partage entre toutes les instances. Je te laisse un peu fouiller, je crois que Kaid avait mis un exemple de cela. Si tu ne trouves pas je te donne.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 13:09
ca va te paraitre bizarre mais en fait ca marche sans segment partage

voici ma fonction de hook :

LRESULT CALLBACK SecureWindow(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *lpmsg;
lpmsg = (CWPSTRUCT*) lParam;
if(nCode < 0) return (CallNextHookEx(NULL, nCode, wParam, lParam));
if( lpmsg->message WM_KILLFOCUS && lpmsg->hwnd myhwnd )
{
char test[250];
wsprintf(test, "window : %d", myhwnd );
MessageBox(NULL, test, "test", MB_OK);
return 0;
}

return (CallNextHookEx(NULL, nCode, wParam, lParam));
}


et ca m'affiche bien le HWND ! c franchement bizarre les hooks !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 13:20
mais ta dll est en hook systeme ?
Tu as teste en perdant le focus depuis une autre appli ?
Que fera-t-elle a ce point ?
BruNews, ciao...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2003 à 13:21
A oui au fait, pour sur qu'elle ne connait que ta hwnd, dans les autres processus il est a ZERO, donc le test sera toujours bon.
BruNews, ciao...
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
25 août 2003 à 13:24
oui peut etre, mais si le progrzmme est rentre dans le if
c bien que mywnd a ete initialise donc je peux traiter le hook sur ma fenetre non? a moins que je n'ais pas encore bien saisi le fonctionnent ...
0
Rejoignez-nous