他の人が示唆しているのと同じように、あなたはEnumWindows
とEnumChildWindows
機能を使用する必要があります。
ここで私はちょうど私がVB6で書かれていた別のプログラム(非常に長い時間前)からのコードの断片から移植された小さなデモプログラムへのリンクです: Windows Scanner
はそれが役に立てば幸い...
編集:私は、実際にこれらの機能がどのように機能するか説明していない限り、これはほとんど答えではないことに気付きました。したがって、ここに行く:
EnumWindows
関数は、最初のパラメータとしてコールバック関数へのポインタをとります。 2番目のパラメータは、コールバック関数に渡すことができる値です。ユーザー定義の引数と考えることができます。
毎回EnumWindows
が新しいウィンドウを見つけたら、コールバック関数を呼び出して新しいウィンドウについて通知します。このコールバック関数は、ウィンドウのハンドラと、EnumWindows
が最初に呼び出されたときにユーザが指定したオプションのパラメータをパラメータとしてとります。
ので、基本的に、これはあなたがEnumWindows
を呼び出す方法です:
EnumWindowsProc
は、私たちのコールバックとなります
EnumProc
機能への参照を作成するために使用されるデリゲートです
EnumWindows(New EnumWindowsProc(AddressOf EnumProc), 0)
。次のように
、このようなコールバックのシグネチャは次のとおりです。
Private Function EnumProc(hWnd As IntPtr, lParam As IntPtr) As Boolean
それはあなたが発見されたWindowsの内部配列を移入この関数内です。
EnumChildWindows
の機能はほとんど同じですが、最初のパラメータは親ウィンドウのハンドラでなければなりません。 他のすべてはまったく同じ方法で処理されます。
WindowsScanner
プログラムのソースコードを確認すると、EnumWindows
とEnumChildWindows
の両方に同じデリゲートと同じコールバック関数が使用されていることがわかります。 トップレベルまたはチャイルドウィンドウを列挙しているかどうかはどのようにわかりますか? 簡単に、私は単にEnumChildWindows
の最後のパラメータを "1"に設定します。次に、このパラメータはコールバック関数(EnumProc
)に渡され、そのパラメータの値に基づいて異なるアクションを実行できます。
出典
2013-01-18 22:53:43
xfx
EnumChildWindows()を使用します。 –
ありがとう:)私はそれを試してみます。 – famf
Windowsまたはコントロール? –