Как я могу отправить сообщение в Internet Explorer 9 с WinAPI - PullRequest
0 голосов
/ 22 марта 2012

окружение:
windows 7
visual studio 2010 c ++ Win32 API
Internet Explorer 9
OpenGL

цель проекта:
текстурирование экрана Internet Explorer9 в реальном времени на 3D-изображении.Plane (GL_QUADS).и выбор мыши на 3d-плоскости, сообщение о щелчке с относительным положением мыши вывешено в реальном Internet Explorer 9.
объект - это «управлять другой программой с помощью 3D-текстурирования и действия мыши в моем приложении»

код:

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);
        }
    }
}

я использовал PostMessage вместо SendMessage , но результат тот же.
исследование Интернета не отправляет никакой реакции.

Я смотрю с помощью окна сообщений Microsoft Spy ++.

// 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

и отправьте сообщение, используя мой код приложения, следующим образом:

// on my application's messge
<13106> 000C0F82 S WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1231 yPos:289
<13107> 000C0F82 R WM_LUBTTONDOWN

Я думаю, еще несколько сообщений отправлено.но я не знаю, какое сообщение может это сделать.
кто знает, как его решить?
и кто знает, как управлять общим приложением таким образом?

помогите мне!

1 Ответ

2 голосов
/ 22 марта 2012

Некоторые программы не допускают подделку ввода с PostMessage или SendMessage.Вместо этого вы должны подделать ввод с помощью SendInput.Вы можете обнаружить, что подход более высокого уровня с использованием автоматизации пользовательского интерфейса проще, чем фальсификация ввода.

...