Gestion de fenêtres via sendkeys ou handle

Emmanuel93170

XLDnaute Nouveau
Bonjour à tous,


A) Via sendkeys, ma macro ouvre une nouvelle fenêtre SAP. A partir du moment où cette nouvelle fenêtre est ouverte, la suite des sendkeys ne lui parvient pas. J’ai donc trouvé une astuce consistant à faire apparaitre pendant une seconde un USF avant de reprendre les sendkeys qui, du coup, arrivent vers cette nouvelle fenêtre. A la fin, pour qu’Excel soit de nouveau la fenêtre active, j’utilise Application.ThisWorkbook.Activate. Grace à cela la fenêtre d’Excel semble active, elle réagit au passage de la souris (comme la fenêtre SAP : jamais vu deux fenêtres actives en même temps avant ça) mais c’est la fenêtre SAP qui reçoit les raccourcis clavier alors que je voudrais que ce soit Excel.

m_hWnd = FindWindow(vbNullString, ActiveWorkbook.Name )
Call SetForegroundWindow(m_hWnd)

(Avec les déclarations qui vont bien) ne fonctionne pas du tout

En sendkeys : Garder alt pressée et presser deux fois tab ferait l’affaire (Excel étant l’avant dernière fenêtre active) mais je ne sais pas faire ça.

SendKeys "{TAB}2", True

Donne deux fois alt + tab ce qui n’est pas idem.



B) D’autre part je ne trouve aucune solution pour passer en plein écran la fenêtre SAP que j’ai ouverte. Il n’existe pas de sendkey pour la touche Windows que j’aurais associé à la flèche vers le haut. On peut tout au mieux faire apparaitre le menu Windows avec cette Sendkeys (RAV)…



C) Enfin j’ai besoin que, à certains moments, la macro passe la fenêtre SAP au premier plan. Chose que je sais faire à partir de son handle mais je ne peux pas connaitre ce handle par son caption car il est différent pour chaque fenêtre SAP que la macro ouvre et il m’est impossible d’en connaitre les noms à l’avance.

Pour l'instant, la solution que j'ai trouvée n'est pas élégante : l'USF suivant. Il faut cliquer dessus et relâcher le clique sur le nouvelle fenêtre ouverte pour que la macro connaissent son handle.

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Declare PtrSafe Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim Pt As POINTAPI
GetCursorPos Pt
MsgBox "cette fenêtre a pour handle : " & WindowFromPoint(Pt.X, Pt.Y)
End Sub



Il me semble que tous serait résolu si je trouvais comment :
  • Connaitre le handle de la dernière fenêtre ouverte
  • Agrandir une fenêtre à partir de son handle
  • Passer ActiveWorkbook « totalement » au premier plan quel que soit le contexte
D’avance, merci de votre aide

Manu
 
Dernière édition:

D.D.

XLDnaute Impliqué
Bonjour,
Compliqué tout cela et les sendkeys ne sont pas des solutions très élégantes.
SAPScript ne t'est pas accessible ?

Sinon tu devrais plutôt utiliser des postmessage ou sendmessage aux fenêtres. Ce serait quand même plus propre et tu ne t'occuperais pas du focus.
 

Emmanuel93170

XLDnaute Nouveau
Merci DD parois j'utilise sendmessge en effet mais c'est assez complexe utiliser pour un débutant.
Je vais me contenter de ce que j'ai réussit à faire je crois. Ce n'est pas idéal mais ça fait le travail déjà.
Merci
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 120
Membres
112 666
dernier inscrit
Coco0505