1

別のプロセスでクリックされたコントロールのコンポーネントタイプ、つまりプログラムされたクラスの名前を確認する必要があります。クリックしたコントロールに反応して自動化タスクを実行できるように、タイプが必要です。現在、次のことを行っています。1. Win32からFindWindow()を実行して、プロセスのメインウィンドウハンドルを検索します。2.次に、同じくWin32からEnumChildWindows()を呼び出し、メインウィンドウハンドルのすべての子のウィンドウハンドルを取得します。3.今それはトリッキーになります。GetClassName()を呼び出すと、読み取ろうとしているコントロールがカスタムであるため、WindowsForms10.STATIC.app[...]が返されます。

EnumChildWindows()からウィンドウハンドルを使用して、クリックされたコントロールのタイプを取得するにはどうすればよいですか?私がやろうとしていることは可能ですか?Win32からプロセスへのSendMessage()の使用を検討してきましたが、役立つシステム定義のメッセージがないようです。

4

1 に答える 1

1

私はそれが不可能であることを恐れています。ハンドルは、Windows が必要とするウィンドウの内部データを参照するだけです。それ以上の情報はありません。

クラス名は取得できますが、標準化されておらず、一意でもありません。ボタン、リストなどの基本機能のコントロールではないほとんどのコントロールは、非常に原始的なもの、つまり「静的」から派生しています。しかし、繰り返しになりますが、利用可能な高レベルの WinForms コントロールに関する情報はありません。

これは、型を知っていたとしても、その背後にデータがないため、ポインター/ハンドルをキャストすることはできないという事実につながります。

どういうわけかあなたの問題を言い換えることができますか? おそらくリモートプロシージャコールを使用しますか?高レベルの WinForms オブジェクトがなくても機能しますか? クリック、移動、名前の変更などは、プレーンな Win32 API で機能します。

于 2010-10-11T10:24:18.237 に答える