Win32 API 日本語リファレンス
ホームUI.TextServices › ITfKeystrokeMgr

ITfKeystrokeMgr

COM
IIDaa80e7f0-2021-11d2-93e0-0060b067b86e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ITfKeystrokeMgr インターフェイスは TSF マネージャーによって実装され、アプリケーションやテキストサービスがキーボードマネージャーとやり取りするために使用します。

メソッド 14

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT AdviseKeyEventSink(DWORD tid, ITfKeyEventSink* pSink, BOOL fForeground)

ITfKeystrokeMgr::AdviseKeyEventSink メソッド

tidDWORDinキーイベントシンクを所有するクライアントの識別子。この値は、事前の ITfThreadMgr::Activate の呼び出しによって取得します。
pSinkITfKeyEventSink*inITfKeyEventSink インターフェイスへのポインター。
fForegroundBOOLinこのキーイベントシンクをフォアグラウンドのキーイベントシンクにするかどうかを指定します。TRUE の場合、このキーイベントシンクはフォアグラウンドのキーイベントシンクになります。それ以外の場合、このキーイベントシンクはフォアグラウンドのキーイベントシンクにはなりません。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
CONNECT_E_ADVISELIMIT
tid で識別されるクライアントには、すでにキーイベントシンクがインストールされています。

解説(Remarks)

フォアグラウンドのキーイベントシンクは、すべてのキーボードイベントを受け取ります。フォアグラウンドではないキーイベントシンクは、予約キー (preserved key) と、そのクライアント識別子が所有するものとしてマークされたテキスト上で発生したキーイベントのみを受け取ります。

vtbl 4 HRESULT UnadviseKeyEventSink(DWORD tid)

ITfKeystrokeMgr::UnadviseKeyEventSink メソッド

tidDWORDinキーイベントシンクを所有するクライアントの識別子。この値は、ITfKeystrokeMgr::AdviseKeyEventSink でアドバイズシンクをインストールした際に渡した値です。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
tid パラメーターが無効です。
CONNECT_E_NOCONNECTION
tid で識別されるアドバイズシンクが見つかりませんでした。
vtbl 5 HRESULT GetForeground(GUID* pclsid)

ITfKeystrokeMgr::GetForeground メソッド

pclsidGUID*outフォアグラウンドの TSF テキストサービスのクラス識別子を受け取る CLSID へのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
フォアグラウンドのテキストサービスが存在しません。
E_INVALIDARG
pclsid が無効です。
E_FAIL
原因不明のエラーが発生しました。
vtbl 6 HRESULT TestKeyDown(WPARAM wParam, LPARAM lParam, BOOL* pfEaten)

ITfKeystrokeMgr::TestKeyDown メソッド

wParamWPARAMinキーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYDOWNwParam パラメーターを参照してください。
lParamLPARAMinキーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYDOWNlParam パラメーターを参照してください。
pfEatenBOOL*outキーイベントが処理されるかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
キーイベントシンクがインストールされていません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

アプリケーションはこのメソッドを使用して、キーイベントがキーストロークマネージャーによって処理されるかどうかを判定できます。このメソッドが成功し、pfEatenTRUE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyDown を呼び出す必要があります。このメソッドが S_OK を返さない場合、または pfEatenFALSE を受け取った場合、アプリケーションは 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 テキストサービスへ渡します。

vtbl 7 HRESULT TestKeyUp(WPARAM wParam, LPARAM lParam, BOOL* pfEaten)

ITfKeystrokeMgr::TestKeyUp メソッド

wParamWPARAMinキーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYUPwParam パラメーターを参照してください。
lParamLPARAMinキーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYUPlParam パラメーターを参照してください。
pfEatenBOOL*outキーイベントが処理されるかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
キーイベントシンクがインストールされていません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

