Exemplo n.º 1
0
        public Base LookupMessage32(IntPtr hWnd, uint message32, out ushort message16)
        {
            // Look up standard messages first
            var mi = _wndClassKindMessages[(int)WndClassKind.Standard].Lookup32((ushort)message32);

            if (mi != null)
            {
                message16 = mi.message16;
                return(mi.semantics);
            }

            // Pack and post?
            message16 = (ushort)message32;
            if (message32 == packAndPost.WM_PACKANDPOST)
            {
                return(packAndPost.Instance);
            }

            // Registered windows message?
            if (message32 >= Win32.WM_REGISTEREDBASE && message32 <= 0xFFFF)
            {
                if (RegisteredWindowMessages.IsRegistered((ushort)message32))
                {
                    return(copy.Instance);
                }
                else
                {
                    return(bypass.Instance);
                }
            }

            // Get window class
            var wk = WindowClassKind.Get(hWnd);

            // Look up window class
            mi = _wndClassKindMessages[(int)wk].Lookup32((ushort)message32);
            if (mi != null)
            {
                message16 = mi.message16;
                return(mi.semantics);
            }

            if (wk > WndClassKind.Unknown)
            {
                ThrowMessageError(hWnd, message32);
            }

            // Unknown message!
            message16 = (ushort)message32;
            return(null);
        }
Exemplo n.º 2
0
        public override uint Call32from16(Machine machine, bool hook, bool dlgproc, ref Win16.MSG msg16, ref Win32.MSG msg32, Func <IntPtr> callback)
        {
            // UGH!  WM_SETTEXT(hIcon) -> static SS_ICON control  loword of lParam is a HICN
            if (!hook)
            {
                if (msg16.lParam.Hiword() == 0 && msg16.lParam.Loword() != 0)
                {
                    if (WindowClassKind.Get(msg32.hWnd) == WndClassKind.Static &&
                        (User._GetWindowLong(msg32.hWnd, Win32.GWL_STYLE) & 0x0F) == 0x03)
                    {
                        HGDIOBJ hIcon = HGDIOBJ.To32(msg16.lParam.Loword());
                        User._SendMessage(msg32.hWnd, Win32.STM_SETICON, hIcon.value, IntPtr.Zero);
                        return(0);
                    }
                }
            }

            return(base.Call32from16(machine, hook, dlgproc, ref msg16, ref msg32, callback));
        }
Exemplo n.º 3
0
        public Base LookupMessage16(IntPtr hWnd, ushort message16, out uint message32)
        {
            // Look up standard messages first
            var mi = _wndClassKindMessages[(int)WndClassKind.Standard].Lookup16(message16);

            if (mi != null)
            {
                message32 = mi.message32;
                return(mi.semantics);
            }

            // Registered windows message?
            if (message16 >= Win32.WM_REGISTEREDBASE && message16 <= 0xFFFF)
            {
                message32 = message16;
                return(copy.Instance);
            }

            // Get window class
            var wk = WindowClassKind.Get(hWnd);


            // Look up window class
            mi = _wndClassKindMessages[(int)wk].Lookup16(message16);
            if (mi != null)
            {
                message32 = mi.message32;
                return(mi.semantics);
            }

            /*
             * if (wk > WndClassKind.Unknown)
             * {
             *  ThrowMessageError(hWnd, message16);
             * }
             */

            // Unknown message!
            message32 = message16;
            return(packAndPost.Instance);
        }
Exemplo n.º 4
0
 public static void ThrowMessageError(IntPtr hWnd32, uint message)
 {
     throw new VirtualException($"Unknown windows message {MessageNames.NameOfMessage(message)} for window class '{User.GetClassName(hWnd32)}' ({WindowClassKind.Get(hWnd32)})");
 }