[BlueLeaf1336]> PROBLEMS> ClickThereItIs!>

ClickThereItIs! - さらなる問題発生

historyTOP

2004/02/04:作成
2004/02/05:更新
2004/02/08:更新
2004/02/12:更新
2004/02/13:更新

関連:チョボチョボと修正

問題点(1)TOP

2004/02/04

完成前からのユーザさん(多分開発者よりよく使ってはる)の報告でボロがでてきたんですが、とりあえず整理します。

検討(1)TOP

2004/02/04

参考になるかもなリンク

「マイコンピュータ」問題については、もし今指定されたフォルダが「マイコンピュータ」だと分かれば「::{20D04FE0-3AEA-1069-A2D8-08002B30309D}」とか「マイネットワーク」だと分かれば「::{208D2C60-3AEA-1069-A2D7-08002B30309D}」とかを渡すことでいけそうな気がするんですが...どうやってそのフォルダがマイコンピュータであると知るんでしょうか。

「(Delphi)\Demos\VirtualListView\」でいろいろとShell関連のコードがあってヒントになってるような気がするんですが、どうも分からないです。当然「マイコンピュータ」という文字列かどうかをそのまま比較したところで話になりませんしねぇ。

とりあえず、ダイアログに送りつける前に「そのフォルダパスが有効かどうか」をチェックすべきですね。で、ためすとエラーはでなくなりました(あたりまえですが)。ただ「デスクトップ」もだめだと気付きました。といっても画面いっぱいに見えているデスクトップはよいのですが、たとえば「マイコンピュータ」を開いて一つ上の階層に上った時の「デスクトップ」と「アドレス」欄に表示された時のデスクトップです。うーん。おんなじ問題です。

さっきの魔法の呪文のようなIDをPeggyPadの開くダイアログに入力したら確かに移動しました。やっぱり残すは「今どのフォルダが開かれているのか?」の特定です。

「マイコンピュータ」かどうかTOP

2004/02/05

さらにリンク

とりあえず方針を決めました。つまり、「マイコンピュータ」「マイネットワーク」「デスクトップ」それから「実際の別コンピュータ」がエクスプローラの「アドレス」欄に表示された場合の対処についての方針を決めました。泥臭く行こうと。

まず、開きたいファイルの選択時や保存場所の選択は、実際のローカルにある普通のフォルダか、上記の4つの場所のいずれかだろうと言うことにします。で、スクリーン上の任意の場所でのマウスアクションのタイミング(今はMouseUp)で、その場所にあるウィンドウを調べます。

このとき、(1)得られたウィンドウのクラス名が「ExploreWClass」か「CabinetWClass」ならいくつかの子ウィンドウを検索し最終的に「アドレス」欄に辿り着いてそこに書いてある文字列を取得します。(2)そうではなく「Progman」というクラス名ならデスクトップのパスを取得します。このパスは全く別にAPIを使用して取得します。...ココまでが現在の処理内容です。

ここで、「取得した文字列がパスとして実際に存在するかどうかをチェックする処理」がないのはまずいだろうということで前回修正をしました。いうなればこの処理をもうちょっと膨らまそうということです。

つまり

ということです。問題は...開発環境がネットワークではないことぐらいですか。あと、比較する文字列はINIファイルにでも抱え込んでおくことにしましょう。

メモリマップドファイル系自作自演例外発生TOP

2004/02/05

まず、アプリケーション側で二重起動を防止します(Delphi2.0で二重起動しないようにする方法)。それからDLL側で既にメモリマップドファイルが存在しているならそれを一旦削除して再度作成するようにします。つまり「このDLLを呼ぶのはたった1人だ。で、既に書き込みがあったらそれは前回の残りかす=消し損ねに違いない。消す!」ということです。

今日のところはとりあえずそんな感じで行きます。

その他TOP

2004/02/08

「デスクトップ」とどうやって開くのか分からないです。「デスクトップに表示されているモノが置いてあるフォルダ」は取得できますが、「マイコンピュータ」とか「マイネットワーク」も表示されるようなデスクトップが分からないです。

フォルダ選択後にターゲットアプリを前に表示したいんですが、それに関連しそうなリンク。

2004/02/09

2004/02/12

かなり実用的になってきたので、タスクトレイにおさめて邪魔にならないようにする予定です。で、そのためのリンク。

2004/02/13

EOFTOP