WinAPPCSetBlockingHook
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) 模型的应用程序。