SendMessage et WM_KEYDOWN

jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013 - 2 mars 2006 à 14:25
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013 - 30 oct. 2008 à 18:31
Bonjour à tous
J'essaye de simuler l'envoi d'un touche dans la fenêtre de saisie d'une appli externe.

J'utilise la séquence suivante :
PostMessage hWnd, WM_KEYDOWN, VK_SHIFT, 0
PostMessage hWnd, WM_KEYDOWN, &H41, 0

Cette séquence ne fonctionne pas : j'envoie un 'a' alors que je voudrais envoyer un 'A' (shift + 'a').

Quelqu'un peut-il me dire pourquoi ?
Merci pour la réponse.

11 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
7 mars 2006 à 19:53
salut,



c'est peut être parce que ce n'est pas simultané...



essaie d'utiliser SendMessage à la place de PostMessage...



ensuite tu doit faire des WM_KEYUP dans l'ordre inverse : &H41 puis VK_SHIFT...

ShareVB
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
8 mars 2006 à 10:17
Désolé, ça ne marche pas non plus avec les SendMessage (j'avais déjà essayé)
Bizarre, bizarre !!!
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
8 mars 2006 à 13:51
salut,



avec les KEYUP dans le bon ordre ? down shift, down a, up a up shift...bizarre...



sinon, regarde du côté de WM_CHAR ou WM_GETTEXT ou WM_SETTEXT ou Get/SetWindowText...

ShareVB
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
8 mars 2006 à 15:26
J'ai commencé par tester avec WM_SETTEXT, et ça ne marche pas non plus.
En fait, l'appli externe est écrite dans un langage exotique que je ne connais pas. Par contre, ce que je peux constater avec SPY++, c'est qu'aucun des contrôles disposés dans la fenêtre principale de l'appli ne possède un classname standard Windows.
Par exemple, la fenêtre principale a un classname "TWINDOW2" et un caption (le titre de la fenêtre), et tous les contrôles de cette fenêtre (zone d'édition, boutons, checkbox...) ont le même classname (TWINDOW1) et un caption null.
Original non ?
0

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

Posez votre question
viasante Messages postés 2 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 28 juin 2006
28 juin 2006 à 11:59
Hello,

J'ai le même souci ! Mon application exotique est en Natstar !
As tu résolu ton problème ?

Le premier qui trouve contacte l'autre.

A+
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
28 juin 2006 à 12:06
Salut viasante
Hélas non, je n'ai pas résolu mon problème, et j'ai même laissé tomber.
Par contre, si tu trouves quelque chose, fais-moi signe...
(Mon appli à interfacer était écrite en NSDK)

A+ et bon courage...
0
viasante Messages postés 2 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 28 juin 2006
28 juin 2006 à 14:42
Hello JOCOU,

Tout à fait : NSDK c'est de chez NAT SYSTEM, dont un de leur produit s'appelle NATSTAR.

http://www.alaide.com/dico.php?q=NSDK&ix=5206

J'ai eu un technicien de Nat System qui m'a expliqué qu'ils utilisent une couche qui masque l'accès à leurs fenêtres, donc impossible d'utiliser l'API windows. Il va tout de même demander à un collègue et me rappelle demain soir.

En attendant je croise les doigts !!!

A+
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
3 août 2006 à 14:02
Salut viasante

Je reviens à la charge au sujet de NSDK
As-tu obtenu de nouvelles infos ?
Si oui, peux-tu me contacter ?

A+
0
robin42p Messages postés 19 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 19 décembre 2008
13 sept. 2006 à 14:33
L'histoire de la couche qui masque est tout à fait exacte.


Il faut réduire cette couche afin de pouvoir récupérer les différents pointeurs nécessaires.


Voici un exemple pour faire défiler une liste (bon c'est pas optimisé mais ça marche !)
Le 1er pointeur correspond à un bouton Annuler
Le 2ème correspond à la fameuse couche qu'il faut réduire

appHandle = GetTopWindow(0)

Do Until appHandle = 0
 h = GetWindowText(appHandle, winTitle, 255)
  
 If winTitle Like "*Le titre de l'appli*" Then
  h = FindWindowEx(appHandle, ByVal 0&, "TWINDOW1", "")

  'Récupération du pointeur de la touche Annuler 
  hAnnuler = FindWindowEx(h, ByVal 0&, "TWINDOW1", "") 

  'Récupération du pointeur de la couche supplémentaire    
  hCouche = FindWindowEx(h, hAnnuler, "TWINDOW1", "") 

  'Réduction de la couche 
  ShowWindow hCouche, SW_MINIMIZE
   
  'Récupération du pointeur la liste déroulante
  hListe = FindWindowEx(h, hAnnuler, "TWINDOW1", "")    
  hListe = FindWindowEx(hListe, 0, "TWINDOW1", "")
  
  'Récupération du type du contrôle 
  wstyle = GetWindowLong(hListe, GWL_STYLE)

  's'il s'agit d'une liste alors envoi de la touche BAS
  If wstyle = &H50200000 Then 
   PostMessage hListe, WM_KEYDOWN, VK_DOWN, 0&
  End If
   
  'Restauration de la couche
  ShowWindow hCouche, SW_SHOWNORMAL



etc...
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
29 oct. 2008 à 17:35
jocou
0
jocou Messages postés 52 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 19 novembre 2013
30 oct. 2008 à 18:31
Salut

Après quelques ...mois, je reviens à la charge en ce qui concerne le pilotage en VB d'une appli NSDK.
 
En particulier, je suis très interessé par le post sur la couche masquant les fenêtres.

Pouvez-vous me donner plus d'infos ???

Merci d'avance

jocou
0