none
オープンファイルダイアログをサブクラス化する方法を教えて下さい。 RRS feed

  • 質問

  • 複数のアプリケーションにまたがる煩わしいアプリケーション操作の一連の流れを自動化したいと思っています。

    ですが、どうしてもサーバアプリからオープンファイルダイアログにファイル名を設定する手段が確立できません。CBTフックでダイアログ生成中にサブクラス化しようとしてもアプリが落ちるし、どうしようか困り果てています。

    なにか良い方法をご存知の方はいませんでしょうか?ちなみに、オープンファイルダイアログのクラス名は#32770と思うのですが正しいでしょうか?

    2010年4月7日 10:12

回答

  • 他のアプリの表示しているオープンDLGですよね(確認)。

    サブクラス化は自アプリ内でしか意味がないので、
    検討している方法では何もできません。
    オープンDLGをEnumWindows()で検出して、EnumChildWindows()で
    当該のエディットを取得し、クリップボード経由でファイル名を
    ペーストするぐらいしか思いつきませんね。

    2010年4月8日 3:43
  • フックプロシージャで当該DLGを捕捉できていると仮定しても、
    完全にユーザー入力待ちの安定状態になるのを検知するのは
    結構手間かもしれません。SPY++で見ればすぐにわかりますが、
    ファイルオープンDLGはサブクラス化されています。
    どのタイミングでサブクラス化されているのか不明ですが、
    いずれにしてもこの処理が完了する前に何かをを行うのは
    危険だと考えられます。
    フック内で捕捉できる情報だけで、上記状態になったことは
    検知できないかもしれません。
    • 回答としてマーク 山本春海 2010年4月16日 5:55
    2010年4月8日 6:04

すべての返信

  • 良いアイデアではないですが、"#32770"は、ダイアログ全般のクラス名ですから、これだけで判断するのは難しいです。

    2010年4月8日 2:18
  • 他のアプリの表示しているオープンDLGですよね(確認)。

    サブクラス化は自アプリ内でしか意味がないので、
    検討している方法では何もできません。
    オープンDLGをEnumWindows()で検出して、EnumChildWindows()で
    当該のエディットを取得し、クリップボード経由でファイル名を
    ペーストするぐらいしか思いつきませんね。

    2010年4月8日 3:43
  • 完全に手を加える事が出来ない他のアプリのオープンファイルダイアログです。

    フックプロシージャをインストールしてフックチェーンの中でサブクラス化する手があります。ただ、問題は、そのタイミングで、ダイアログの生成が完了したと同時にサブクラス化を行いたいんですが、そのタイミングを知るには・・・。という所です。

    2010年4月8日 4:35
  • "#32770"は識別子にならないのでしょうか?GetWindowNameが値を返すと思いますか?できればそれが一番早いんですが・・・。
    2010年4月8日 4:40
  • フックプロシージャで当該DLGを捕捉できていると仮定しても、
    完全にユーザー入力待ちの安定状態になるのを検知するのは
    結構手間かもしれません。SPY++で見ればすぐにわかりますが、
    ファイルオープンDLGはサブクラス化されています。
    どのタイミングでサブクラス化されているのか不明ですが、
    いずれにしてもこの処理が完了する前に何かをを行うのは
    危険だと考えられます。
    フック内で捕捉できる情報だけで、上記状態になったことは
    検知できないかもしれません。
    • 回答としてマーク 山本春海 2010年4月16日 5:55
    2010年4月8日 6:04
  • すいません。自己解決してしまいました。WM_ENTERIDLEが使い勝手が良いです。アドバイス頂いた皆様、どうも有難うございました。

    2010年4月8日 9:47
  • hystrix-cristata さん、こんにちは。フォーラムのご利用ありがとうございました。

    皆様も有効な情報ありがとうございました。勝手ながら、仲澤@失業者 さんからの情報に回答としてマークさせていただきました。有効な情報には、回答としてマークすることで、今後このスレッドを参照する方の目にとまりやすくなりますので、マークをつけてみてくださいね。
    今後とも、よろしくお願いいたします。それでは。

    2010年4月16日 6:10