環境:
Windows 7
Visual Studio 2010 c++ Win32 API
Internet Explorer 9
OpenGL
プロジェクトの目的:
Internet Explorer9 の画面を 3D 平面 (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);
}
}
}
SendMessageの代わりにPostMessageを使用しましたが、結果は同じです。
Internet Explorer は反応を送信しません。
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
もう少しメッセージが送信されると思います。しかし、どのメッセージがこれを行うことができるのかわかりません。
誰がそれの解決策を知っていますか?
そして、この方法を使用して一般的なアプリケーションを制御することを誰が知っていますか?
助けて!