ITfMessagePump
COM公式ドキュメント
ITfMessagePump インターフェイスは TSF マネージャーによって実装され、アプリケーションがアプリケーションのメッセージ キューからメッセージを取得するために使用します。
解説(Remarks)
アプリケーションが Unicode の場合は、PeekMessageW メソッドおよび GetMessageW メソッドを使用してください。それ以外の場合は、PeekMessageA メソッドおよび GetMessageA メソッドを使用してください。
使用例
HRESULT hr;
ITfMessagePump *pMessagePump;
hr = pThreadManager->QueryInterface(IID_ITfMessagePump, (LPVOID*)&pMessagePump);
if(SUCCEEDED(hr))
{
//Use the ITfMessagePump interface.
//Release the ITfMessagePump interface.
pMessagePump->Release();
}
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ITfMessagePump::PeekMessageA メソッド
| pMsg | MSG* | out | メッセージ データを受け取る MSG 構造体へのポインター。 |
| hwnd | HWND | in | メッセージを取得する対象のウィンドウのハンドル。ウィンドウは現在のスレッドに属している必要があります。この値が NULL の場合、このメソッドは呼び出し元スレッドが所有する任意のウィンドウのメッセージを取得します。 |
| wMsgFilterMin | DWORD | in | 取得するメッセージ値の下限を指定します。 |
| wMsgFilterMax | DWORD | in | 取得するメッセージ値の上限を指定します。 |
| wRemoveMsg | DWORD | in | メッセージの処理方法を指定します。詳細については、PeekMessage 関数を参照してください。 |
| pfResult | BOOL* | out | PeekMessage 関数の戻り値を受け取る BOOL へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
wMsgFilterMin と wMsgFilterMax がどちらも 0 の場合、このメソッドは利用可能なすべてのメッセージを返します。つまり、範囲によるフィルター処理は行われません。
ITfMessagePump::GetMessageA メソッド
| pMsg | MSG* | out | メッセージ データを受け取る MSG 構造体へのポインター。 |
| hwnd | HWND | in | メッセージを取得する対象のウィンドウのハンドル。ウィンドウは現在のスレッドに属している必要があります。この値が NULL の場合、このメソッドは呼び出し元スレッドに属する任意のウィンドウのメッセージを取得します。 |
| wMsgFilterMin | DWORD | in | 取得するメッセージ値の下限を指定します。 |
| wMsgFilterMax | DWORD | in | 取得するメッセージ値の上限を指定します。 |
| pfResult | BOOL* | out | GetMessage 関数の戻り値を受け取る BOOL 値へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
wMsgFilterMin と wMsgFilterMax がどちらも 0 の場合、このメソッドは利用可能なすべてのメッセージを返します。つまり、範囲によるフィルター処理は行われません。
ITfMessagePump::PeekMessageW メソッド
| pMsg | MSG* | out | メッセージ データを受け取る MSG 構造体へのポインター。 |
| hwnd | HWND | in | メッセージを取得する対象のウィンドウのハンドル。ウィンドウは現在のスレッドに属している必要があります。この値が NULL の場合、このメソッドは呼び出し元スレッドに属する任意のウィンドウのメッセージを取得します。 |
| wMsgFilterMin | DWORD | in | 取得するメッセージ値の下限を指定します。 |
| wMsgFilterMax | DWORD | in | 取得するメッセージ値の上限を指定します。 |
| wRemoveMsg | DWORD | in | メッセージの処理方法を指定します。詳細については、PeekMessage 関数を参照してください。 |
| pfResult | BOOL* | out | PeekMessage 関数の戻り値を受け取る BOOL へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
wMsgFilterMin と wMsgFilterMax がどちらも 0 の場合、このメソッドは利用可能なすべてのメッセージを返します。つまり、範囲によるフィルター処理は行われません。
ITfMessagePump::GetMessageW メソッド
| pMsg | MSG* | out | メッセージ データを受け取る MSG 構造体へのポインター。 |
| hwnd | HWND | in | メッセージを取得する対象のウィンドウのハンドル。ウィンドウは現在のスレッドに属している必要があります。この値が NULL の場合、このメソッドは呼び出し元スレッドが所有する任意のウィンドウのメッセージを取得します。 |
| wMsgFilterMin | DWORD | in | 取得するメッセージ値の下限を指定します。 |
| wMsgFilterMax | DWORD | in | 取得するメッセージ値の上限を指定します。 |
| pfResult | BOOL* | out | GetMessage 関数の戻り値を受け取る BOOL へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 1 つ以上のパラメーターが無効です。 |
解説(Remarks)
wMsgFilterMin と wMsgFilterMax がどちらも 0 の場合、このメソッドは利用可能なすべてのメッセージを返します。つまり、範囲によるフィルター処理は行われません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITfMessagePump "{8F1B8AD8-0B6B-4874-90C5-BD76011E8F7C}" #usecom global ITfMessagePump IID_ITfMessagePump "{}" #comfunc global ITfMessagePump_PeekMessageA 3 var,sptr,int,int,int,var #comfunc global ITfMessagePump_GetMessageA 4 var,sptr,int,int,var #comfunc global ITfMessagePump_PeekMessageW 5 var,sptr,int,int,int,var #comfunc global ITfMessagePump_GetMessageW 6 var,sptr,int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITfMessagePump "{8F1B8AD8-0B6B-4874-90C5-BD76011E8F7C}" #usecom global ITfMessagePump IID_ITfMessagePump "{}" #comfunc global ITfMessagePump_PeekMessageA 3 sptr,sptr,int,int,int,sptr #comfunc global ITfMessagePump_GetMessageA 4 sptr,sptr,int,int,sptr #comfunc global ITfMessagePump_PeekMessageW 5 sptr,sptr,int,int,int,sptr #comfunc global ITfMessagePump_GetMessageW 6 sptr,sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。