我可以使用WPF摇动用户桌面吗?

时间:2010-03-04 20:09:17

标签: wpf shake

我正在编写一个供个人使用的应用程序,它将跟踪我到达鼠标的频率,并将反复说明我已经没用鼠标了多长时间。当我使用鼠标时,我希望它可以将我的桌面工作区震动一秒作为负面强化动作。

应用程序将被称为WristSlap,一旦我准备好0.1版本就会在github上。

2 个答案:

答案 0 :(得分:4)

Danny正在使用透明窗口的想法。但它不必是透明的。但你必须接受某些限制。

您需要grab a screen shot桌面并将其应用于全屏WPF窗口。 (查看我的blog以获取WPF窗口的方便的FullScreenBehavior)。然后,您只需将一些癫痫诱导动画应用于根元素上的平移布局变换。这会产生震动的效果。最后窗口可以关闭。

因为在动画期间,所有内容的坐标都将遍布整个地方,您可能不希望在尝试将移动桌面上的鼠标点击转换为基础控件时感到困扰。如果动画足够短,那就无所谓了,因为你没有时间在它摇动时点击任何东西。

为了更真实,您可以考虑使用DWM(桌面窗口管理器)来投影桌面的“实时”视图,但这可能不值得,特别是如果您保持动画很短。

我几乎想亲自尝试一下。

我现在用静态图像想出了这个。没关系,但可以改进。

<Image Source="Slide1.png" Stretch="UniformToFill">

<Image.Effect>
  <BlurEffect Radius="5" />
</Image.Effect>

<Image.RenderTransform>
  <TranslateTransform Y="0" X="0"/>
</Image.RenderTransform>

<Image.Triggers>
  <EventTrigger RoutedEvent="FrameworkElement.Loaded">
    <BeginStoryboard>
      <Storyboard RepeatBehavior="00:00:01" SpeedRatio="15">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)">
          <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="-10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.7000000" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)">
          <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="-10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="-10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.7000000" Value="10"/>
          <SplineDoubleKeyFrame KeyTime="00:00:00.9000000" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger>
</Image.Triggers>

</Image>

答案 1 :(得分:1)

您可以使用更改的旋转着色器效果创建透明窗口。

我不确定这会解决你对电脑上瘾的问题。