Ouverture et affichage de fenetres

Signaler
Messages postés
81
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
12 avril 2013
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour,
Jutilise :

ret2 = SetWindowPos(hparent, HWND_TOPMOST, 0, 0, 0, 0, SW_SHOWMAXIMIZED)

pour afficher une fenetre. Quand je lance le prog une fois sur deux la fenetre s'ouvre reduite dans la barre des taches. Je n'ai pas trouvé de solution. Merci de votre aide

5 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Que veux-tu faire exactement ? Seulement mettre la fenêtre au premier plan ?
---
VB.NET is good ... VB6 is better
Messages postés
81
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
12 avril 2013

Merci de répondre
En fait c'est un prog qui se lance de deux façons différentes
Une "manuelle" une autre par un lancement "auto" par le planificateur des taches
Pour le lancement manuel j'utilise un exe pour avoir une image en attente du chargement du prog en vba(pour celui du planificateur aussi):

Option Explicit
'Private hwnd As Long
Private AuSommet As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
                                    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1
Private Const SW_HIDE = 0
Private Const SW_MAXIMIZE = 3
Private Const SW_MINIMIZE = 6
Private Const SW_RESTORE = 9
Private Const SW_SHOW = 5
Private Const SW_SHOWDEFAULT = 10
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNA = 8
Private Const SW_SHOWNOACTIVATE = 4
Private Const SW_SHOWNORMAL = 1


Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long

Private Declare Function 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) As Long



Private Sub Form_Load()



    Dim mRet As Long
    Dim mPID As Long
    Dim bRet As Boolean


    mRet = FindWindow(vbNullString, "Ariane Application")

    If mRet <> 0 Then
        MsgBox "Programme déja ouvert !", vbCritical, "ATTENTION !"    ' info à l'utilsteur qu'il manque des cdes secteurs
        GoTo cgt
    End If


    Me.Show
Me.BorderStyle = 0
Me.WindowState = 2
    AuSommet = SetForegroundWindow(Me.hwnd)
SetCursorPos 700, 250
Image1.Picture = LoadPicture("C:\Users\Administrateur\Pictures\BOURSE\2009_05_18\argent billets.jpg")
Image1.Top = 0
Image1.Left = 0
Image1.Width = Me.ScaleWidth
Image1.Height = Me.ScaleHeight
    mPID = Shell("C:\Program Files\Microsoft Office\Office12\excel.exe F:\BOURSE\PROGRAMES\ARIANE22.xlsm", SW_MINIMIZE)
 AuSommet = SetForegroundWindow(Me.hwnd)
    Do
        mRet = FindWindow(vbNullString, "Ariane Application")        'FENETRE PARENT
        If mRet <> 0 Then Exit Do
    Loop
   
cgt:
    Unload Me

End Sub



"Ariane application" est le nom que prend l'application vba une fois prête pour signaler à l'exe qu'il peut se fermer. C'est la que se trouve le problème

Ensuite j'en ai un autre avec le planificateur des taches(qui est le le petit frère du 1er). Là je ne vois rien s'ouvrir, pourtant si j'essaie de relancer manuellement le prog , excel me signale qu'il est déjà ouvert, et je suis obligé de redemarrer ma machine.(mais chaque problème à son tour)

Prog Vba:


Public Sub DEMAR()
'Stop
    Sheets("Feuil1").Select
    Application.DisplayFullScreen = True

    Ct = DateAdd("S", 20, Now)
    Do While Ct > Now
        hparent = FindWindow(vbNullString, "Microsoft Excel - ARIANE22.xlsm")        'FENETRE PARENT
        If hparent <> 0 Then Exit Do
    Loop
    DoEvents
    ret = FindWindow(vbNullString, "Gardien")
    DoEvents

    SetCursorPos 700, 250
    ret1 = hparent
    'Stop
    SetWindowText hparent, "Ariane Application"
    'ret2 = SetWindowPos(hparent, HWND_TOPMOST, 0, 0, 0, 0, SW_SHOWMAXIMIZED)
    'ret2 = BringWindowToTop(hparent)
    'ret2 = SetForegroundWindow(hparent)
    If ret <> 0 Then FORMATAGE

End Sub


("Gardien" est le nom de l'exe pour le planificateur des taches)


Suis je explicite?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Dans DEMAR(), ret prend quelle valeur ?
---
VB.NET is good ... VB6 is better
Messages postés
81
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
12 avril 2013

Si je lance le prog "manuellement": zero
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Cela signifie que l'API n'a pas trouvé de fenêtre portant le nom que tu recherches ...
---
VB.NET is good ... VB6 is better