在C#中创建透明叠加层

时间:2012-09-17 14:21:07

标签: c# overlay global keyboard-hook click-through

我不确定如何启动这个项目,但我的要求如下(对于我不确定如何实现的部分):

  • 按住Tab键应显示叠加层。放开Tab键应该隐藏叠加层。我如何全球捕捉?检查Tab键是否仍被按下的最佳方法是什么?
  • 叠加层应显示在所有其他应用程序上。它不必显示在完整的筛选应用程序上,但最好能够这样做。
  • 分辨率缩放?不那么重要,但根据用户的显示器分辨率确定覆盖范围的大小会很好。

我还没有开始这个,但哪种项目类型最适合这个?我正在考虑WPF而不是WindowsForms,因为它似乎在演示方面提供了更多的灵活性。任何关于以上几点的建议都将不胜感激!

1 个答案:

答案 0 :(得分:4)

在WPF中,你可以这样做:

对于全局TAB键处理,在应用程序的入口点(通常是App.xaml.cs), 运行此代码:

EventManager.RegisterClassHandler(typeof(UIElement), UIElement.PreviewKeyUpEvent, new KeyEventHandler(OnPreviewKeyUp));

根据需要使用(预览)键(向上/向下)事件,如果在预览事件处理程序中设置e.Handled = true,则事件将停止其路由,其他任何人都无法对其做出反应。

在OnPreviewKeyUp中,检查e.Key == Key.Tab,并显示覆盖窗口。


事件处理程序的签名应如下所示:

private static void OnPreviewKeyUp(object source, KeyEventArgs e)


现在,对于点击部分,创建一个窗口并将叠加层的背景设置为null

WindowStyle="None" AllowsTransparency="True" Background="{x:Null}"