[BlueLeaf1336]> PROBLEMS> ClickThereItIs!>
history | TOP |
2004/01/29:作成
2004/01/30:更新
前ページからの続き | TOP |
2004/01/29
とりあえずPlatformSDKの「Open and Save As Dialog Boxes」というページ(ms-help:// MS.PSDK.1033/ winui/ winui/ windowsuserinterface/ userinput/ commondialogboxlibrary/ aboutcommondialogboxes/ openandsaveasdialogboxes.htm[適当にちぎってます])で、エディットコントロールの名前を調べたところ、「edt1」であることが分かりました。で既にリンクしたスレッドの中であたりまえのように使っている名前なので、ちょっと試してみるとエラーです。
Delphi6はPersonalなのでソースを持ってませんが、C++Builder5を持ってましてこれはProfessionalでソース付きなのでそれっぽいユニットを捜してみると「dlgs.pas」というのが見つかりました。中を見てみると確かに「edt1」が宣言してあります。ついでに「開く」ボタンは「IDOK」という名前でした。
結局、方針はこんな感じになります。
参考になりそうなページ:コモンダイアログのカスタマイズ
いきなり2つ目で躓いてしまいました。今は厳密にはタゲアログだけではなくてダイアログ全般の生成/破棄を監視できている状態ですが、テストとしては十分で、メモ帳を起動して「ファイルを開く」とすれば確かに監視できていることが分かります。この状態でそのダイアログのウィンドウハンドルに対して、
GetDlgItem(そのハンドル,edt1)とやってるんですが、これが駄目。前述スレッド中のサンプルをみてみるとところどころに
GetParentが使われているのが気になります。が時間切れ。あとは明日...?にまわします。
タゲアログのみているフォルダを外から変更できました | TOP |
2004/01/30
念願のというかまだまだ一部ですが、完全に人の物の「ファイルを開く」ダイアログの表示しているフォルダを変更することができました。試してませんが、「保存する」ダイアログでもいけるはずです。もちろんかなり適当で保険をいっぱいかける必要があるのは間違いないです。それに切り替えの際に一瞬「ファイル名入力エディットボックス」に切り替え先のフォルダ名が見えてしまうのがなぁ。
procedure TMainForm.Button1Click(Sender: TObject); var WH, EditWH, OkWH: HWND; Buf: array[0..255] of Char; PreText: string; begin if ListBox1.ItemIndex = -1 then Exit; // ダイアログのハンドル取得 WH := StrToInt(WindowHandleList[ListBox1.ItemIndex]); // Editコントロール検索 EditWH := GetDlgItem(WH, edt1); if (EditWH = 0) then Exit; // 今の文字列をバックアップしておく FillChar(Buf, SizeOf(Buf), #0); SendMessage(EditWH, WM_GETTEXT, SizeOf(Buf), Integer(@Buf)); PreText := Buf; // 書き込む SendMessage(EditWH, WM_SETTEXT, 0, Longint(PChar(Edit1.Text))); // OKボタン検索 OkWH := GetDlgItem(WH, IDOK); if (OkWH = 0) then Exit; // OKボタン押す SendMessage(OkWH, BM_CLICK, 0, 0); // 元に戻す SendMessage(EditWH, WM_SETTEXT, 0, Longint(PChar(PreText))); end;
ただ、ヘコむのはこのコードだと「メモ帳」では失敗するということです。Windows2000でsp4でIE6でWindowsUpdate全て適用が効いているのか、うちのメモ帳は
こんな感じなんですねぇ。「ファイルを保存する」ダイアログが。この左側の良い感じの部分があるのとないのでえらい違いなようで、たとえば「PeggyPad」の
こんなよく見る(よく見た?)ダイアログだと見事に成功します。adrenalineで発見を喜んだFODH - File Open (and SaveAs) Dialog Helperはどうなんでしょうか。気になるところですが、とりあえずココでフォルダの切り替え問題はいったん置きましょう。まだまだすることはあります。
ココまでの整理とココからの整理 | TOP |
2004/01/30
何度か書いたような気がしますが、ここらで「何をどのようにするのか」「どこまでできているのか」を整理しておきます。
ToDo | Progress | Memo |
---|---|---|
"Open/SaveAs"ダイアログ(タゲアログ)生成を検知 | 70% | ダイアログの生成を無差別に検知 CBTフック |
タゲアログが"マウスクリックにより" 非アクティブになったことを検知 | 10% | CBTフック |
その時のマウスカーソルの位置にある エクスプローラのフォルダパスを取得 | 0% | ... |
タゲアログに送りつける | 90% | 終わりかけ |
タゲアログをアクティブに戻す | 0% | 簡単そう |
こんな感じでしょう。進んでるんだかとまってるんだか分かりませんが、このままダラダラページ数を増やしても仕方がないので、それぞれを1ページずつにまとめていこうと思います。で仕上げの1ページで計6ページ...タイガイですが、もはや日記のようなものですので。
EOF | TOP |