2009-07-03 2 views
0

Get Object from Windows Handle

Wenn Sie einen Objekttyp kennen und Sie den Handle des Objekts (hwnd) haben, gibt es eine Möglichkeit, diese in eine Variable umzuwandeln?

Beispiel:

Set myObj = Magic(hwnd)

+0

"Objekte" haben keine Fenster, Fenster tun es. Natürlich kann ein Objekt ein oder mehrere Fenster haben, zum Beispiel "schwere" ActiveX-Steuerelemente haben ein Fenster. – Bob77

Antwort

0

HWNDs sind nur Zahlen, die interne Objekte durch das OS zugeordnet sind (und sie können und sie recycelt werden). Sie können sie nicht wirklich zu etwas machen.

Was würden Sie von myObj in Ihrem Beispiel erwarten? Alle Windows-APIs zum Bearbeiten von Fenstern nehmen HWNDs.

+0

Was ich wirklich versuche, ist, auf Ereignisse in einem Steuerelement in einer anderen Anwendung zu reagieren. Zuerst dachte ich, ich würde nur die Nachrichtenwarteschlange lesen (was mich auf der Straße antrieb). Aber dann wurde mir klar, dass ich es in irgendeine Art von Timer setzen musste und die Warteschlange weiter lesen musste. Also dachte ich mir "Nun, wenn ich das Objekt bekommen könnte, könnte ich auf seine Ereignisse mit witevents antworten". – Oorang

+1

Wenn Sie die Nachrichten für ein anderes Fenster erhalten möchten, können Sie das Fenster proc ableiten. Verwenden Sie SetWindowLongPtr() mit GWLP_WINDOWPROC. Es wird Ihr Fenster proc aufrufen, und Sie behandeln, was Sie wollen und den Rest an den alten Fensterproc übergeben. Siehe: http://msdn.microsoft.com/en-us/library/ms633585%28VS.85%29.aspx Sie sollten in der Lage sein, herauszufinden, wie es von VB aufrufen. –

0

Sie können möglicherweise GetObject() für COM verwenden, aber es hat Einschränkungen - Sie können nicht eine bestimmte hWnd für eine angeben.

Zum Beispiel können Sie eine laufende Excel-Instanz mit GetObject ("", Excel.Application) abrufen, aber wenn mehrere Instanzen ausgeführt werden, werden Sie nicht wissen, welche zurückgegeben wird und es keine Möglichkeit gibt, anzugeben .