2010-01-18 10 views
0

Je suis en train de créer une fenêtre vide, qui traite le message WM_MOUSEMOVE à WinProc:Comment simuler l'événement mousemove d'une fenêtre à l'autre?

case WM_MOUSEMOVE: 
    { 
     HWND otherHwnd = HWND(0x000608FC); 
     POINT pt = {LOWORD(lParam), HIWORD(lParam)}; 

     ClientToScreen(otherHwnd, &pt); 
     PostMessage(otherHwnd, WM_TIMER, WPARAM(4096), 0); 
     PostMessage(otherHwnd, message, wParam, lParam); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_SETCURSOR, WPARAM(otherHwnd), (LPARAM)MAKELONG(HTCLIENT, WM_MOUSEMOVE)); 
     break; 
    } 

J'espère que je peux planer le hyberlink dans IE, mais le résultat est le hyberlink ne sera montré que le style de vol stationnaire dans un très peu de temps, puis il tourne à la normale, puis de nouveau en vol stationnaire, puis normal. Sur www.amazon.com, lorsque je fais un survol du lien ("Offres du jour"), le lien clignote.

Je pense qu'il y a une meilleure façon de le faire, même la fenêtre IE est couverte avec d'autres fenêtres, il peut faire l'IE agir avec le mouseevent. en attente de la meilleure solution ~ orz

Ci-dessus est le spy ++ logs quand je survole vraiment le lien. et Simuler est le même que le vrai message

<01277> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01278> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01279> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01280> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01281> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01282> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01283> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01284> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01285> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01286> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01287> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01288> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01289> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01290> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01291> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01292> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01293> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01294> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01295> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01296> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01297> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01298> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01299> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01300> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01301> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01302> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01303> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01304> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01305> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01306> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01307> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01308> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01309> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01310> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01311> 000608FC S WM_NCHITTEST xPos:521 yPos:281 
<01312> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 

Répondre

1

C'est parce que IE appelle WindowFromPoint() pour obtenir la fenêtre de premier plan, si le résultat est pas votre fenêtre IE, il connaît votre souris est pas là. Une solution possible consiste à accrocher l'API.

0

Il n'y a rien de mal avec votre code. Le problème est avec la manière dont Windows envoie des messages.

Lorsque vous déplacez votre souris, Windows envoie des messages à toutes les fenêtres de l'écran. Ainsi, chaque fois que vous envoyez le message WM_MOUSEMOVE au handle de fenêtres IE, Windows lui-même envoie un autre message indiquant que la souris n'est pas là.

Il y a une petite course ...

+0

Je ne vois pas d'autre message utilisant spy ++. Et j'essaie de capturer l'image du Webbrowser et de l'afficher dans ma fenêtre vide, ça marche. A travers la photo que j'ai prise, le message d'envoi fait encore le pointage instable, même je fais la fenêtre vide et la fenêtre webbrowser à la même position. – Gohan