c ++ - Hvordan kan jeg SendMessage til Internet Explorer 9 med WinAPI

Indlæg af Hanne Mølgaard Plasc

Problem



miljø:

Windows 7

visuel studie 2010 c ++ Win32 API

Internet Explorer 9

OpenGL


projektmål:

teksturering internet explorer9 s skærm realtime på et 3d-plan (GL\_QUADS). og museplukning på 3d-plan, klikmeddelelsen med relative-mus position er postet ægte internet explorer 9.

objectvie er 'kontrol andet program med 3d teksturering og mus handling på min ansøgning'


kode:


HWND target;

//...
//in winmain
target = ::FindWindow("IEFrame",NULL);
glutMouseFunc(MouseEvent);
//...


//in MouseEvent
void MouseEvent(int iButton, int iState, int x, int y)
{
    if(iState == GLUT\_DOWN)
    {
        if(iButton == GLUT\_LEFT\_BUTTON)
        {
             POINT p;
             p.x = x; p.y = y;
             POINT pOut = PickWithPlane(target,p);
             //I don't explain this function. cuz it has very long codes and so complicated and don't important. 
             //it is a simply transform point from my application's Client picking point 'p' to target application(=HWND target)'s relative picking point.

             //send a click message to target. but this SendMessage don't work.
             SendMessage(target, WM\_LBUTTONDOWN, MK\_LBUTTON, MAKELPARAM(pOut.x, POut.y);
        }
    }
}


jeg brugte PostMessage insted af SendMessage , men resultatet er det samme.

Internettet udforsker ikke nogen reaktion.


Jeg ser med Microsoft Spy ++ besked vindue.


// on real-click IE9's window any point
<10972> 000C0F82 S WM\_PARENTNOTIFY fwEvent: WM\_LBUTTONDOWN xPos:475 yPos:700
<10973> 000C0F82 R WM\_PARENTNOTIFY
<10974> 000C0F82 S WM\_MOUSEACTIVATE hwndTopLevel:000C0F82 nHittest:HTCLIENT uMsg:WM\_LBUTTONDOWN
<10975> 000C0F82 R WM\_MOUSEACTIVATE fuActivate:MA\_ACTIVATE
<10976> 000C0F82 S WM\_SETCURSOR hwnd:00231438 nHittest:HTCLIENT wMouseMsg:WM\_LBUTTONDOWN
<10977> 000C0F82 R WM\_SETCURSOR fHaltProcessing:False
//mouseup
<10978> 000C0F82 S WM\_SETCURSOR hwnd:00231438 nHittest:HTCLIENT wMouseMsg:WM\_MOUSEMOVE
<10979> 000C0F82 R WM\_SETCURSOR fhaltProcessing:False


og send besked ved hjælp af min programkode er næste:


// on my application's messge
<13106> 000C0F82 S WM\_LBUTTONDOWN fwKeys:MK\_LBUTTON xPos:1231 yPos:289
<13107> 000C0F82 R WM\_LUBTTONDOWN


Jeg gætter på nogle flere besked send. men jeg ved ikke, hvad meddelelsen kan gøre dette.

hvem kender løsningen af ​​det?
og hvem ved at kontrollere generel anvendelse på denne måde?


hjælp mig!

Bedste reference


Nogle programmer leverer ikke input faking med PostMessage eller SendMessage. I stedet skal du falde ind med SendInput. Du kan opleve, at en højere niveau tilgang ved hjælp af UI Automation er nemmere end faking input . [7]