ポップアップ検索のフック

※現在サポートされていません

ポップアップ時に特定のEXEやDLLを実行させるための機能です。この機能により、ポップアップと同時に音声を発音させたりと、ポップアップ機能にユーザー独自の機能を追加することが可能になります。

※ここでの説明はプログラム開発者を対象にしています。 

この機能には大きくわけて2種類あります。

(1)EXEによる起動:マウスの右クリックで特定のアプリケーションを起動する(おしゃべりキットと同等)

(2)DLLによる起動:ポップアップウィンドウの表示時に指定したDLLの関数を呼び出す

簡単に実現したい場合は (1)の方法が良いです。EXEファイルに検索した単語が渡されるだけです。

さらに複雑な処理をさせたい場合は、(2)の方法がいいでしょう。 

※現在この仕様は実験段階であり、今後の使用状況によっては使い勝手・機能を含めて改善していきます。

 

■EXEによる起動

・PDICU.exeと同じフォルダーに PH.INI がある場合、そのフィル内の[KickPrg]セクションによる指定

将来、複数のEXE起動プログラムが存在するときユーザーが簡単なメニューで選択できるようにする予定です。 

PH.INIの記述方法

[KickPrg]

識別名=EXEのパス

 

識別名は適当な英数字を指定してください。どんなアプリケーションなのかなるべくわかりやすい、略語・単語がいいでしょう。ただし一般的な名称は避けてください。ほかに作成した人と重複した場合正しく動作しません。

例:

[KickPrg]

SpeechWordPro=C:\Program Files\hoge\SpeechWordPro.exe

 

パスを指定しない場合は、PDICU.exeと同じフォルダーにあるものとします。

KickPrgに複数のエントリーが合った場合は、一番最初にあるものが使用されます。

 

アプリケーション起動方法

ポップアップ検索ウィンドウでマウス右クリックしたときに、その単語をパラメーターとして指定したアプリケーションを起動します。アプリケーション側では、WinMain() 関数の lpszCmdLine に検索に使用された単語が渡されます。

■DLLによる起動

DLLで実現可能な機能は現在次に挙げるもののみです。

・ポップアップウィンドウが開く前に、検索単語をDLLに渡す

 

ポップアップウィンドウへの表示・制御、履歴ファイルの制御、キーボードの制御など、拡張する予定はあります。要望があれば作者までメールをお寄せください。

 

PDIC起動時に、ポップアップ検索フック用のDLLを探します。

対象のDLLは、

・PDICU.exeと同じフォルダーに、PH*.DLL というファイル名

・PDICU.exeと同じフォルダーの PH.INI がある場合、そのファイル内の[PopupHook]セクションでDLLの所在を指定

2つの方法で検索します。手軽なのは前者、後者は DLLの置き場所・ファイル名に制限が無いほか、オプションをINIファイルで指定可能にすることも予定しています。

 

PH.INIの記述方法

[PopupHook]

識別名=DLLのパス

 

識別名は適当な英数字を指定してください。どんな機能のDLLなのかなるべくわかりやすい、略語・単語がいいでしょう。ただし一般的な名称は避けてください。ほかに作成した人と重複した場合正しく動作しません。(DLLの種類が増えるようであれば、PDIC作者のほうで管理することも考えます)

 

例:

[PopupHook]

SpeechWordPro=C:\Program Files\hoge\SPHWRDPR.DLL

 

DLLのAPI

extern "C" __declspec(dllexport) int PHHookInit( struct PHHOOKSTRUCT *phhook )

初期化用のAPI。PDICの起動時のみ一回だけ呼ばれます。

戻り値:

0  : 正常

-1 : エラー

 

extern "C" __declspec(dllexport) int PHHook( struct PHHOOKSTRUCT *phhook )

各種動作用のAPI。

戻り値:

0  : 正常

-1 : エラー

 

注意:extern "C" はC++言語の場合必要です。つまり、PHHookInitは "PHHookInit"という名前でexportされる必要があります。上記の関数宣言は開発環境に合わせて変更してください。(上記は、VisualC++6の場合)

 

構造体

struct PHHOOKSTRUCT {

      short PDICVersion;      // [I] PDICのversionが入る(現在 0x0000)

      short Version;          // [O] DLLの対応versionが入る(現在0x0010)

      int Action;             // [I] 動作 PHA_xxx

      LPCTSTR SrchWord;       // [I] 検索対象単語

      void *reserved1;        // do not change

      void *reserved2;        // do not change

};

[I]          PDICからDLLへ渡されるパラメータ

[O] DLLからPDICへ渡されるパラメータ

[I/O] [I]と[O]

 

各メンバーの詳細

Version

DLLの対応versionが入ります。現在は0x0010を設定してください。

このメンバーを設定するのは、PHHookInit()が呼ばれたときのみです。

 

Action

次の値のいずれかが渡されます。

#define       PHA_POPUP       1

 

注意:

UNICODE版のPDICの場合は、SrchWordなどはUNICODEで渡されます。UNICODE版PDICにも対応したい場合は、LPTxxx、_T()などのマクロを使用して両コード体系に対応できるようにしてください。

 

サンプル:ポップアップするときに音を鳴らす

extern "C"

__declspec(dllexport) int PHHookInit( struct PHHOOKSTRUCT *phhook )

{

      phhook->Version = 0x0010;

      return 0;

}

 

extern "C"

__declspec(dllexport) int PHHook( struct PHHOOKSTRUCT *phhook )

{

      switch ( phhook->Action ){

      case PHA_POPUP:

              // ポップアップ時の動作を記述

              MessageBeep( MB_OK );

              return 0;

      default:

              return -1;

      }

}