Réduire une fenêtre aec l'API Windows ?

Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007 - 12 déc. 2006 à 11:35
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007 - 12 déc. 2006 à 18:06
Bonjour,


Après quelques recherche pas très fructueuse (et devant le nombre de
fonctions de l'API Windows...) je cherche à réduire une fenêtre
exterieur à mon programme grâce à l'API Windows, je m'explique.


En VB6, j'ai une barre en haut de mon écran, je voudrais que, exemple,
si je lance IE, il se réduise pour être en dessous de ma barre (ma
barre est déjà en premier plan, le problème c'est qu'elle est trop
lage, donc cache la barre d'url de IE) donc en fait, réduire la fenêtre
E juste en dessous mon form.


Merci.

56 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 14:56
'Déclaration des API

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function GetActiveWindow Lib "User32" () As Long

Private Sub Timer1_Timer()

'Si la fenêtre active est différente de celle de ton appli
If CetActiveWindow <> Me.Hwnd Then

'redimensionne et replace cette fenêtre mais reste devant ton appli
'les deux 1er 200 sont les position top et left de la fenêtre et les deux autres les dimensions de la fenêtre en pixel
SetWindowPos GetActiveWindow, HWND_TOPMOST, 200, 200, 200, 200, SWP_HIDEWINDOW

End If

End Sub,

----

(Coloration syntaxique automatique par Kenji)





 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 15:00
D'après le screen le code fais ce que tu veux, tu as juste modifier les paramètres:

J'ai pas essayé mais en gros cela pourai être ça:
SetWindowPos GetActiveWindow, HWND_TOPMOST, 0, 200, screen.width, screen.height-200, SWP_HIDEWINDOW

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 15:08
Alors là, mon form prend la place à laquelle il devrait y avoir les autres fenêtres...

Et ensuite, les fenêtres s'affiche dedans, laissant de la place en haut, on y est presque sauf que je veux l'inverse :p

Que mon form reste en haut et que les pages s'affiches avec un Height = Screen.Height - 200 donc ^^
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 15:09
PS : Voilà ce que j'utilise

Height = 1200
Width = 9500

Mon premier plan :
Private Sub timer_premierplan_Timer()


SetTopMostWindow Me, True


End If

Au form Load :
 Me.Left = (Screen.Width - Me.Width) \ 2
Me.Top = (Screen.Height - Me.Height) \ 10000
0

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

Posez votre question
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 15:11
Au fait, tu as mis ça : If CetActiveWindow <> Me.Hwnd Then

Mais c'est pas : If GetActiveWindow <> Me.Hwnd Then

?
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 15:17
La cela devrai marcher:

hWnd = GetActiveWindow
'Si la fenêtre active est différente de celle de ton appli
If hWnd <> Me.hWnd Then


'redimensionne et replace cette fenêtre mais reste devant ton appli
'les deux 1er 200 sont les position top et left de la fenêtre et les deux autres les dimensions de la fenêtre en pixel
SetWindowPos hWnd, HWND_TOPMOST, 200, 200, 200, 200, SWP_HIDEWINDOW


End If

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 15:21
Cela ce rapproche encore plus de ce que tu veux, mais maintenant à toi d'arranger la position et la dimension!
En tout cas c'est exactement ce que tu voulais!

SetWindowPos hWnd, HWND_TOPMOST, 0, 200, 9500, 1200, SWP_HIDEWINDOW

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 15:24
'Déclaration des API

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long,
_ByVal cy As Long, ByVal wFlags As Long)

Private Declare Function GetActiveWindow Lib "User32" () As Long

Private Sub Timer1_Timer()

'récupère le handle de la fenêtre active
hWnd = GetActiveWindow

'Si la fenêtre active est différente de celle de ton appli
If hWnd <> Me.Hwnd Then

'redimensionne et replace cette fenêtre mais reste devant ton appli
SetWindowPos hWnd, HWND_TOPMOST, 0, 200, 9500, 1200, SWP_HIDEWINDOW

End If

End Sub,

----

(Coloration syntaxique automatique par Kenji)












 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 15:40
Il me met une erreur au niveau de

hWnd = GetActiveWindow

Voilà l'erreur : Fonction ou interface est mentionné avec restriction ou la fonction utilse un type Automation non géré par VIsual Basic
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 15:54
Ben là désolé mais je ne peux plus rien pour toi, chez moi le code fonctionne!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 16:08
Bizzare... Tu es bien en VB6 ? Tu as ajouté des références ?
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 16:15
Non c'est VBA mais en VB6 ça marche aussi normalement, car le code que j'ai mis c'est pour VB6 à la base!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 16:24
Tu pourrais me faire un screen de ce que ton programme fait pour voir stp ? Merci
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 16:29
Essaye ça avant: (peut-être qu'il a un conflit avec hwnd)

<table border="0">

----,
</td>

'Déclaration des API

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long,
_ByVal cy As Long, ByVal wFlags As Long)

Private Declare Function GetActiveWindow Lib "User32" () As Long

Private Sub Timer1_Timer()

'récupère le handle de la fenêtre active
Dim HandleFenetre As Long
HandleFenetre = GetActiveWindow

'Si la fenêtre active est différente de celle de ton appli
If HandleFenetre <> Me.Hwnd Then

'redimensionne et replace cette fenêtre mais reste devant ton appli
SetWindowPos HandleFenetre , HWND_TOPMOST, 0, 200, 9500, 1200, SWP_HIDEWINDOW

End If

End Sub





</td>
</tr>
</tbody>
</table>




 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
12 déc. 2006 à 16:35
Salut,
Alors çà en est où? [auteurdetail.aspx?ID= 786090 Drikce06 ]j'ai testé ton dernier code sur vb6 et ca fonctionne (si toutefois j'ai bien compris ce que souhaitait [auteurdetail.aspx?ID =648299 Vienyc)]

@+: Ju£i?n
Pensez: Réponse acceptée
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 16:40
Salut jrivet! Tu me rassures mais chez lui non!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 16:50
En fait ça fonctionne si c'est la fenêtre du projet en cours qui est devant lui, mais si je créé un .exe et que je lance IE au dessus de la Form, là, ça ne marche pas.
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 16:52
Qu'est ce que ça fait? Rien? Ca bouge une fenêtre?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 déc. 2006 à 16:54
jrivet, qu'est qu'il fait le code chez toi stp?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
Vienyc Messages postés 47 Date d'inscription dimanche 18 décembre 2005 Statut Membre Dernière intervention 28 juin 2007
12 déc. 2006 à 16:56
Alors je m'explique.

Avec ton code, dans VB, je met le code, je l'execute, si je lance la fenêtre ou y'a mon code, elle se réduit bien et se met en dessous de mon form, en revanche avec d'autres fenêtre ça ne marche pas (mais il detecte bien que les handles sont différents)
0
Rejoignez-nous