秀丸で現在開いているファイル名をC層で得No.09191
天翔記.jp さん 16/10/30 15:32
 
■要望
 exeからexportでも、秀丸のウィンドウハンドルへのSendMessageでも
 どちらでもよいと思うのですが、
 現在編集ターゲットとなっているファイル名(filename2相当)を、内外から知りたい。


■現状
hidemaru.exeのニーモニックを見てみて、アセンブラを追ってみましたが、
現在の仕組みですと、開いているファイルのフルパス名を外部から得るのは、
ちょっと難しいと思います。

■現在やってる方法
秀丸「実行中」にリアルタイムに「hidearmu.exeの実行プログラム部のニーモニック
自体に杭を打つ」一種のフックアセンブラを
ごしょごしょ書いていけば数時間で実装できるかな?、
とは思いますが将来の秀丸バージョンで極端に前後の構造が変わると崩れます。
実際HmAutoCompeleteExではこのようなことをやっていますが、健全ではありません。

■ウィンドウのタイトルキャプションは使えない
秀丸タイトル部文字列は、ファイル名を出さないことも出来ますし、
文字列自体を好きに偽ることも出来ますので使用対象にはなりません。


■ということで…
・直接Hidemaru.exeからExportでも良いですし、
・Filterと合わせる形で、
 SendMeesageW( wnd, HIDEMARUINFO_GETFILEFULLPATH, NULL, wszBufferFullPath );
 など。

他プログラムからもアプリを問わず、言語を問わず、
問い合わせしやすいという意味では、
後者が良いかと思います。

ぜひ、ご検討下さい。


[ ]
RE:09191 秀丸で現在開いているファイル名No.09194
秀丸担当 さん 16/10/31 12:02
 

Hidemaru_GetTotalTextUnicodeのようにマクロを介さずファイル名を得る方法は、
公開されている方法としては無いです。
一応内部向けに方法はあるにはあるのですが、CreateFileMappingとか
MapViewOfFileとか使ってプロセスをまたいで取得する方法で、簡便ではないで
す。
SendMessageを使う方法でよければそれほど難しくはないので追加を検討したい
と思います。

[ ]
RE:09194 秀丸で現在開いているファイル名No.09196
天翔記.jp さん 16/10/31 16:02
 
>一応内部向けに方法はあるにはあるのですが、CreateFileMappingとか
>MapViewOfFileとか使ってプロセスをまたいで取得する方法で、簡便ではないで
>す。
>SendMessageを使う方法でよければそれほど難しくはないので追加を検討したい
>と思います。
ご検討ありがとうございます。

FileMapは、
「秀丸本体がFileMapに書き込み中か」とか
「公開したのでデータ構造変更できない」
とか後々に響きかねないので、非公開は守るべきだと思います。

[ ]