アプリケーションはこのメソッドを使用して、キーイベントがキーストロークマネージャーによって処理されるかどうかを判定できます。このメソッドが成功し、pfEatenTRUE を受け取った場合、アプリケーションは ITfKeystrokeMgr::KeyUp を呼び出す必要があります。このメソッドが S_OK を返さない場合、または pfEatenFALSE を受け取った場合、アプリケーションは 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 テキストサービスへ渡します。

vtbl 8 HRESULT KeyDown(WPARAM wParam, LPARAM lParam, BOOL* pfEaten)

ITfKeystrokeMgr::KeyDown メソッド

wParamWPARAMinキーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYDOWNwParam パラメーターを参照してください。
lParamLPARAMinキーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYDOWNlParam パラメーターを参照してください。
pfEatenBOOL*outキーイベントが処理されたかどうかを、終了時に示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理済みであるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されなかったため、イベントをアプリケーションへ転送する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
キーイベントシンクがインストールされていません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

このメソッドが成功し、pfEatenTRUE を受け取った場合、アプリケーションはキーダウンイベントを処理してはいけません。このメソッドが S_OK を返さない場合、または pfEatenFALSE を受け取った場合、アプリケーションはキーダウンイベントを処理する必要があります。以下は実装例です。


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 テキストサービスへ渡します。

vtbl 9 HRESULT KeyUp(WPARAM wParam, LPARAM lParam, BOOL* pfEaten)

ITfKeystrokeMgr::KeyUp メソッド

wParamWPARAMinキーの仮想キーコードを指定します。このパラメーターの詳細については、WM_KEYUPwParam パラメーターを参照してください。
lParamLPARAMinキーのリピート回数、スキャンコード、拡張キーフラグ、コンテキストコード、直前のキー状態フラグ、遷移状態フラグを指定します。このパラメーターの詳細については、WM_KEYUPlParam パラメーターを参照してください。
pfEatenBOOL*outキーイベントが処理されるかどうかを、終了時に示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されるため、イベントをアプリケーションへ転送してはいけません。FALSE の場合、キーイベントは処理されないため、イベントをアプリケーションへ転送する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
キーイベントシンクがインストールされていません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

このメソッドが成功し、pfEatenTRUE を受け取った場合、アプリケーションはキーダウンイベントを処理してはいけません。このメソッドが S_OK を返さない場合、または pfEatenFALSE を受け取った場合、アプリケーションはキーダウンイベントを処理する必要があります。以下は実装例です。


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 メソッドを呼び出して、キーイベントをテキストサービスへ渡します。

vtbl 10 HRESULT GetPreservedKey(ITfContext* pic, TF_PRESERVEDKEY* pprekey, GUID* pguid)

ITfKeystrokeMgr::GetPreservedKey メソッド

picITfContext*inアプリケーションのコンテキストへのポインター。この値は、事前の ITfDocumentMgr::CreateContext の呼び出しによって返されます。
pprekeyTF_PRESERVEDKEY*in取得する予約キーを識別する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。uVKey メンバーは 256 未満である必要があります。
pguidGUID*out予約キーのコマンド GUID を受け取る GUID 値へのポインター。これは、TSF テキストサービスが ITfKeystrokeMgr::PreserveKey を呼び出した際に渡した GUID です。予約キーが見つからない場合、この値は GUID_NULL を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功し、予約キーが見つかりました。
S_FALSE
メソッドは成功しましたが、予約キーは見つかりませんでした。pguid は GUID_NULL を受け取ります。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供するために使用されます。

vtbl 11 HRESULT IsPreservedKey(GUID* rguid, TF_PRESERVEDKEY* pprekey, BOOL* pfRegistered)

ITfKeystrokeMgr::IsPreservedKey メソッド

rguidGUID*in予約キーのコマンド GUID を指定します。これは、テキストサービスが ITfKeystrokeMgr::PreserveKey を呼び出した際に渡した GUID です。
pprekeyTF_PRESERVEDKEY*in予約キーを識別する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。uVKey メンバーは 256 未満である必要があります。
pfRegisteredBOOL*outコマンド GUID とキーの組み合わせが登録済みの予約キーである場合に TRUE、そうでない場合に FALSE を受け取る BOOL へのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功し、予約キーが見つかりました。
S_FALSE
メソッドは成功しましたが、予約キーは見つかりませんでした。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。

