外部アプリから秀丸メールのインストールNo.04229
さん 18/11/09 07:35
 
 こんにちは、お世話になります。

 外部アプリからtkinfo.dllの関数を呼ぼうと思ったとき、秀丸メールをインストー
ルしているパスを取得する必要があります。
 インストール版であれば、レジストリの

HKEY_CURRENT_USER\Software\Hidemaruo\TuruKame\Config\TuruKameDir

からパスを取得すればいいですが、持ち出しキットで動作している場合は、上記レジ
ストリから取得できません。
 そこで質問なのですが、持ち出しキットで動作している場合に秀丸メールのインス
トールパスを取得するには、どうすればよいでしょうか。
 sendmessage等で秀丸メールにコマンドを送って、それで取得するっていうのが一
番手っ取り早い気がしているんですが、そのような機能追加は可能でしょうか。

 以上、よろしくお願いいたします。

[ ]
RE:04229 外部アプリから秀丸メールのインNo.04230
秀まるお2 さん 18/11/09 08:55
 
 exeファイルのパス名は、PSAPI(Process Status API)を使えば取得できます。

 − FindWindowか何かで秀丸メールのウィンドウハンドルを特定する。
 − GetWindowThreadProcessIDにて秀丸メールのプロセスIDを取得。
 − OpenProcess( PROCESS_QUERY_INFORMATION, ...で問い合わせ用のプロセスハ
ンドルを取得。
 − EnumProcessModulesにてモジュール一覧を列挙しつつ、
   GetModuleFileNameExでファイル名を取得し、その中からTurukame.exeを
   探す。

 みたいな処理でいけるはずだと思います。

 もしかしてアクセス権限の関係で取得不可ってことはあるかもしれませんが・・・。
(Windows10だと)
 アクセス不可だとすると、たぶんOpenProcessでエラーが返ると思います。その場
合は・・・、sendmessageで無理矢理マクロを実行させて、そのマクロからloaddllし
て上記処理を実行しないとダメかもしれません。ダメでしたらまた何か別の対策を考
えてみてもいいです。

[ ]
RE:04230 外部アプリから秀丸メールのインNo.04231
さん 18/11/09 09:05
 
 こんにちは、お世話になります。

> exeファイルのパス名は、PSAPI(Process Status API)を使えば取得できます。
>
> − FindWindowか何かで秀丸メールのウィンドウハンドルを特定する。
> − GetWindowThreadProcessIDにて秀丸メールのプロセスIDを取得。
> − OpenProcess( PROCESS_QUERY_INFORMATION, ...で問い合わせ用のプロセスハ
>ンドルを取得。
> − EnumProcessModulesにてモジュール一覧を列挙しつつ、
>   GetModuleFileNameExでファイル名を取得し、その中からTurukame.exeを
>   探す。
>
> みたいな処理でいけるはずだと思います。

 以前別のソフトを作製したときに似たような処理をさせたいことがあり、ご提示い
ただいたAPIを利用したことがありますが、Administrator以外のアカウントでサイン
インしている場合、うまくパスを取得できないようで、PSAPIを利用するソフトを管
理者として実行させる必要がありました。
 なので、上記のAPIは多分使えないと思います。

> もしかしてアクセス権限の関係で取得不可ってことはあるかもしれません
>が・・・。(Windows10だと)
> アクセス不可だとすると、たぶんOpenProcessでエラーが返ると思います。その場
>合は・・・、sendmessageで無理矢理マクロを実行させて、そのマクロからloaddll
>して上記処理を実行しないとダメかもしれません。ダメでしたらまた何か別の対策
>を考えてみてもいいです。

 こっちの方は、ちょっと時間ができたときに試してみます。

 それでは。

[ ]
RE:04230 外部アプリから秀丸メールのインNo.04232
秀まるお2 さん 18/11/09 09:19
 
 今ちょっとネット検索したら、Windowsのコマンドでexeファイルのパスが簡単に取
得できるようでした。

    wmic process where "name = 'turukame.exe'" get name, commandline

 ってコマンドラインで実行できるようです。

 そういう作戦の方が簡単かもしれません。例えば秀丸エディタのマクロとかでも上
記やり方なら出来ると思います。

[ ]
RE:04232 外部アプリから秀丸メールのインNo.04237
さん 18/11/09 22:52
 
 こんにちは、お世話になります。

>    wmic process where "name = 'turukame.exe'" get name, commandline
>
> ってコマンドラインで実行できるようです。

 おお、こんな方法があるんですね。
 コマンドプロンプトでコマンドを実行する間少し時間がかかりますが、これは便利
そうです。
 とりあえず、この方法で試してみます。

 それでは。

[ ]