From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/user32/message.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index f6431e0c28a..7be93d94e39 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -588,7 +588,7 @@ LRESULT WINAPI SendMessageTimeoutA( HWND hwnd, UINT msg, WPARAM wparam, LPARAM l } -static LRESULT dispatch_send_message( struct win_proc_params *params ) +static LRESULT dispatch_send_message( struct win_proc_params *params, WPARAM wparam, LPARAM lparam ) { struct ntuser_thread_info *thread_info = NtUserGetThreadInfo(); INPUT_MESSAGE_SOURCE prev_source = thread_info->msg_source; @@ -596,6 +596,10 @@ static LRESULT dispatch_send_message( struct win_proc_params *params ) static const INPUT_MESSAGE_SOURCE msg_source_unavailable = { IMDT_UNAVAILABLE, IMO_UNAVAILABLE }; + /* params may contain arguments modified by wow, use original parameters instead */ + params->wparam = wparam; + params->lparam = lparam; + thread_info->recursion_count++; params->result = &retval; @@ -621,7 +625,7 @@ LRESULT WINAPI SendMessageW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) params.hwnd = 0; retval = NtUserMessageCall( hwnd, msg, wparam, lparam, ¶ms, NtUserSendMessage, FALSE ); - if (params.hwnd) retval = dispatch_send_message( ¶ms ); + if (params.hwnd) retval = dispatch_send_message( ¶ms, wparam, lparam ); return retval; } @@ -643,7 +647,7 @@ LRESULT WINAPI SendMessageA( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) params.hwnd = 0; retval = NtUserMessageCall( hwnd, msg, wparam, lparam, ¶ms, NtUserSendMessage, TRUE ); - if (params.hwnd) retval = dispatch_send_message( ¶ms ); + if (params.hwnd) retval = dispatch_send_message( ¶ms, wparam, lparam ); return retval; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/646