Bloquer l'accés à une fenetre [Résolu]

Signaler
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011
-
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011
-
Bonjour Codeurs...

J'aimerais savoir si il est possible d'empecher un utilisateur d'avoir accés à une application jusqu'à ce qu'il valide ma fenetre que j'ai créer???

concretement, j'ai besoin que lorsqu'un utilisateur ouvre notepad, que mon programme le detecte (ça j'y arrive), et qu'il vienne greffer au dessus de la fenêtre de notepad, la mienne sans que l'utilisateur ne puisse toucher à la fenêtre de notepad
que son accés soit bloqué jusquà ce qu'il est validé la mienne...

j'ai le handle de la fenêtre de notepad ouverte...

merci.

14 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
tu dis utiliser Process.Handle... j'ai pas tilté plus tôt, mais faut pas confondre Handle de process et Handle de fenêtre...


SetWindowLong fonctionne bien, mais avec les bonnes infos.

j'ai testé ce code :

Private Const GWL_STYLE As Long = -16
Private Const WS_DISABLED As Long = &H8000000

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
Dim nStyle As Long
Dim hNotepadWnd As Long
hNotepadWnd = &H720694
nStyle = GetWindowLong(hNotepadWnd, GWL_STYLE)
SetWindowLong hNotepadWnd, GWL_STYLE, nStyle Or WS_DISABLED
End Sub


(VB6 donc Long a la place de tes Integer)

et ca fonctionne bien...
reste qu'il te faut récupérer un Handle de fenêtre
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
alors désactive là, par exemple.... (WS_DISABLED)
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

Merci de cet info mais puis-je avoir un exemple parce que je sais pas comment on s'en sert... Merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Api SetWindowLong GWL_STYLE
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

merci mais je m'en sort pas plus que ça...

j'ai déclarer:
<li>PrivateDeclareFunction SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd AsLong, ByVal nIndex AsLong, ByVal dwNewLong AsLong) AsLong</li><li>PrivateConst GWL_STYLE (-16)</li><li>PrivateConst WS_DISABLED &H8000000</li>mais je ne sais pas quoi mettre lors de l'appel de la fonction SetWindowLong(...)

le premier parametre est le handle, mais aprés???

Merci encore
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
en .Net, on déclare :

Private DeclareFunction GetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer
Private DeclareFunction SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer

pour le reste, suffit de lire la doc !

http://msdn2.microsoft.com/en-us/library/ms633584(VS.85).aspx


et donc de faire :

Dim nStyle As Integer
nStyle = GetWindowLong( hNotePadWindow, GWLSTYLE)
SetWindowLong(hNodepageWindow, GWL_STYLE, nStyle Or WS_DISABLED)
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

alors j'ai trouvé tout les paramétres seulement j'ai une erreur de déséquilibre de la pile (PInvokeStackImbalance) et comme je sais pas ce que c'est et encore moins le résoudre...

HEEEEELP.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
erreur de copier/coller :

GetWindowLong Lib "user32" Alias "SetWindowLongA"
devrait etre:
GetWindowLong Lib "user32" Alias "GetWindowLongA"

sinon, pas le bon nombre de parametres, et la pile est déséquilibrée.
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

je n'utilise pas la fonction GetWindowLong

et le handle que je met dans le premier parametre est récupéré grace a la class process.handle...
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

peut on reprendre depuis le début...

je déclare:<li>PrivateDeclareFunction SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long</li><li>PrivateConst GWL_STYLE (-16)</li><li>PrivateConst WS_DISABLED &H8000000</li>est-on d'accord déjà pour tout ça???
et ensuite l'appel:

SetWindowLong (processNotePad.handle, GWL_STYLE, WS_DISABLED)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
tu fais que ca ?
pas de GetWindowLong ?

c'est con, tu viens de fusiller NotePad...

il faut lire la valeur de 'GWL_STYLE'
y ajouter (Or) WS_DISABLED
et redonner le style a la fenêtre
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
et change tes déclarations APIs...( Long en Integer)
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

bon désolé mais ca ne marche pas... j'ai encore la main sur le notepad
les valeurs que j'ai mise a GWL_STYLE (-16) et WS_DISABLED &H8000000 sont elles bonnes ou pas?
Messages postés
108
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
5 mai 2011

C'est bon c'est parfait, j'ai trouvé... merci!