Здравствуйте!
В Buildere я отсылал клавиатурные сообщения так:
CppWebBrowser1->ControlInterface->QueryInterface<IOleControl>(&pOle);
if (pOle)
{
MSG msg1;
for (int i=0;i<count;i++)
{
message = msg+i;
msg1.hwnd = CppWebBrowser1->Handle;
msg1.message = message->message;
msg1.wParam = message->wParam;
msg1.lParam = message->lParam;//0x020001;//0x036<<16;
pOle->OnMnemonic(&msg1);
}
pOle->Release();
}
подскажите, как заставить WebBrowser обрабатывать эти сообщения,
иными сдовами как у компонента получить указатель на интерфейс IOleControl
или какой другой способ.
Заранее спасибо.
Рахобрался сам:
На всякий случай, вдруг кто столкнется с той же проблемой:
private void KeyboardClick(object sender, EventArgs e)
{
MSG msg = new MSG();
msg.hwnd = webBrowser1.Handle;
msg.message = 258;
msg.wParam = (System.IntPtr)116;
msg.lParam = (System.IntPtr)0;
IOleControl ax = (IOleControl)webBrowser1.ActiveXInstance;
ax.OnMnemonic(ref msg);
}
[ComImport, Guid("B196B288-BAB4-101A-B69C-00AA00341D07"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleControl
{
[PreserveSig]
int GetControlInfo([Out] object pCI);
[PreserveSig]
int OnMnemonic([In] ref MSG pMsg);
[PreserveSig]
int OnAmbientPropertyChange(int dispID);
[PreserveSig]
int FreezeEvents(int bFreeze);
}
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct MSG
{
public IntPtr hwnd;
public int message;
public IntPtr wParam;
public IntPtr lParam;
public int time;
public int pt_x;
public int pt_y;
}
Достаточно было описать интерфейсы