From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/user32/msgbox.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/dlls/user32/msgbox.c b/dlls/user32/msgbox.c index 2a1d81d1462..cae7b730f75 100644 --- a/dlls/user32/msgbox.c +++ b/dlls/user32/msgbox.c @@ -394,6 +394,22 @@ static void MSGBOX_CopyToClipbaord( HWND hwnd ) free(text); }
+HHOOK msghook_handle; + +LRESULT CALLBACK msg_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) +{ + MSG *msg = (MSG *)lParam; + if (nCode == MSGF_DIALOGBOX && msg->message == WM_KEYUP) + { + if ( (msg->wParam == 'C' || msg->wParam == 'c') && (NtUserGetKeyState(VK_CONTROL) & 0x8000)) + { + MSGBOX_CopyToClipbaord(GetParent(msg->hwnd)); + } + } + + return NtUserCallNextHookEx(msghook_handle, nCode, wParam, lParam); +} + /************************************************************************** * MSGBOX_DlgProc * @@ -409,6 +425,7 @@ static INT_PTR CALLBACK MSGBOX_DlgProc( HWND hwnd, UINT message, SetWindowContextHelpId(hwnd, mbp->dwContextHelpId); MSGBOX_OnInit(hwnd, mbp); SetPropA(hwnd, "WINE_MSGBOX_HELPCALLBACK", mbp->lpfnMsgBoxCallback); + msghook_handle = SetWindowsHookExA(WH_MSGFILTER, msg_hook_proc, NULL, GetCurrentThreadId()); break; }
@@ -416,6 +433,10 @@ static INT_PTR CALLBACK MSGBOX_DlgProc( HWND hwnd, UINT message, MSGBOX_CopyToClipbaord(hwnd); break;
+ case WM_DESTROY: + NtUserUnhookWindowsHookEx(msghook_handle); + break; + case WM_COMMAND: switch (LOWORD(wParam)) {