vtbl 12 HRESULT PreserveKey(DWORD tid, GUID* rguid, TF_PRESERVEDKEY* prekey, LPWSTR pchDesc, DWORD cchDesc)

ITfKeystrokeMgr::PreserveKey メソッド

tidDWORDinTSF テキストサービスのクライアント識別子を格納します。この値は、TSF テキストサービスの ITfTextInputProcessor::Activate メソッドでテキストサービスに渡されます。
rguidGUID*in予約キーのコマンド GUID を格納します。この値は、予約キーがアクティブになったときに予約キーを識別するために、TSF テキストサービスの ITfKeyEventSink::OnPreservedKey メソッドへ渡されます。
prekeyTF_PRESERVEDKEY*in予約キーを指定する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。
pchDescLPWSTRin予約キーの説明を格納する Unicode 文字列へのポインター。cchDesc が 0 でない限り、NULL にすることはできません。
cchDescDWORDinpchDesc の文字数を指定します。説明が不要な場合は、このパラメーターに 0 を渡します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
TF_E_ALREADY_EXISTS
その予約キーは既に登録されています。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_OUTOFMEMORY
メモリ割り当てエラーが発生しました。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。

vtbl 13 HRESULT UnpreserveKey(GUID* rguid, TF_PRESERVEDKEY* pprekey)

ITfKeystrokeMgr::UnpreserveKey メソッド

rguidGUID*in予約キーのコマンド GUID を格納します。
pprekeyTF_PRESERVEDKEY*in予約キーを指定する TF_PRESERVEDKEY 構造体へのポインター。uVKey メンバーには仮想キーコードが含まれ、uModifiers メンバーは予約キーの修飾キーを識別します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
CONNECT_E_NOCONNECTION
その予約キーは登録されていません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。

vtbl 14 HRESULT SetPreservedKeyDescription(GUID* rguid, LPWSTR pchDesc, DWORD cchDesc)

ITfKeystrokeMgr::SetPreservedKeyDescription メソッド

rguidGUID*in予約キーのコマンド GUID を格納します。
pchDescLPWSTRin予約キーの新しい説明を格納する Unicode 文字列へのポインター。cchDesc が 0 でない限り、NULL にすることはできません。
cchDescDWORDinpchDesc の文字数。説明が不要な場合は、このパラメーターに 0 を渡します。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効であるか、予約キーが見つかりません。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。

vtbl 15 HRESULT GetPreservedKeyDescription(GUID* rguid, LPWSTR* pbstrDesc)

ITfKeystrokeMgr::GetPreservedKeyDescription メソッド

rguidGUID*in予約キーのコマンド GUID を格納します。
pbstrDescLPWSTR*out説明文字列を受け取る BSTR 値へのポインター。呼び出し元は、このメモリを SysFreeString を使用して解放する必要があります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効であるか、予約キーが見つかりません。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

予約キーは TSF テキストサービスによって登録され、TSF テキストサービスが実装する一般的なコマンドへのキーボードショートカットを提供します。

vtbl 16 HRESULT SimulatePreservedKey(ITfContext* pic, GUID* rguid, BOOL* pfEaten)

ITfKeystrokeMgr::SimulatePreservedKey メソッド

picITfContext*inアプリケーションのコンテキストへのポインター。この値は、事前の ITfDocumentMgr::CreateContext の呼び出しによって返された値です。
rguidGUID*in予約キーのコマンド GUID を格納します。
pfEatenBOOL*outキーイベントが処理されたかどうかを示す BOOL へのポインター。この値が TRUE を受け取った場合、キーイベントは処理されました。FALSE の場合、キーイベントは処理されませんでした。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
予約キーをシミュレートできません。
E_INVALIDARG
1 つ以上のパラメーターが無効です。
E_FAIL
原因不明のエラーが発生しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。