Vor längerer Zeit hat Lee Brimelow ein Beispiel gezeigt, wie man einen Bildschirmschoner mit Adobe AIR (damals noch Apollo) erstellen kann. Nach einigen Trial-and-Error-Versuchen habe ich es hingekriegt, mit Adobe AIR 1.0 eine AIR-Anwendung als Screensaver zu installieren.

Voraussetzung ist, dass die Adobe AIR 1.0 Runtime installiert ist. Außerdem funktioniert es nur für Windows.

Man installiert AIR-Programme als Screensaver auf auf diese Weise:

  • Das AIR-Beispiel herunterladen und installieren
  • In das Installationsverzeichnis gehen (Standard ist c:\programme\air-screensaver) und dort die .exe-Datei suchen
  • Die Dateiendung dieser Datei in .scr umbenennen.
  • Mit der rechten Maustaste auf die Datei klicken, nun "installieren" wählen.
  • Die AIR-Anwendung wird als Bildschirmschoner installiert.

Der Screensaver funktioniert folgendermaßen: Nach dem Start des Programms wird der Fullscreen-Mode aufgerufen. Wichtig ist, dass dies über das INVOKE-Event gemacht wird, sonst funktioniert es nicht korrekt. Dann wird die Monitorauflösung ausgelesen und ein schwarzer MovieClip als Hintergrund auf diese Maße skaliert.

Der eigentliche Inhalt wird über die Loader-Komponente geladen. Man könnte natürlich auch direkt eine Animation in der AIR-Datei ablaufen lassen. Das Beispiel verwendet als Demoinhalt eine alte Flex-Kuler-Animation von mir, die als externe SWF-Datei nachgeladen wird. Zusätzlich liegt auch eine XML-Datei mit einem Feed dabei, damit die Animation keine Internetverbindung benötigt.

Actionscript:
  1. import flash.desktop.NativeApplication;
  2. import flash.system.*;
  3. import flash.events.*;
  4.  
  5.  
  6. // ::::::::::::::::::
  7. // ::::::::::::::::::
  8. // ::::::::::::::::::
  9.  
  10. // align top left
  11. stage.align = "tl";
  12.  
  13. // add event listener for invocation
  14. NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvokeEvent);
  15.  
  16. // add event listener for fullscreen mode
  17. stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullscreen);
  18.  
  19.  
  20. function onInvokeEvent(invocation:InvokeEvent):void {
  21.    
  22.     // go fullscreen
  23.     stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE
  24.    
  25.    
  26. }
  27.  
  28.  
  29. function onFullscreen(evt:Event) {
  30.    
  31.     // black background to screen resolution size
  32.     background_mc.width = Capabilities.screenResolutionX;
  33.     background_mc.height = Capabilities.screenResolutionY;
  34. }
  35.  
  36.  
  37. // ::::::::::::::::::
  38. // ::::::::::::::::::
  39. // ::::::::::::::::::
  40.  
  41.  
  42. stage.addEventListener(MouseEvent.MOUSE_DOWN, onUserPresent);
  43. stage.addEventListener(KeyboardEvent.KEY_DOWN, onUserPresent);
  44.  
  45.  
  46. function onUserPresent(evt:Event) {
  47.    
  48.     // exit application
  49.     NativeApplication.nativeApplication.exit()
  50. }

Ich würde mich über Rückmeldung freuen, ob es auch bei anderen einwandfrei funktioniert.

Download: air-screensaver.air
Download: AIR Screensaver Sources (.fla)
Link: Apollo Screensaver with Transparency