Windows 全体で定義済みのウィンドウ クラスの 1 つを置き換える必要があります。たとえば、「EDIT」クラスを置き換えて、Windows プログラムがCreateWindowEx
クラス名の引数として「EDIT」を呼び出すたびに、独自のカスタム編集ボックスが使用されるようにします。
どうすればこれを達成できますか?メッセージフックは役に立ちますか? この場合、メッセージ フックのオーバーヘッドが大きすぎると思います。私の代替手段は何ですか?
求めているのは、つまり、他のプロセスで見られる「EDIT」クラスの動作を変更することはセキュリティリスクであり、実装するのは簡単ではありません。たとえば、http://msdn.microsoft.com/en-us/library /ms997565.aspxは、「サブクラス化はプロセス内でのみ許可されます。アプリケーションは、別のプロセスに属するウィンドウまたはクラスをサブクラス化することはできません。」と述べています。
それが不可能なアーキテクチャ上の理由は、コードがウィンドウクラスに関連付けられていること、コードがサブクラスに関連付けられていること、およびコードを他のプロセスで簡単に利用できない(実行できない)ことです(ハックを介した場合を除く)。 DLLインジェクションなどの手法)。
APISetWindowsHookEx
は、サブクラス化する代わりに、必要なものを提供しますか?