クリップボード履歴を監視し、他アプリのカーソルのあるエディットなどに文字列を貼り付けるアプリをXE3上で作っています。SetWindowsHookExを使ったdllでグローバルフックをかけて送信先ウィンドウハンドルを得ているのですが、自アプリ/dllとも64bitでコンパイルし、Win7 64bit上で動かした場合、他の64bitウィンドウハンドルは問題ないのですが、WOW64で動作している32bitアプリはウィンドウハンドルを取得できません(逆に32bitでコンパイルすると、64bitが取得できなくなります)。要するに、相手が32bitか64bitかに関わらず、ウィンドウハンドルを知りたいのですが、こういう場合はどうやって対処すればいいのでしょうか? 方向性だけでもご教示いただけると幸いです。
次の方法で試したことがあります。
(1) 32bitアプリからフック(32bit-dll)する。
(2) 同じ32bitアプリからCreateProcessで64bit版のrundll32.exe経由でフック(64bit-dll)する。
(3) 両フックdllと、32bitアプリ間でメッセージ交信する。
もし、単一exeにこだわらなければ、32bitアプリと64bitアプリの両方を作成して、メッセージ交信する、という方法も考えられます(こちらの方が一般的かもしれませんが、定石を知らないので...)。
Nov様、回答ありがとうございます。大変参考になりました。
教えていただいた(1)-(3)の方法も具体的なことはまだよくわからないのですが、
この方向でもう少し調べてみようと思います。
ただ、もう一つの方法(32bitアプリと64bitアプリの両方を作成して、メッセー
ジ交信する)も大変気になります。単一exeにこだわってはいないので、どなた
か、このあたりのヒントをいただけるとうれしいのですが...
> 32bitアプリと64bitアプリの両方を作成して、メッセージ交信する
[プロセス間通信]
http://msdn.microsoft.com/ja-jp/library/aa384203%28v=VS.85%29.aspx
DEKO様、回答ありがとうございます。
少し調べてみましたが、なかなか具体的なコーディング例が見つからず、まだ
まだちんぷんかんぷんでよくわかりません。気合いを入れて勉強し直すことに
します。
(というわけで、とりあえず解決ということにしておきます)
ツイート | ![]() |