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

  • 質問

  • 具体的に以下の2の機能を実現したいのです

    1. 他のアプリケーションで文字列を範囲選択する
    2. その範囲選択上でマウスクリックすると、自作アプリケーションでその選択文字列を取得し何らかの処理を行う

    市販の辞書ソフトウェアで、クリップボードへのコピーイベントをトリガとしているものは

    あるのですが、コピーするたびにこの機能も起動してしまうので使い勝手がいまいちです

    グローバルフック(それ以外の実装でも可)で上記を実現することは可能でしょうか?

    よろしくお願いいたします

     

    2011年7月12日 3:22

回答

  • >開発者なんですから、試しましょうよ。

    すみません、説明が足りなかったようで、色々ご指摘いただいたことは全て把握済みの

    状態でのここでの質問です。ですので、試せることはありません

    ヘルプ、ネット上の検索でも答えはみつからないので、あとはMS社の技術サポートということになります

    ”できない”と断言できないから困っているのです

     

    • 回答としてマーク nakawa 2011年7月16日 0:29
    2011年7月14日 4:11

すべての返信

  • 難しい部分もあるのではないかと感じています。
    どこまでカバーできればよいのでしょうか。不特定多数をカバーするのか、自分の環境だけなのか。

    まず、対象をテキストボックスに限定してよいのかという点です。
    アプリケーションによっては独自のコントロールとして作成・実装しており、テキストボックス対象でフックしていても検出できない可能性があります。
    WPF アプリケーションなんかだと、テキストボックス自体検出が難しいかもしれませんね、従来の方法では。(チャイルドウィンドウがないようなものなので)

    テキストボックスに限定できたとして、選択部分の文字列を取得するためにはそのプロセス内でウィンドウメッセージを送らないといけないと思われます。
    そのプロセスで文字列を受け取った後、ホストとなるアプリケーションに転送しなければなりません。結構面倒くさい処理になりそうですね。

    # あとは、UAC とか WOW64 とか、考え始めるといろいろと大変そう。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年7月12日 14:14
    モデレータ
  • Azuleanさん、返信ありがとうございました

    対象はテキストボックスのみではありません。

    昔、WordLinkerというフリーウェアがあったのをご存知でしょうか?このプログラムはマウスイベントを

    グローバルフックし、ドラッグ選択時のボタンアップ時にコピーコマンドを送信して、クリップボード経由で

    テキストを取得していたと思います

    今回検討しているのは、”範囲選択済みのテキスト上でクリックしたときに動作すること”ですので、

    選択から取得の間に制御が離れるため、難易度はさらに高くなります(というか不可能かも知れません)

    もう少し情報提供を待って、それで不可能であれば代替手段を考えようと思います

    まずはお礼まで

    2011年7月13日 5:23
  • 昔、WordLinkerというフリーウェアがあったのをご存知でしょうか?

    申し訳ありませんが、存じません。

    今回検討しているのは、”範囲選択済みのテキスト上でクリックしたときに動作すること”ですので、

    選択から取得の間に制御が離れるため、難易度はさらに高くなります(というか不可能かも知れません)

    開発者なんですから、試しましょうよ。
    すでに質問を投稿してから 1 日は経過しているわけですし、その間に試したらできる・できないか、難易度がわかってくるかと思います。

     

    正直なところ、やめた方がよいとは思っています。
    範囲選択後ドラッグしてテキストを移動と言うこともあり得ますし、クリックで選択が解除と言うこともあり得ます。このときにどのように動くように作れば、既存の操作感を失わないかわかりません。
    また、テキストボックス以外もサポートが必要とおっしゃられていますが、対象のアプリケーションの実装によっては、範囲選択されたかどうかすら知りようがない可能性もあります。ウィンドウメッセージで制御する方法が公開されていなければ、独自のコントロールに対して何らかの外的操作を実現することはできません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年7月13日 13:58
    モデレータ
  • >開発者なんですから、試しましょうよ。

    すみません、説明が足りなかったようで、色々ご指摘いただいたことは全て把握済みの

    状態でのここでの質問です。ですので、試せることはありません

    ヘルプ、ネット上の検索でも答えはみつからないので、あとはMS社の技術サポートということになります

    ”できない”と断言できないから困っているのです

     

    • 回答としてマーク nakawa 2011年7月16日 0:29
    2011年7月14日 4:11
  • >対象はテキストボックスのみではありません。
    >”できない”と断言できないから困っているのです
    できません。

    すでに挙げられている理由に加え、
    Application-Hook DLL間でそのような仕組みや合意形成された枠組みは存在しません。
    Applicationからすれば、与り知らない所で想定していない処理が行われていることになります。
    最悪の場合、Applicationが異常終了します。

    >試せることはありません
    実際に実装を行い、例えばVisual Studio 2010のCode Editor(WPF)でどのような挙動になるか調べてみては如何でしょうか。
    これ以上はご自身で納得する理由を実装により求めていったほうが良いと思いますよ。

    一般的にこのような動作をするSoftwareは、Host ApplicationのAdd-on/in等の拡張機能を利用し、
    その仕様に従い実現することが多いでしょう。(合意形成された枠組みが提供されているから実現できる)

    >WordLinker
    私も知りませんが、以前のOSは今と違いSecurityも甘かったですし、
    今のようなWPF等のUI技術も存在していませんでした。
    ですから、融通が利き実現できていたと考えられます。

    2011年7月14日 8:55
  • すみません、説明が足りなかったようで、色々ご指摘いただいたことは全て把握済みの
    状態でのここでの質問です。ですので、試せることはありません

    開発者なのですから、状況説明ぐらいはきちんとしましょう。
    (すでに把握している事柄を述べていただけていれば、私の書いた労力は無駄にならなかったかもしれません。orz)

    試せるとすれば、すでに提案のあるように、WPF のテキストボックスをうまく探せないこと、つまり難易度が高いことを示すことでしょうか。
    そのほかに、いくつかの高機能なテキストエディタで試してみてどうか、Microsoft Office やオープンなオフィススイートを試してどうかと実験データを集めて、簡単にできないという知見が得られれば、それを元に「やらない」という判断ができるように思えます。

    ヘルプ、ネット上の検索でも答えはみつからないので、あとはMS社の技術サポートということになります
    ”できない”と断言できないから困っているのです

    やろうとする人がいなければ、そういった情報がないのは必然でしょう。
    別に、”できない”と断言する必要はなくて、前述したように”相当に難しい”ことを示せればよいのでは?
    たとえば、それを実現するために 1 億円かかるとか言い出せば、その人(上司?顧客?)は引っ込めるかと思いますし。
    (1 億円軽く払える人にそれを言うと、墓穴を掘ることになるんですが)

    あと、Microsoft の技術サポートに頼っても、回答できないような気がします。
    すべてのアプリケーションを作っているわけでも、アプリケーションのルールを決めているわけでもないので、Microsoft 自身も「できる」「できない」を断言できないでしょう。
    世の中の人々がどういったものを作っているか、すべてを知っている人はいないのですから、断言できる人・会社はいません。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年7月14日 13:36
    モデレータ
  • (すでに把握している事柄を述べていただけていれば、私の書いた労力は無駄にならなかったかもしれません。orz)

    これは申し訳ないことをしました

    ご返信いただいたお二方、ありがとうございました

    2011年7月16日 0:29