WinAPPCSetBlockingHook 関数を使用すると、Windows APPC の実装で、新しい関数を使用して APPC 関数の呼び出しをブロックできます。 Microsoft Windows では、既定では、ブロック呼び出しは、要求が完了するまで呼び出し元アプリケーションのスレッドを中断します。
構文
FARPROC WINAPI WinAPPCSetBlockingHook (
FARPROC lpBlockFunc);
パラメーター
lpBlockFunc
インストールするブロッキング関数のプロシージャ インスタンス アドレスを指定します。
戻り値
戻り値は、以前にインストールされたブロッキング関数のプロシージャ インスタンスを指します。 WinAPPCSetBlockingHook を呼び出すアプリケーションまたはライブラリは、必要に応じて復元できるように、この戻り値を保存する必要があります。 (入れ子が重要でない場合、アプリケーションは WinAPPCSetBlockingHook によって返される値を破棄し、最終的に WinAPPCUnhookBlockingHook を使用して既定のメカニズムを復元できます)。
注釈
Windows APPC の実装には、ブロックする APPC 関数が実装される既定のメカニズムがあります。 この関数は、既定の関数の代わりにブロック時に独自の関数を実行する機能をアプリケーションに提供します。
既定のブロッキング関数は次のようになります。
BOOL DefaultBlockingHook (void) {
MSG msg;
/* get the next message if any */
if ( PeekMessage (&msg,0,0,PM_NOREMOVE) ) {
if ( msg.message = = WM_QUIT )
return FALSE; // let app process WM_QUIT
PeekMessage (&msg,0,0,PM_REMOVE) ;
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
/* TRUE if no WM_QUIT received */
return TRUE;
}
Windows APPC がアプリケーションに制御を戻してメッセージを処理し、正常に終了できるように、WM_QUIT メッセージを受信した場合、ブロッキング関数は FALSE を返す必要があります。 それ以外の場合、関数は TRUE を返す必要があります。
この関数はスレッドごとに実装されます。 特定のスレッドが、他のスレッドに影響を与えずにブロックメカニズムを置き換える機能を提供します。
WinAPPCSetBlockingHook 関数は、より複雑なメッセージ処理を必要とするアプリケーション (たとえば、複数のドキュメント インターフェイス (MDI) モデルを使用するアプリケーション) をサポートするために提供されます。