Screensaver mit fast ohne API

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
stalky13
Beiträge: 28
Registriert: 11.12.2007 18:59
Wohnort: Jever

Screensaver mit fast ohne API

Beitrag von stalky13 »

Hoi

Ich hab mal aus langeweile eine Bildschirmschoner Vorlage geschrieben die auch für Anfäger leichter zu verstehn ist. In der aus dem Code Archive sind nämlich fast nur API Funktionen drinn und das ganze ist ned so leicht überschaubar vorallem bei dem Preview. Hier mal eine gut Kommentierte Vorlage die alles kann was ein schoner so braucht Vorschau, Passwortabfrage, Config und der schoner selbst natürlich :allright:

Code: Alles auswählen

;Konstanten Declarieren
;-Fenster
Enumeration
  #Window_Saver
EndEnumeration

;-Images
Enumeration 
  #Image_Preview
  #Image_Saver
EndEnumeration

;-Gadgets
Enumeration 
  #ImageGadget_Preview
  #ImageGadget_Saver
EndEnumeration

;-sonstige
#MaxMouseMove = 10


;Proceduren Declarieren
Declare Config()
Declare SetPassword()
Declare VerifyPassword(wnd)
Declare SaverPreview(hwnd)
Declare SaverMain()



;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Proceduren
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


;Konfiguration
Procedure Config()
  MessageRequester("Hinweis", "Hier könnte ihre Werbung stehn!", #MB_ICONINFORMATION)
  ProcedureReturn 0
EndProcedure

;Passwort ändern
Procedure SetPassword()
  If OpenLibrary(0,"mpr.dll") 
    CallFunction(0 ,"PwdChangePasswordA","SCRSAVE",ScrWnd,0,0) 
    CloseLibrary(0) 
    ProcedureReturn 1
  EndIf 
  ProcedureReturn 0
EndProcedure

;Passwort abfragen
Procedure VerifyPassword(wnd) 
  ;Passwort abfragen 
  Retval = 1
  If (OSVersion()=#PB_OS_Windows_95) Or (OSVersion()=#PB_OS_Windows_98)Or (OSVersion()=#PB_OS_Windows_ME) 
    Retval = 0 
    hKey.l=0 
    If RegOpenKeyEx_(#HKEY_CURRENT_USER,"'Control Panel\desktop",0,#KEY_READ,@hKey) 
      ;Ist Passwortschutz aktiv ? 
      If OpenLibrary(0,"Password.cpl") 
        ;Abfrage 
        ShowCursor_(1) 
        Retval = CallFunction(0,"VerifyScreenSavePwd",wnd) 
        ShowCursor_(Retval) 
        CloseLibrary(0) 
      EndIf 
      RegCloseKey_(hKey) 
    EndIf 
  EndIf 
  ProcedureReturn Retval 
EndProcedure 

;Screensaver Vorschau
Procedure SaverPreview(hwnd)

  ;Vorschau Fenstergröse ermitteln
  GetClientRect_(hwnd, @rc.rect)
  
  ;Image für die Vorschu erstellen
  CreateImage(#Image_Preview, rc\right, rc\bottom)
  
  ;Image Gadget für die Vorschu erstellen
  UseGadgetList(hwnd)
    ImageGadget(#ImageGadget_Preview, 0, 0, 0, 0, ImageID(#Image_Preview))
  CloseGadgetList()
  
  ;Renderschleife
  Repeat
    
    ;Demo Rendern
    StartDrawing(ImageOutput(#Image_Preview))
      Box(Random(rc\right / 2), Random(rc\bottom / 2), Random(rc\right / 2), Random(rc\bottom / 2), RGB(Random(255), Random(255), Random(255)))
    StopDrawing()
    
    ;Wenn das Gadget Nicht mehr existiert muss das programm beendet werden
    If Not IsGadget(#ImageGadget_Preview)
      Break
    EndIf
    
    ;Image Gadget Aktualisieren
    SetGadgetState(#ImageGadget_Preview, ImageID(#Image_Preview))
    
    ;Zum entlasten der cpu 10ms Timeout
    WaitWindowEvent(10)
    
  ForEver
  
  ProcedureReturn 0
EndProcedure

;Screensaver Main
Procedure SaverMain()
  
  ;Mauscursor verstecken
  ShowCursor_(0)
  
  ;Mausposition speichern
  GetCursorPos_(@lastmouse.POINT)
  
  ;Bildschirm Auflösung ermitteln
  ExamineDesktops()
  screenx = DesktopWidth(0)
  screeny = DesktopHeight(0)
  
  ;Image erstellen
  CreateImage(#Image_Saver, screenx, screeny)
  
  ;Fenster öffnen und gadgets erstellen
  If Not OpenWindow(#Window_Saver, 0, 0, screenx, screeny, "Screen Saver", #PB_Window_BorderLess)
    ProcedureReturn 0
  EndIf
  CreateGadgetList(WindowID(#Window_Saver))
    ImageGadget(#ImageGadget_Saver, 0, 0, screenx, screeny, ImageID(#Image_Saver))
  StickyWindow(#Window_Saver, 1)
  
  ;Windows mitteilen das ein Saver läuft
  SystemParametersInfo_(#SPI_SCREENSAVERRUNNING, 1, @oldval, 0)
  
  ;Render Schleife
  Repeat

    ;Demo Rendern
    StartDrawing(ImageOutput(#Image_Saver))
      Box(Random(screenx / 2), Random(screeny / 2), Random(screenx / 2), Random(screeny / 2), RGB(Random(255), Random(255), Random(255)))
    StopDrawing()
    
    ;Image Gadget aktualisieren
    SetGadgetState(#ImageGadget_Saver, ImageID(#Image_Saver))
    
    ;Mausbewegung Abfragen
    GetCursorPos_(@mouse.POINT)
    If (mouse\x - lastmouse\x) > #MaxMouseMove Or (lastmouse\x - mouse\x) > #MaxMouseMove
      If VerifyPassword(WindowID(#Window_Saver))
        Break
      EndIf
    ElseIf (mouse\y - lastmouse\y) > #MaxMouseMove Or (lastmouse\y - mouse\y) > #MaxMouseMove
      If VerifyPassword(WindowID(#Window_Saver))
        Break
      EndIf
    EndIf
    
    ;Tastatur abfrage und Timot zur entlastung der cpu
    If WaitWindowEvent(10) = #WM_KEYUP
      If VerifyPassword(WindowID(#Window_Saver))
        Break
      EndIf
    EndIf
    
  ForEver 
  
  ;Windows mitteilen das der Saver beendet wurde
  SystemParametersInfo_(#SPI_SCREENSAVERRUNNING, 0, @oldval, 0)
  
  ;Fenster Schliessen
  CloseWindow(#Window_Saver)
  
EndProcedure



;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Main Programm
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


;Programm Parameter Auslesen
param1.s = ProgramParameter()
param2.s = ProgramParameter()

;Auf Parametertrennung mit Doppelpunkt prüfen
If Len(param1) > 2
  param2 = Right(param1, Len(param1)-3)
  param1 = Left(param1, 2)
EndIf

;Startparameter Auswahl
param1 = LCase(param1)
Select param1
  Case "/c" ;Konfiguration
    Config()
    
  Case "/a" ;Passwort ändern
    SetPassword()
    
  Case "/p" ;Preview
    SaverPreview(Val(param2))
    
  Case "/s" ;Screensaver
    SaverMain()
    
  Default
    Config()
    
EndSelect

;Programmende
End
Die Passwort Abfrage ist voll funktionsfähig und braucht ned geändert werden :mrgreen:
Aus großer Kraft folgt große Verantwortung.