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;
}
阻塞函式若收到 WM_QUIT 訊息,必須回傳 FALSE,讓 Windows APPC 能將控制權交還給應用程式處理訊息並優雅終止。 否則,函式應回傳 TRUE。
此函式是以每個執行緒為單位實作。 它允許特定執行緒取代阻塞機制,而不影響其他執行緒。
WinAPPCSetBlockingHook 函式是為了支援需要更複雜訊息處理的應用程式,例如採用多文件介面(MDI)模型的應用程式。