ITfKeystrokeMgr
COM公式ドキュメント
ITfKeystrokeMgr インターフェイスは TSF マネージャーによって実装され、アプリケーションやテキストサービスがキーボードマネージャーとやり取りするために使用します。
メソッド 14
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfKeystrokeMgr::AdviseKeyEventSink メソッド
| tid | DWORD | in | キーイベントシンクを所有するクライアントの識別子。この値は、事前の ITfThreadMgr::Activate の呼び出しによって取得します。 |
| pSink | ITfKeyEventSink* | in | ITfKeyEventSink インターフェイスへのポインター。 |
| fForeground | BOOL | in | このキーイベントシンクをフォアグラウンドのキーイベントシンクにするかどうかを指定します。TRUE の場合、このキーイベントシンクはフォアグラウンドのキーイベントシンクになります。それ以外の場合、このキーイベントシンクはフォアグラウンドのキーイベントシンクにはなりません。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 | |
| tid で識別されるクライアントには、すでにキーイベントシンクがインストールされています。 |
解説(Remarks)
フォアグラウンドのキーイベントシンクは、すべてのキーボードイベントを受け取ります。フォアグラウンドではないキーイベントシンクは、予約キー (preserved key) と、そのクライアント識別子が所有するものとしてマークされたテキスト上で発生したキーイベントのみを受け取ります。
ITfKeystrokeMgr::UnadviseKeyEventSink メソッド
| tid | DWORD | in | キーイベントシンクを所有するクライアントの識別子。この値は、ITfKeystrokeMgr::AdviseKeyEventSink でアドバイズシンクをインストールした際に渡した値です。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| tid パラメーターが無効です。 | |
| tid で識別されるアドバイズシンクが見つかりませんでした。 |
ITfKeystrokeMgr::GetForeground メソッド
| pclsid | GUID* | out | フォアグラウンドの TSF テキストサービスのクラス識別子を受け取る CLSID へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| フォアグラウンドのテキストサービスが存在しません。 | |
| pclsid が無効です。 | |
| 原因不明のエラーが発生しました。 |
ITfKeystrokeMgr::TestKeyDown メソッド
| wParam | WPARAM | in | キーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYDOWN の wParam パラメーターを参照してください。 |
| lParam | LPARAM | in | キーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYDOWN の lParam パラメーターを参照してください。 |
| pfEaten | BOOL* | out | キーイベントが処理されるかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| キーイベントシンクがインストールされていません。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
アプリケーションはこのメソッドを使用して、キーイベントがキーストロークマネージャーによって処理されるかどうかを判定できます。このメソッドが成功し、pfEaten が TRUE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyDown を呼び出す必要があります。このメソッドが S_OK を返さない場合、または pfEaten が FALSE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyDown を呼び出してはいけません。以下は実装例です。
if(msg.message == WM_KEYDOWN)
{
if( pKeyboardMgr->TestKeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten
&& pKeyboardMgr->KeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten)
{
//The key was handled by the keystroke manager or a TSF text service. Do not pass the key to the application.
continue;
}
else
{
//Let the application process the key.
}
}
キーストロークマネージャーがキーイベントを処理しない場合、テキストサービスの ITfKeyEventSink::OnTestKeyDown メソッドを呼び出して、キーイベントを TSF テキストサービスへ渡します。
ITfKeystrokeMgr::TestKeyUp メソッド
| wParam | WPARAM | in | キーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYUP の wParam パラメーターを参照してください。 |
| lParam | LPARAM | in | キーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYUP の lParam パラメーターを参照してください。 |
| pfEaten | BOOL* | out | キーイベントが処理されるかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| キーイベントシンクがインストールされていません。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
アプリケーションはこのメソッドを使用して、キーイベントがキーストロークマネージャーによって処理されるかどうかを判定できます。このメソッドが成功し、pfEaten が TRUE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyUp を呼び出す必要があります。このメソッドが S_OK を返さない場合、または pfEaten が FALSE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyUp を呼び出してはいけません。以下は実装例です。
if(msg.message == WM_KEYUP)
{
if( pKeyboardMgr->TestKeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten
&& pKeyboardMgr->KeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten)
{
The key was handled by the keystroke manager or a text service. Do not pass the key to the application.
continue;
}
else
{
//Let the application process the key.
}
}
キーストロークマネージャーがキーイベントを処理しない場合、TSF テキストサービスの ITfKeyEventSink::OnTestKeyUp メソッドを呼び出して、キーイベントを TSF テキストサービスへ渡します。
ITfKeystrokeMgr::KeyDown メソッド
| wParam | WPARAM | in | キーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYDOWN の wParam パラメーターを参照してください。 |
| lParam | LPARAM | in | キーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYDOWN の lParam パラメーターを参照してください。 |
| pfEaten | BOOL* | out | キーイベントが処理されたかどうかを、終了時に示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理済みであるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されなかったため、イベントをアプリケーションへ転送する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| キーイベントシンクがインストールされていません。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
このメソッドが成功し、pfEaten が TRUE を受け取った場合、アプリケーションはキーダウンイベントを処理してはいけません。このメソッドが S_OK を返さない場合、または pfEaten が FALSE を受け取った場合、アプリケーションはキーダウンイベントを処理する必要があります。以下は実装例です。
if(msg.message == WM_KEYDOWN)
{
if( pKeyboardMgr->TestKeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten
&& pKeyboardMgr->KeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten)
{
//The key was handled by the keystroke manager or a TSF text service. Do not pass the key to the application.
continue;
}
else
{
//Let the application process the key.
}
}
キーストロークマネージャーがキーイベントを処理しない場合、TSF テキストサービスの ITfKeyEventSink::OnKeyDown メソッドを呼び出して、キーイベントを TSF テキストサービスへ渡します。
ITfKeystrokeMgr::KeyUp メソッド
| wParam | WPARAM | in | キーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYUP の wParam パラメーターを参照してください。 |
| lParam | LPARAM | in | キーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYUP の lParam パラメーターを参照してください。 |
| pfEaten | BOOL* | out | キーイベントが処理されるかどうかを、終了時に示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| キーイベントシンクがインストールされていません。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
このメソッドが成功し、pfEaten が TRUE を受け取った場合、アプリケーションはキーダウンイベントを処理してはいけません。このメソッドが S_OK を返さない場合、または pfEaten が FALSE を受け取った場合、アプリケーションはキーダウンイベントを処理する必要があります。以下は実装例です。
if(msg.message == WM_KEYUP)
{
if( pKeyboardMgr->TestKeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten
&& pKeyboardMgr->KeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK
&& fEaten)
{
//The key was handled by the keystroke manager or a TSF text service. Do not pass the key to the application.
continue;
}
else
{
//Let the application process the key.
}
}
キーストロークマネージャーがキーイベントを処理しない場合、テキストサービスの ITfKeyEventSink::OnKeyUp メソッドを呼び出して、キーイベントをテキストサービスへ渡します。
ITfKeystrokeMgr::GetPreservedKey メソッド
| pic | ITfContext* | in | アプリケーションのコンテキストへのポインター。この値は、事前の ITfDocumentMgr::CreateContext の呼び出しによって返されます。 |
| pprekey | TF_PRESERVEDKEY* | in | 取得する予約キーを識別する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。uVKey メンバーは 256 未満である必要があります。 |
| pguid | GUID* | out | 予約キーのコマンド GUID を受け取る GUID 値へのポインター。これは、TSF テキストサービスが ITfKeystrokeMgr::PreserveKey を呼び出した際に渡した GUID です。予約キーが見つからない場合、この値は GUID_NULL を受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功し、予約キーが見つかりました。 | |
| メソッドは成功しましたが、予約キーは見つかりませんでした。pguid は GUID_NULL を受け取ります。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供するために使用されます。
ITfKeystrokeMgr::IsPreservedKey メソッド
| rguid | GUID* | in | 予約キーのコマンド GUID を指定します。これは、テキストサービスが ITfKeystrokeMgr::PreserveKey を呼び出した際に渡した GUID です。 |
| pprekey | TF_PRESERVEDKEY* | in | 予約キーを識別する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。uVKey メンバーは 256 未満である必要があります。 |
| pfRegistered | BOOL* | out | コマンド GUID とキーの組み合わせが登録済みの予約キーである場合に TRUE、そうでない場合に FALSE を受け取る BOOL へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功し、予約キーが見つかりました。 | |
| メソッドは成功しましたが、予約キーは見つかりませんでした。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。
ITfKeystrokeMgr::PreserveKey メソッド
| tid | DWORD | in | TSF テキストサービスのクライアント識別子を格納します。この値は、TSF テキストサービスの ITfTextInputProcessor::Activate メソッドでテキストサービスに渡されます。 |
| rguid | GUID* | in | 予約キーのコマンド GUID を格納します。この値は、予約キーがアクティブになったときに予約キーを識別するために、TSF テキストサービスの ITfKeyEventSink::OnPreservedKey メソッドへ渡されます。 |
| prekey | TF_PRESERVEDKEY* | in | 予約キーを指定する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。 |
| pchDesc | LPWSTR | in | 予約キーの説明を格納する Unicode 文字列へのポインター。cchDesc が 0 でない限り、NULL にすることはできません。 |
| cchDesc | DWORD | in | pchDesc の文字数を指定します。説明が不要な場合は、このパラメーターに 0 を渡します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| その予約キーは既に登録されています。 | |
| 1 つ以上のパラメーターが無効です。 | |
| メモリ割り当てエラーが発生しました。 | |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。
ITfKeystrokeMgr::UnpreserveKey メソッド
| rguid | GUID* | in | 予約キーのコマンド GUID を格納します。 |
| pprekey | TF_PRESERVEDKEY* | in | 予約キーを指定する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| その予約キーは登録されていません。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。
ITfKeystrokeMgr::SetPreservedKeyDescription メソッド
| rguid | GUID* | in | 予約キーのコマンド GUID を格納します。 |
| pchDesc | LPWSTR | in | 予約キーの新しい説明を格納する Unicode 文字列へのポインター。cchDesc が 0 でない限り、NULL にすることはできません。 |
| cchDesc | DWORD | in | pchDesc の文字数。説明が不要な場合は、このパラメーターに 0 を渡します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効であるか、予約キーが見つかりません。 | |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。
ITfKeystrokeMgr::GetPreservedKeyDescription メソッド
| rguid | GUID* | in | 予約キーのコマンド GUID を格納します。 |
| pbstrDesc | LPWSTR* | out | 説明文字列を受け取る BSTR 値へのポインター。呼び出し元は、このメモリを SysFreeString を使用して解放する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効であるか、予約キーが見つかりません。 | |
| 原因不明のエラーが発生しました。 |
解説(Remarks)
予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。
ITfKeystrokeMgr::SimulatePreservedKey メソッド
| pic | ITfContext* | in | アプリケーションのコンテキストへのポインター。この値は、事前の ITfDocumentMgr::CreateContext の呼び出しによって返された値です。 |
| rguid | GUID* | in | 予約キーのコマンド GUID を格納します。 |
| pfEaten | BOOL* | out | キーイベントが処理されたかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されました。FALSE の場合、キーイベントは処理されませんでした。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 予約キーをシミュレートできません。 | |
| 1 つ以上のパラメーターが無効です。 | |
| 原因不明のエラーが発生しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfKeystrokeMgr "{AA80E7F0-2021-11D2-93E0-0060B067B86E}" #usecom global ITfKeystrokeMgr IID_ITfKeystrokeMgr "{}" #comfunc global ITfKeystrokeMgr_AdviseKeyEventSink 3 int,sptr,int #comfunc global ITfKeystrokeMgr_UnadviseKeyEventSink 4 int #comfunc global ITfKeystrokeMgr_GetForeground 5 var #comfunc global ITfKeystrokeMgr_TestKeyDown 6 sptr,sptr,var #comfunc global ITfKeystrokeMgr_TestKeyUp 7 sptr,sptr,var #comfunc global ITfKeystrokeMgr_KeyDown 8 sptr,sptr,var #comfunc global ITfKeystrokeMgr_KeyUp 9 sptr,sptr,var #comfunc global ITfKeystrokeMgr_GetPreservedKey 10 sptr,var,var #comfunc global ITfKeystrokeMgr_IsPreservedKey 11 var,var,var #comfunc global ITfKeystrokeMgr_PreserveKey 12 int,var,var,wstr,int #comfunc global ITfKeystrokeMgr_UnpreserveKey 13 var,var #comfunc global ITfKeystrokeMgr_SetPreservedKeyDescription 14 var,wstr,int #comfunc global ITfKeystrokeMgr_GetPreservedKeyDescription 15 var,var #comfunc global ITfKeystrokeMgr_SimulatePreservedKey 16 sptr,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfKeystrokeMgr "{AA80E7F0-2021-11D2-93E0-0060B067B86E}" #usecom global ITfKeystrokeMgr IID_ITfKeystrokeMgr "{}" #comfunc global ITfKeystrokeMgr_AdviseKeyEventSink 3 int,sptr,int #comfunc global ITfKeystrokeMgr_UnadviseKeyEventSink 4 int #comfunc global ITfKeystrokeMgr_GetForeground 5 sptr #comfunc global ITfKeystrokeMgr_TestKeyDown 6 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_TestKeyUp 7 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_KeyDown 8 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_KeyUp 9 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_GetPreservedKey 10 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_IsPreservedKey 11 sptr,sptr,sptr #comfunc global ITfKeystrokeMgr_PreserveKey 12 int,sptr,sptr,wstr,int #comfunc global ITfKeystrokeMgr_UnpreserveKey 13 sptr,sptr #comfunc global ITfKeystrokeMgr_SetPreservedKeyDescription 14 sptr,wstr,int #comfunc global ITfKeystrokeMgr_GetPreservedKeyDescription 15 sptr,sptr #comfunc global ITfKeystrokeMgr_SimulatePreservedKey 16 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。