トップ回答者
グローバルフックで他アプリケーションのテキスト範囲選択を取得できるか?

質問
回答
すべての返信
-
難しい部分もあるのではないかと感じています。
どこまでカバーできればよいのでしょうか。不特定多数をカバーするのか、自分の環境だけなのか。まず、対象をテキストボックスに限定してよいのかという点です。
アプリケーションによっては独自のコントロールとして作成・実装しており、テキストボックス対象でフックしていても検出できない可能性があります。
WPF アプリケーションなんかだと、テキストボックス自体検出が難しいかもしれませんね、従来の方法では。(チャイルドウィンドウがないようなものなので)テキストボックスに限定できたとして、選択部分の文字列を取得するためにはそのプロセス内でウィンドウメッセージを送らないといけないと思われます。
そのプロセスで文字列を受け取った後、ホストとなるアプリケーションに転送しなければなりません。結構面倒くさい処理になりそうですね。# あとは、UAC とか WOW64 とか、考え始めるといろいろと大変そう。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
Azuleanさん、返信ありがとうございました
対象はテキストボックスのみではありません。
昔、WordLinkerというフリーウェアがあったのをご存知でしょうか?このプログラムはマウスイベントを
グローバルフックし、ドラッグ選択時のボタンアップ時にコピーコマンドを送信して、クリップボード経由で
テキストを取得していたと思います
今回検討しているのは、”範囲選択済みのテキスト上でクリックしたときに動作すること”ですので、
選択から取得の間に制御が離れるため、難易度はさらに高くなります(というか不可能かも知れません)
もう少し情報提供を待って、それで不可能であれば代替手段を考えようと思います
まずはお礼まで
-
昔、WordLinkerというフリーウェアがあったのをご存知でしょうか?
申し訳ありませんが、存じません。
今回検討しているのは、”範囲選択済みのテキスト上でクリックしたときに動作すること”ですので、
選択から取得の間に制御が離れるため、難易度はさらに高くなります(というか不可能かも知れません)
開発者なんですから、試しましょうよ。
すでに質問を投稿してから 1 日は経過しているわけですし、その間に試したらできる・できないか、難易度がわかってくるかと思います。正直なところ、やめた方がよいとは思っています。
範囲選択後ドラッグしてテキストを移動と言うこともあり得ますし、クリックで選択が解除と言うこともあり得ます。このときにどのように動くように作れば、既存の操作感を失わないかわかりません。
また、テキストボックス以外もサポートが必要とおっしゃられていますが、対象のアプリケーションの実装によっては、範囲選択されたかどうかすら知りようがない可能性もあります。ウィンドウメッセージで制御する方法が公開されていなければ、独自のコントロールに対して何らかの外的操作を実現することはできません。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
>対象はテキストボックスのみではありません。
>”できない”と断言できないから困っているのです
できません。すでに挙げられている理由に加え、
Application-Hook DLL間でそのような仕組みや合意形成された枠組みは存在しません。
Applicationからすれば、与り知らない所で想定していない処理が行われていることになります。
最悪の場合、Applicationが異常終了します。>試せることはありません
実際に実装を行い、例えばVisual Studio 2010のCode Editor(WPF)でどのような挙動になるか調べてみては如何でしょうか。
これ以上はご自身で納得する理由を実装により求めていったほうが良いと思いますよ。一般的にこのような動作をするSoftwareは、Host ApplicationのAdd-on/in等の拡張機能を利用し、
その仕様に従い実現することが多いでしょう。(合意形成された枠組みが提供されているから実現できる)>WordLinker
私も知りませんが、以前のOSは今と違いSecurityも甘かったですし、
今のようなWPF等のUI技術も存在していませんでした。
ですから、融通が利き実現できていたと考えられます。 -
すみません、説明が足りなかったようで、色々ご指摘いただいたことは全て把握済みの
状態でのここでの質問です。ですので、試せることはありません開発者なのですから、状況説明ぐらいはきちんとしましょう。
(すでに把握している事柄を述べていただけていれば、私の書いた労力は無駄にならなかったかもしれません。orz)試せるとすれば、すでに提案のあるように、WPF のテキストボックスをうまく探せないこと、つまり難易度が高いことを示すことでしょうか。
そのほかに、いくつかの高機能なテキストエディタで試してみてどうか、Microsoft Office やオープンなオフィススイートを試してどうかと実験データを集めて、簡単にできないという知見が得られれば、それを元に「やらない」という判断ができるように思えます。ヘルプ、ネット上の検索でも答えはみつからないので、あとはMS社の技術サポートということになります
”できない”と断言できないから困っているのですやろうとする人がいなければ、そういった情報がないのは必然でしょう。
別に、”できない”と断言する必要はなくて、前述したように”相当に難しい”ことを示せればよいのでは?
たとえば、それを実現するために 1 億円かかるとか言い出せば、その人(上司?顧客?)は引っ込めるかと思いますし。
(1 億円軽く払える人にそれを言うと、墓穴を掘ることになるんですが)あと、Microsoft の技術サポートに頼っても、回答できないような気がします。
すべてのアプリケーションを作っているわけでも、アプリケーションのルールを決めているわけでもないので、Microsoft 自身も「できる」「できない」を断言できないでしょう。
世の中の人々がどういったものを作っているか、すべてを知っている人はいないのですから、断言できる人・会社はいません。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。