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); }
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)); }
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); }
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)})"); }