У меня есть приложение, которое встраивает управление кнопками через ActiveX. Кнопка была предоставлена третьей стороной, и она реализует целый ряд интерфейсов ActiveX (среди которых IOleInPlaceObject
). У меня есть ссылка на реализацию кнопки IUnknown
.
Проблема, с которой я сталкиваюсь, заключается в том, что функция IOleWindow::GetWindow
, предоставляемая объектом, всегда возвращает ошибку; код ошибки 0x80004005, который, по-видимому, является общим значением HRESULT , означающим E_FAIL
. Не слишком наглядно.
Для чего бы то ни было, объект также предоставляет свойство hWnd
через реализацию IDispatch
; запрос выполняется успешно, но значение свойства всегда равно нулю.
Немного погуглив, я предположил, что мне может понадобиться «активировать» объект OLE, прежде чем свойство hWnd
даст полезное значение. Кто-нибудь знает, как это сделать, есть ли выделенный COM-интерфейс для активации объектов OLE?
Интересно, что кнопка имеет , кажется, имеет дескриптор окна, как это видно в Spy ++ .
ОБНОВЛЕНИЕ: Я только что нашел IQuickActivate
, который реализован с помощью кнопки управления, с которой я имею дело, и который можно использовать для «быстрого» (хм ... ) активировать предмет. Однако заполнение структуры QACONTAINER
выглядит довольно болезненно, поэтому я не буду сейчас этого делать.