K2さんの雑記
2002-12-07(Sat) [長年日記]■ [TTBase]AlwaysK2Eプラグインプラグイン中毒にかかっていますので(^^; また一本作ってしまいました。 いや、実は、今日、別のことをやろうとして、エクスプローラからK2Editorに関連付けられていないファイルをK2Editorで開こうとして、ふっと閃いてしまいました。 そういやー、昔(Win95の頃)は、WZEditor 3.0を入れると、エクスプローラ上でSHIFT+ENTERを押すと、強制的にWZEditorで開いてくれたよなぁ。あれ便利だったなぁ。 あれ確か、レジストリの関連づけの裏技みたいなの使ってたんだよなぁ。Windows98あたりから、その裏技が使えなくなって、この機能が消滅してしまったんだよなぁ。 ん、そういえば、常駐もんでこの機能を実現できるんじゃないの? エクスプローラ上でSHIFT+ENTERを監視して、そのイベントをエクスプローラから横取りして、K2Editorにファイルを送っちゃえばいいやん。 大枠は割と簡単にできた。で、いざエクスプローラで選択されているファイル名を取得しようとして、はたと行き詰まってしまった。ファイル名はリストビューから取ればよいんだろう。じゃぁフォルダ名はどうするの。アドレスバーにあるじゃない。んー、でもフォルダオプション変更すると、ここフルパスじゃなくなってしまうんだよなぁ。 それからWEBで検索をしてみたが、あんまりいい情報がない。DelphiMLで、どなたかが、「ShellWindowsとInternetExplorerを使えばいけるのではないか」というアイデアを書いていらっしゃるのを見つけたが、具体的なコードはない。ShellWindowsで調べても、あんまり情報がないのだよなぁ。で、もう一度DelphiのVCLに戻って、ShellWindowsを調べると、TShellWindowsというのがあった。どうやら、エクスプローラとインターネットエクスプローラを列挙してくれるActiveX系のオブジェクトのようだ。使い方が全くわからん。検索しても、Delphi関連のページでは情報がほとんどない。適当にやってみたら、なんとかできてしまった。 SW := TShellWindows.Create(nil); Count := WS.Count; for I := 0 to Count - 1 do (SW.Item(I) as InternetExplorer).LocationURL これで、フォルダ名のフルパス(実際にはURL形式だから加工が必要だが)が取れる。で、そのまま完成型まで持っていったが、このプラグインをエクスプローラで使用すると、エクスプローラを終了するときに、エクスプローラが結構致命的なエラーを吐くことがわかった。 昔、フックとDelphi製のDLLで同じようなエラーを出してかなり長時間はまったことがあったので、今回もそれかと想像。フック部分はVCで書いていたのだが、慣れの問題で、Delphiで書いた方が開発速度が一桁くらい上がるのよねぇ。で、ActiveX系のややこしいところはDelphiで書こうとしていたんだが、全部VC++に移植しないとあかんかなぁと。まぁ、とりあえず調査調査で、結局、先ほどのコードが原因だったことが判明した。 実際には、 var SW: IShellWindows; SW := CoShellWindows.Create; for I := 0 to SW.Count - 1 do begin (SW.Item(I) as InternetExplorer).LocationURL; と書く必要がありました。うーん、この辺に関しては絶対的な知識不足だー。こんなコードをすらすら書けるようになるのか。やはりCOM関連は一度ちゃんと勉強しないといけない。でも、関連ドキュメントが少なすぎるよー。 さて、もう一つ問題は、エクスプローラのリストビューから、ファイル名を取得する部分。これが結構ややこしくて、そう簡単にはファイル名を教えてくれない。共有メモリをちゃんと作成しないといけないし、一見使えそうなListView_GetItemTextは使えないことが判明。この辺はCで書いた方が楽らしい。Cなら上記マクロはちゃんと動くようだ。 で、最初は楽勝楽勝と思っていたが、最終的にかなり大変な作業になってしまった。 しかし、懐かしのSHIFT+ENTERでテキストエディタ強制起動というのは、やっぱりかなり便利。まぁ、こんなのを便利だと言える人は、やっぱりかなり普通の人ではないのかもしれないけど。 うちのベータページに置いてあります。興味のある方はどうぞ。 [ツッコミを入れる]
1965|09|
|
//
自己紹介
自己紹介
広告
計るだけダイエット
つっこみリスト
TrackBacks
日記仲間
な/
す/
ひ/
最近の日記
|