- Add more hooks, where wine has them placed. Fixed user32 hooks for win32k.

svn path=/trunk/; revision=41656
This commit is contained in:
James Tabor 2009-06-28 03:02:15 +00:00
parent f0ab7bf60b
commit 25e75aa265
5 changed files with 66 additions and 31 deletions

View file

@ -682,13 +682,13 @@ DefWndDoSizeMove(HWND hwnd, WORD wParam)
DeleteObject(DesktopRgn);
}
}
#if 0
if (ISITHOOKED(WH_CBT))
//#if 0
// if (ISITHOOKED(WH_CBT))
{
if (NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, (LPARAM)&sizingRect, 0, FNID_DEFWINDOWPROC, FALSE))
if (NtUserMessageCall( hwnd, WM_CBT, HCBT_MOVESIZE, (LPARAM)&sizingRect, 0, FNID_DEFWINDOWPROC, FALSE))
moved = FALSE;
}
#endif
//#endif
(void)NtUserSetGUIThreadHandle(MSQ_STATE_MOVESIZE, NULL);
SendMessageA( hwnd, WM_EXITSIZEMOVE, 0, 0 );
SendMessageA( hwnd, WM_SETVISIBLE, !IsIconic(hwnd), 0L);
@ -768,13 +768,15 @@ DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
WINDOWPLACEMENT wp;
POINT Pt;
#if 0
if (ISITHOOKED(WH_CBT))
if (!IsWindowEnabled( hWnd )) return 0;
//#if 0
// if (ISITHOOKED(WH_CBT))
{
if (NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, 0, FNID_DEFWINDOWPROC, FALSE))
return 0;
}
#endif
//#endif
switch (wParam & 0xfff0)
{
case SC_MOVE:
@ -806,8 +808,8 @@ DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
}
break;
case SC_CLOSE:
SendMessageA(hWnd, WM_CLOSE, 0, 0);
break;
return SendMessageW(hWnd, WM_CLOSE, 0, 0);
case SC_MOUSEMENU:
{
Pt.x = (short)LOWORD(lParam);

View file

@ -559,6 +559,7 @@ typedef struct _USERCONNECT
//
#define WM_SYSTIMER 280
#define WM_POPUPSYSTEMMENU 787
#define WM_CBT 1023 // ReactOS only.
//
// Non SDK DCE types.

View file

@ -12,25 +12,6 @@
#define NDEBUG
#include <debug.h>
LRESULT FASTCALL
IntDefWinHandleSysCommand( PWINDOW_OBJECT Window, WPARAM wParam, LPARAM lParam , BOOL Ansi)
{
DPRINT1("hwnd %p WM_SYSCOMMAND %lx %lx\n", Window->hSelf, wParam, lParam );
if (!ISITHOOKED(WH_CBT)) return 0;
// if (!UserCallNextHookEx(WH_CBT, HCBT_SYSCOMMAND, wParam, lParam, Ansi))
return 0;
switch (wParam & 0xfff0)
{
case SC_MOVE:
case SC_SIZE:
// return UserCallNextHookEx(WH_CBT, HCBT_MOVESIZE, (WPARAM)Window->hSelf, lParam, Ansi);
break;
}
return 1;
}
/*
Win32k counterpart of User DefWindowProc
*/
@ -54,7 +35,9 @@ IntDefWindowProc(
{
case WM_SYSCOMMAND:
{
lResult = IntDefWinHandleSysCommand( Window, wParam, lParam, Ansi );
DPRINT1("hwnd %p WM_SYSCOMMAND %lx %lx\n", Window->hSelf, wParam, lParam );
if (!ISITHOOKED(WH_CBT)) break;
lResult = co_HOOK_CallHooks(WH_CBT, HCBT_SYSCOMMAND, wParam, lParam);
break;
}
case WM_SHOWWINDOW:
@ -76,8 +59,43 @@ IntDefWindowProc(
}
}
break;
}
case WM_CBT:
{
if (!ISITHOOKED(WH_CBT)) break;
switch (wParam)
{
case HCBT_MOVESIZE:
{
RECTL rt;
if (lParam)
{
_SEH2_TRY
{
ProbeForRead((PVOID)lParam,
sizeof(RECT),
1);
RtlCopyMemory(&rt,
(PVOID)lParam,
sizeof(RECT));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
lResult = 1;
}
_SEH2_END;
}
if (!lResult)
lResult = co_HOOK_CallHooks(WH_CBT, HCBT_MOVESIZE, (WPARAM)Window->hSelf, lParam ? (LPARAM)&rt : 0);
}
break;
}
break;
}
break;
}
return lResult;
}

View file

@ -320,6 +320,7 @@ co_IntSetActiveWindow(PWINDOW_OBJECT Window OPTIONAL)
HWND hWndPrev;
HWND hWnd = 0;
PWINDOW Wnd;
CBTACTIVATESTRUCT cbt;
if (Window)
ASSERT_REFS_CO(Window);
@ -346,7 +347,11 @@ co_IntSetActiveWindow(PWINDOW_OBJECT Window OPTIONAL)
return hWndPrev;
}
/* FIXME: Call hooks. */
/* call CBT hook chain */
cbt.fMouse = FALSE;
cbt.hWndActive = hWndPrev;
if (co_HOOK_CallHooks( WH_CBT, HCBT_ACTIVATE, (WPARAM)hWnd, (LPARAM)&cbt))
return 0;
ThreadQueue->ActiveWindow = hWnd;
@ -382,6 +387,9 @@ co_IntSetFocusWindow(PWINDOW_OBJECT Window OPTIONAL)
return hWndPrev;
}
if (co_HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, (WPARAM)Window->hSelf, (LPARAM)hWndPrev))
return 0;
ThreadQueue->FocusWindow = Window->hSelf;
co_IntSendKillFocusMessages(hWndPrev, Window->hSelf);
@ -391,6 +399,9 @@ co_IntSetFocusWindow(PWINDOW_OBJECT Window OPTIONAL)
{
ThreadQueue->FocusWindow = 0;
if (co_HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, (WPARAM)0, (LPARAM)hWndPrev))
return 0;
co_IntSendKillFocusMessages(hWndPrev, 0);
}
return hWndPrev;

View file

@ -308,6 +308,9 @@ co_WinPosMinMaximize(PWINDOW_OBJECT Window, UINT ShowFlag, RECT* NewPos)
Size.y = Wnd->WindowRect.top;
WinPosInitInternalPos(Window, &Size, &Wnd->WindowRect);
if (co_HOOK_CallHooks( WH_CBT, HCBT_MINMAX, (WPARAM)Window->hSelf, ShowFlag))
return SWP_NOSIZE | SWP_NOMOVE;
if (Wnd->Style & WS_MINIMIZE)
{
if (!co_IntSendMessage(Window->hSelf, WM_QUERYOPEN, 0, 0))