※現在サポートされていません
ポップアップ時に特定の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;
}
}