代码之家  ›  专栏  ›  技术社区  ›  Scott Muc

我可以用wpf震动用户桌面吗?

  •  5
  • Scott Muc  · 技术社区  · 16 年前

    我正在编写一个个人使用的应用程序,它将跟踪我多久接触一次鼠标,并保存一个计数器,记录我已经无鼠标了多久。当我使用鼠标时,我希望它震动我的桌面工作区一秒钟,作为一个负强化动作。

    这个应用程序将被称为wristslap,一旦我准备好0.1版本,它就会出现在Github上。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Josh    16 年前

    丹尼对透明窗户的想法很感兴趣。但它不一定是透明的。但是,您必须接受一些特定的限制。

    你会想的 grab a screen shot 并将其应用于全屏WPF窗口。(检查我的 blog 为WPF窗口提供一个方便的全屏行为)。然后,您只需将一些诱发癫痫的动画应用于根元素上的转换布局转换。这会产生震动的效果。最后,窗户就可以关上了。

    因为在动画过程中,所有东西的坐标都会覆盖整个位置,所以您可能不想费心将移动桌面上的鼠标单击转换为底层控件。如果动画足够短,那就不重要了,因为你没有时间在它晃动时尝试单击任何东西。

    为了更加真实,你可以使用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>
    
        2
  •  1
  •   Danny Varod    16 年前

    您可以创建一个透明的窗口,其中包含一个不断变化的旋转着色效果。

    不过,我不确定这能解决你对电脑的上瘾。