private static void RemoveWndProcUsage(HwndHost hwndHost) { int refCount = (int) hwndHost.GetValue(WindowHookRefCountProperty); refCount--; hwndHost.SetValue(WindowHookRefCountProperty, refCount); if (refCount == 0) { HwndHostExtensionsWindowHook hook = (HwndHostExtensionsWindowHook) hwndHost.GetValue(WindowHookProperty); hook.Dispose(); hwndHost.ClearValue(WindowHookProperty); } }
private static bool TryHookWndProc(HwndHost hwndHost) { if (hwndHost.Handle != IntPtr.Zero) { // Hook the window messages so we can intercept the // various messages. HwndHostExtensionsWindowHook hook = new HwndHostExtensionsWindowHook(hwndHost); // Keep our hook alive. hwndHost.SetValue(WindowHookProperty, hook); return true; } else { return false; } }
private static void AddWndProcUsage(HwndHost hwndHost) { int refCount = (int) hwndHost.GetValue(WindowHookRefCountProperty); refCount++; hwndHost.SetValue(WindowHookRefCountProperty, refCount); if(refCount == 1) { if (!TryHookWndProc(hwndHost)) { // Try again later, when the HwndHost is loaded. hwndHost.Loaded += (s, e) => TryHookWndProc((HwndHost)s); } } }