Ignore HIWORD of boolean return values of 16-bit hook procedures, to

match buggy Windows behaviour.
This commit is contained in:
Ulrich Weigand 1999-03-16 10:29:55 +00:00 committed by Alexandre Julliard
parent 88ca57d219
commit 5b803350e9
1 changed files with 9 additions and 0 deletions

View File

@ -995,6 +995,15 @@ static LRESULT HOOK_CallHook( HANDLE16 hook, INT fromtype, INT code,
ret = data->proc(code, wParam, lParam); ret = data->proc(code, wParam, lParam);
/* Grrr. While the hook procedure is supposed to have an LRESULT return
value even in Win16, it seems that for those hook types where the
return value is interpreted as BOOL, Windows doesn't actually check
the HIWORD ... Some buggy Win16 programs, notably WINFILE, rely on
that, because they neglect to clear DX ... */
if ( (data->flags & HOOK_MAPTYPE) == HOOK_WIN16
&& data->id != WH_JOURNALPLAYBACK )
ret = LOWORD( ret );
TRACE(hook, "Ret hook %04x = %08lx\n", hook, ret ); TRACE(hook, "Ret hook %04x = %08lx\n", hook, ret );
data->flags &= ~HOOK_INUSE; data->flags &= ~HOOK_INUSE;