Activer une fenetre

Résolu
ludomontbaze Messages postés 37 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 20 juin 2008 - 19 mai 2008 à 11:45
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 19 mai 2008 à 16:00
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:26
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...
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 mai 2008 à 12:00
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 mai 2008 à 12:04
C'est pas faux
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 14:17
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
0

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

Posez votre question
ludomontbaze Messages postés 37 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 20 juin 2008
19 mai 2008 à 15:15
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:20
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)
0
ludomontbaze Messages postés 37 Date d'inscription vendredi 13 avril 2007 Statut Membre Dernière intervention 20 juin 2008
19 mai 2008 à 15:26
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:29
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:31
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....
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 mai 2008 à 15:33
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:33
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:36
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)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 mai 2008 à 15:47
super, merci je vais 'espionner' tout ça pour voir

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mai 2008 à 15:54
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...)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 mai 2008 à 16:00
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
0
Rejoignez-nous