2010-10-22 8 views
1

Lorsque vous envoyez le message WM_MOUSEMOVE à la zone client d'une application (dans ce cas, Open Office Writer), l'image scintille comme si la souris dépassait les coordonnées spécifiées, mais ne restait pas dans cet état . Le code est:SendMessage WM_MOUSEMOVE ne fonctionne pas comme prévu

PostMessage (hWndClient, WM_MOUSEMOVE, 0, MAKEWORD (x, y))

où x et y sont liés à l'espace client.

L'envoi en boucle ne fonctionne toujours pas car la zone mise en surbrillance par l'événement de survol de la souris clignote.

Toute aide serait appréciée.

+0

Quel but vous essayez d'accomplir en envoyant 'WM_MOUSEMOVE' à Open Office Writer? –

+0

C'est un genre de chose VNC multi-utilisateur, donc déplacer le curseur en utilisant SetCursorPos ou qu'est-ce que vous ne travaillerez pas malheureusement. – ckg

+0

Avez-vous réussi à le faire fonctionner? L'un des contrôles que j'automatise ne peut pas fonctionner tant que je ne suis pas en stationnaire. J'ai donc besoin de convaincre le programme qu'un bouton est en train de planer à l'aide de messages Windows. –

Répondre

1

L'application peut être déclenchée sur toutes sortes d'autres événements. Peut-être veut-il voir WM_MOUSEHOVER etc ... Cela fait longtemps, mais je me souviens qu'il y avait quelque chose de vraiment compliqué dans la façon dont certains de ces événements étaient implémentés - comme un thread séparé qui interrogeait la souris et générait des événements WM_MOUSELEAVE quand la souris n'était plus au-dessus de la fenêtre. Vous pourriez être mordu par quelque chose comme ça aussi. Il est également possible que l'application elle-même interroge la souris pour sa position réelle lorsqu'elle reçoit l'événement. En fonction de ce que vous essayez de faire, vous pourriez peut-être déplacer la souris par programme au lieu d'essayer simplement de simuler des événements. Malheureusement, je ne me souviens pas de l'API pour cela, mais je suis sûr que c'est possible.

+0

Vous aviez raison, l'application appelait GetWindowPos après le message WM_MOUSEMOVE. – ckg

1

J'utilisé STH comme ça dans ma fenêtre principale et regarde ça aide ... à WM_MOUSEMOVE:

POINT Point; 
GetCursorPos(&Point); 
ScreenToClient(hHwnd, &Point); 
int X = Point.x; 
int Y = Point.y; 
Questions connexes