16 bit hwnd in SendmessageA/W

Rein Klazes wijn at wanadoo.nl
Sat May 7 05:08:21 CDT 2005


Hi,

Another case where I don't think I know enough of the finer details for
a
 correct solution.

MS Visual C++ 1.5 IDE - 16 bit win application - communicates its window
 handle to WINTEE32.EXE  - win32 app - to handle the build process:

>> E:\\MSVC\\BIN\\WINTEE32.EXE -h2a -vn

5e is the 16 bit window handle.

Here it sends data to the IDE:

>> 0035:Call user32.SendMessageA(ffff002a,0000004a,0008004a,77a3fe28) ret=77a51649

That does not work, SendMessageA does only expect full 32 bit win
handles. 
Things work with this patch:

==========================================================================
--- wine/dlls/user/message.c    2005-05-05 10:26:28.000000000 +0200
+++ mywine/dlls/user/message.c  2005-05-05 20:07:46.000000000 +0200
@@ -2388,6 +2388,13 @@ LRESULT WINAPI SendMessageTimeoutA( HWND
         return 1;
     }

+    /* if it is not a 32bit window handle */
+    if( !IsWindow( hwnd)) {
+        /* try if it is a 16 bit handle */
+        hwnd = WIN_Handle32( (HWND16) hwnd );
+        info.hwnd = hwnd;
+    }
+
     if (!(dest_tid = GetWindowThreadProcessId( hwnd, &dest_pid )))
return 0;

     if (USER_IsExitingThread( dest_tid )) return 0;
==========================================================================

Is anything else needed, I wonder?

Rein.



More information about the wine-devel mailing list