2009-07-03 40 views
0

Windowsハンドルからオブジェクトを取得する

オブジェクトタイプを知っていて、オブジェクトのハンドル(hwnd)を持っている場合は、それを変数に変換する方法はありますか?

例:

Set myObj = Magic(hwnd)

+0

"オブジェクト"にはhWndsはありません。もちろん、オブジェクトには1つ以上のウィンドウがある場合があります。たとえば、「重い」ActiveXコントロールにはウィンドウがあります。 – Bob77

答えて

0

のHWND OSによって内部オブジェクトにマッピングされている数字だけです(そして、彼らは、リサイクルのですかことができます)。あなたは本当にそれらを何かに変えることはできません。

myObjがあなたの例で何をすると思いますか?ウィンドウを操作するためのすべてのWindows APIはHWNDを使用します。

+0

私が実際にやろうとしているのは、別のアプリケーションのコントロール内のイベントに応答することです。最初はメッセージキュー(これはhwndの道を私を始めたものです)を読んでいると思いました。しかし、私はそれを何らかのタイマーに入れて待ち行列を読まなければならないことに気付きました。だから私は「よく出来た物を私がそれに反応することができるかどうか」と思った。 – Oorang

+1

別のウィンドウのメッセージを取得する場合は、ウィンドウprocをサブクラス化できます。 GWLP_WINDOWPROCでSetWindowLongPtr()を使用します。それはあなたのウィンドウprocを呼び出し、あなたが望むものを処理し、残りを古いウィンドウprocに渡します。参照してください:http://msdn.microsoft.com/en-us/library/ms633585%28VS.85%29.aspx VBから呼び出す方法を理解する必要があります。 –

0

COM用にGetObject()を使用できますが、制限があります。特定のhWndを指定することはできません。

たとえば、GetObject( ""、Excel.Application)を使用して実行中のExcelインスタンスを取得できますが、実行中のインスタンスが複数ある場合は、返されるインスタンスを特定できません。

関連する問題