Activer une fenetre

[Résolu]
Signaler
Messages postés
37
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
20 juin 2008
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour a tous, j'aimerai savoir si on peut activer une fenetre d'un logiciel.
Je dois simuler la touche F1 dans un logiciel et j'utilise SendKeys "{F1}" mais la touche F1 est simulée dans l'application VB et pas dans le logicel voulu.
J'espere avoir été clair.
Merci d'avance.

15 réponses

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
mais comme je te le disais, un SendMessage s'avère plus adapté, puisqu'il s'agit dans ton cas de lancer un menu....

Spy++ nous donne l'ID 0x40 pour le menu Aide. on peut donc faire :

SendMessage mhNotepadWnd, WM_COMMAND, &H10040, ByVal 0&



ou, si vous voulez un projet de test:
-----------------------------------------------------------------

Option Explicit

Private Const WM_COMMAND As Long = &H111

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Private Sub Form_Load()
Dim mhNotepadWnd As Long
Shell "Notepad", vbNormalNoFocus
Do
DoEvents
mhNotepadWnd = FindWindow("Notepad", vbNullString)
Loop Until mhNotepadWnd
SendMessage mhNotepadWnd, WM_COMMAND, &H10040, ByVal 0&
End Sub


---------------------------------------------------

a bon entendeur...
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

je pense qu'avec les API findWindow et showwindow, ton sendkey sera faisable. (mais faut d'abord trouver la fenêtre voulue et l'activer)

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
C'est pas faux
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
http://www.vbfrance.com/codes/SENDKEYSEX-SIMULER-TOUCHE-DANS-FENETRE-PRECISE_41974.aspx

possible surement via un SendMessage (WM_KEYDOWN,...) plutot qu'un SendKeys, d'ailleurs
Messages postés
37
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
20 juin 2008

j'utilise ce code
Private Sub Command1_Click()
mhNotepadWnd = FindWindow("Notepad", vbNullString)
showwindow mhNotepadWnd, 5
SendKeys "{F1}"
End Sub

mais F1 est toujours appliqué a l'application VB alors que je veux l'appliqué à Notepad
Merci d'avance
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
euh........................................................
dois-je te redonner le lien ?

un petit extrait du code que je te propose :

MsgBox "Une instance du bloc-notes va maintenant être ouverte." & vbNewLine & _
"Toutes les touches pressées dans la zone de texte 'Text1' seront envoyées vers le Bloc Notes." & vbNewLine & _
"Un peu comme on pourrais le faire via SendKeys, avec la certitude de l'identité de la fenetre cible des touches simulées ^^", vbInformation

'# NB: pour démonstration uniquement....
'# absolument RIEN ne me garantit que la fenetre qui sera trouvée est bien celle qui correspondà mon Shell "Notepad"
Shell "Notepad", vbNormalNoFocus
mhNotepadWnd = FindWindow("Notepad", vbNullString)
Messages postés
37
Date d'inscription
vendredi 13 avril 2007
Statut
Membre
Dernière intervention
20 juin 2008

Ma fenetre notepad est déja ouverte et je voudrai juste faire un truc du genre set focus. Le lien que tu m'a donné est un peu trop compliqué pour mon niveau.
Merci
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
et dans ton cas, SetForegroundWindow eut de toute facon été plus efficace que ShowWindow

(testé, ca fonctionne)

http://msdn.microsoft.com/en-us/library/ms633539(VS.85).aspx
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
trop compliqué ?

pas utile, dans un premier temps de saisir les détails de SendKeysEx

tu as juste un parametre hWnd ajouté a un SendKeys....
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut Renfield,

comment trouves-tu l'ID 0x40 pour le menu Aide ?
(oui, avec Spy++, certe)

Car j'ai Win ID, j'ai rien trouvé de ce genre
merci

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
et ton "niveau" ne doit pas t'empecher de lire la doc, ce que tu ne fais surement pas.
En effet, je vois dans ton ShowWindow que tu utilises la valeur 5, en dur.

tu ne te soucis donc pas des constantes... ce que tu ferais certainement si tu lisais la doc MSDN...

c'est d'ailleurs en lisant les infos qu'elle contient sur ShowWindow avec SW_SHOW que j'ai vu, quelques lignes plus haut, le nom de la fonction que je te conseilles, a savoir SetForeGroundWindow.

avec un peu de curiosité et de vonlonté, tu devrais y arriver
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
mortalino, pour les boutons de commande, les menus, etc, le plus simple, c'est d'espionner, en attendant les WM_COMMAND
tu presse F1 (ou click dans le menu et go...)

tu as des WM_COMMAND qui débarquent

Message Source wParam (high word) wParam (low word) lParam
Menu 0 Menu identifier (IDM_*) 0
Accelerator 1 Accelerator identifier (IDM_*) 0
Control Control-defined notification code Control identifier Handle to the control window


donc &h00010040 pour wParam (raccourcis clavier pour l'ID 0x40)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
super, merci je vais 'espionner' tout ça pour voir

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
Renfield, "expert" (autoformé sur le tas) de pilotage d'applications tierces...

automatisation, substitution de forms, ajout/modifications de raccourcis claviers, de menus, etc....

(ben ouais, on bosse sur un vieux soft tout moche, donc...)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Lol,
je vais d'ailleurs jeter un oeil sur ta source dès que j'ai un moment.
Ca + celle de DarkSidious, depuis le temps que je veux rajouter un bouton 'iconiser en barre des taches' sur FireFox..

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA