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

5
我正在编写一款个人使用的应用程序,用于跟踪我使用鼠标的频率,并计算我已经多长时间没有使用鼠标了。当我使用鼠标时,我希望它可以在桌面上震动一秒钟,作为一种负面强化行为。
这个应用程序将被称为 WristSlap,并且一旦我准备好 0.1 版本,它将在 Github 上发布。

将其作为答案添加,我会将其标记为被接受的答案。 - Scott Muc
2个回答

4

Danny提出了透明窗口的想法,这个想法很有潜力。但它不一定非要是透明的。然而,您需要接受某些限制。

您需要抓取桌面截图并将其应用于全屏WPF窗口。(请查看我的博客,获取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>

这听起来有点邪恶(无意冒犯,从技术角度来看很有趣)。想象一下假防病毒应用程序会这样做,以防止您离开它们的窗口。 - Riddari
1
这就是为什么Silverlight web应用程序不允许您创建接受键盘输入的全屏窗口的原因。但这是关于WPF的,它具有对Windows API的完全访问权限,因此显示全屏窗口并不是一个问题。如果WPF应用程序正在桌面上运行,则它已经可以做任何想做的事情。这就是Control+Alt+Delete序列的作用。 - Josh
FYI,Silverlight 4将在全屏模式下具有一些键盘输入功能。 - Gabe
仅适用于具有提升权限的本地安装应用程序。 - Josh

1

你可以使用旋转着色器效果创建一个带有透明度的窗口。

但我不确定这能解决你对电脑的瘾。


我试图摆脱的不是对电脑的沉迷,而是努力创造一些能让我少用鼠标、更多使用键盘的东西。 - Scott Muc
那么试试罗技DiNovo Mini吧。 - Danny Varod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接