Ich habe eine Anwendung, die eine Schaltflächensteuerung über ActiveX einbettet. Die Schaltfläche wurde von einem Drittanbieter bereitgestellt und implementiert eine ganze Reihe von ActiveX-Schnittstellen (darunter IOleInPlaceObject
). Ich habe einen Hinweis auf die IUnknown
Implementierung der Schaltfläche.
Das Problem, das ich habe, ist, dass die IOleWindow::GetWindow
Funktion, die von dem Objekt bereitgestellt wird, gibt immer einen Fehler zurück; der Fehlercode ist 0x80004005, was offensichtlich ein gemeinsamer HRESULT-Wert Bedeutung E_FAIL
. Nicht zu beschreibend.
Das Objekt stellt außerdem eine hWnd
Eigenschaft über seine IDispatch
Implementierung; die Abfrage ist erfolgreich, aber der Wert der Eigenschaft ist immer Null.
Nach einigem Googeln kam ich zu dem Schluss, dass ich das OLE-Objekt aktivieren muss, bevor die hWnd
Eigenschaft einen nützlichen Wert ergibt. Weiß jemand, wie man das macht? Gibt es eine spezielle COM-Schnittstelle für die Aktivierung von OLE-Objekten?
Interessant ist, dass die Schaltfläche tut scheinen einen Fenstergriff zu haben, wie man in Spionage++ .
UPDATE: Ich habe gerade gefunden IQuickActivate
die von der Tastensteuerung, mit der ich mich beschäftige, implementiert wird, und die verwendet werden kann, um einen Gegenstand "schnell" (ähem...) zu aktivieren. Das Füllen des QACONTAINER
Struktur scheint ein ziemlicher Aufwand zu sein, also werde ich das jetzt lieber nicht tun.