Можно ли потрясти рабочий стол пользователя с помощью WPF? - PullRequest
5 голосов
/ 04 марта 2010

Я пишу приложение для личного пользования, которое будет отслеживать, как часто я берусь за мышь, и буду хранить счетчик того, как долго я без мыши. Когда я использую мышь, мне бы хотелось, чтобы она на секунду трясла мое рабочее место на рабочем столе в качестве негативного действия по усилению.

Приложение будет называться WristSlap и будет на github, как только у меня будет готова версия 0.1.

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Дэнни на что-то с идеей прозрачного окна. Но это не должно быть прозрачным. Вы должны были бы принять некоторые определенные ограничения.

Вы хотите сделать снимок экрана рабочего стола и применить его к полноэкранному окну WPF. (Проверьте мой блог для удобного FullScreenBehavior для окна 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>
1 голос
/ 05 марта 2010

Вы можете создать прозрачное окно с изменяющимся эффектом вертящего шейдера.

Я не уверен, что это решит вашу зависимость от компьютеров.

...