基本上我要做的就是有一个带有控件的窗口,它可以响应鼠标和键盘,但是没有关注焦点。我一直在寻找钩住窗口事件来捕获它们或使用预览事件而不是处理它们,但无论我做什么,窗口都会触发鼠标和键盘事件并获得焦点或根本不做任何事情
是否可以手动挂钩窗口的鼠标/键盘事件,同时仍将事件传递给任何窗口(其他应用程序)?
修改
我已经尝试使用下面的代码来点击窗口,但这会导致鼠标和键盘事件根本不会被触发。
public const int WS_EX_TRANSPARENT = 0x00000020; public const int GWL_EXSTYLE = (-20);
[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
protected override void OnSourceInitialized(EventArgs e)
{
// Get this window's handle
IntPtr hwnd = new WindowInteropHelper(this).Handle;
// Change the extended window style to include WS_EX_TRANSPARENT
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
var hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
hwndSource.CompositionTarget.RenderMode = RenderMode.Default;
base.OnSourceInitialized(e);
}