Seite 1 von 1

Shut in time down

Verfasst: 22.11.2005 18:17
von Tsuki-Namida
Diese Tool habe ich programmiert da ich mienen Rechner erstens gerne im Ruhezustand habe (Schnelleres Hochfahren) und ich gerne mir noch ein Film ansehe wo ich dann auch gerne mal einschlafe. Damit der Computer nicht die ganze Nacht läuft habe ich das mit der Zeitabfrage gemacht. Man kann aber auch die Aktion sofort durchfürhen lassen.
Ja ich weis es gibt schon 1000 solcher Tool's aber ich möchte ja lernen mit BP umzugehen und zudem ist das mein erstes Tool das ich selber progrmmiert habe *g*.

Hier der Quellcode:

Code: Alles auswählen

;-------------------------------->>>Fenster<<<--------------------------------------------------------
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Frame3D_0
  #String_0
  #String_1
  #String_2
  #Button_0
  #Button_1
  #Button_2
  #Combo_0
  #Text_1
  #Text_3
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 244, 47, 160, 171,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Auschaltenum XX Uhr v.1.0")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame3D_0, 10, 0, 140, 160, "")
      StringGadget(#String_0, 30, 100, 30, 20, "", #PB_String_Numeric)
      SendMessage_(GadgetID(#String_0), #EM_LIMITTEXT, 2, 0)
      StringGadget(#String_1, 70, 100, 30, 20, "", #PB_String_Numeric)
      SendMessage_(GadgetID(#String_1), #EM_LIMITTEXT, 2, 0)
      StringGadget(#String_2, 110, 100, 30, 20, "", #PB_String_Numeric)
      SendMessage_(GadgetID(#String_2), #EM_LIMITTEXT, 2, 0)
      ButtonGadget(#Button_0, 30, 130, 50, 20, "Start")
      ButtonGadget(#Button_1, 90, 130, 50, 20, "Abbruch")
      ButtonGadget(#Button_2, 13, 8, 135, 20, "Aktion sofort durchführen")
      ComboBoxGadget(#Combo_0, 40, 50, 90, 100)
      AddGadgetItem(#Combo_0,-1, "Herunterfahren") 
      AddGadgetItem(#Combo_0,-1, "Neustart") 
      AddGadgetItem(#Combo_0,-1, "Ruhezustand") 
      SetGadgetState(#Combo_0, 0) 
      TextGadget(#Text_1, 40, 30, 80, 20, "Timer Einstellung")
      TextGadget(#Text_3, 60, 105, 5, 5, "")
    EndIf
  EndIf
EndProcedure
;-----------------------------------------------------------------------------------------------------
;----------------------------->>>Programm Start>>>----------------------------------------------------

Open_Window_0() ;Fenster öffnen


;//////////////////////Herunterfahren, Neustart, Abmelden, Ruhezustand Script\\\\\\\\\\\\\\\\\\\\\\\\\
Procedure EnableShutDown()
  Privileges.TOKEN_PRIVILEGES
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
  Privileges\PrivilegeCount           = 1
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
  CloseHandle_(hToken)
EndProcedure

Procedure LogOffControl(flag.l)
  EnableShutDown()
  Select flag.l
    Case 1
      ExitWindowsEx_(#EWX_LOGOFF,1)
    Case 2
      ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_POWEROFF,0)
    Case 3
      ExitWindowsEx_(#EWX_POWEROFF,0)
    Default
      ExitWindowsEx_(#EWX_REBOOT,0)
  EndSelect
EndProcedure
           
;//////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Repeat ;Schleife Starten

  Time.l = Date() ;System Zeit in die Variabel "Time" einlesen
  HH$ = FormatDate("%hh", Time) ;Stunde in Variabel "HH$" von "Time" übernehmen
  MM$ = FormatDate("%ii", Time) ;Minute in Variabel "MM$" von "Time" übernehmen
  SS$ = FormatDate("%ss", Time) ;Sekunde in Variabel "SS$" von "Time" übernehmen
 

  If HH$=GetGadgetText(#String_0) ;Stunde muss mit der Eingabe übereinstimmen
    If MM$=GetGadgetText(#String_1) ;Minute muss mit der Eingabe übereinstimmen
       If SS$=GetGadgetText(#String_2) ;Sekunge muss mit der Eingabe übereinstimmen
        If go=1 ;Die Variabel "go" muss 1 ergeben (Go bekommt den wert 1 bi betätigen des OK Buttons)
          If GetGadgetState(#Combo_0)=0 ;ComboBox Muss auf Herunterfahren stehen
            LogOffControl(3);Befehl zum Herunterfahren
          ElseIf GetGadgetState(#Combo_0)=1 ;ComboBox muss auf Neustart stehen
            LogOffControl(0); Befehl zum Neustart
          ElseIf GetGadgetState(#Combo_0)=2 ;ComboBox muss auf Ruhezustand stehen
            If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState") ;Überprüfung ob das System Ruhezustand unterstützt
              erg=CallFunction(0,"IsPwrHibernateAllowed") ;Varabel erg bekommt den Wert 0 oder 1
              If erg=0 ;Die Variabel "erg" muss 0 haben
                MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!") ;Meldung das, dass System den Ruhezustand nicht unterstützt
              Else ;Anderer Fall (erg muss einen anderen Wert als wie 0 aufweisen)
                 CallFunction(0,"SetSuspendState",1,0,0) ;Befehl für den Ruhezustand
                 Gosub Ende
                 Return 
              EndIf ;Ende der Bedingung
             
              CloseLibrary(0) ;Ende der Überprüfung
            EndIf ;Ende der Bedingung
          EndIf ;Ende der Bedingung         
          go.l=0 ;Die Variabel go bekommt den Wert 0 weil nicht mehr weiter abgefragt werden muss
        EndIf ;Ende der Bedingung
      EndIf ;Ende der Bedingung
    EndIf ;Ende der Bedingung
  EndIf ;Ende der Bedingung
  Delay(1) ;Warten 1 milli Sekunde 
  Event = WindowEvent() ;Program wird auf ein Eventvorbereitet
  Select Event ;Aktion für ein Event   
    Case #PB_EventGadget ; verzweigung bei Gadgetevents     
      Select EventGadgetID() ;Starten der Button abfrage
        Case (#Button_0) ;Button "OK"
        If go=1
        MessageRequester ("Info","Der Timer ist bereits gestartet!")
        Else
        go.l=1 ;Ok wurde gedrückt und die Variabel go erhält den Wert 1         
        EndIf
        Case (#Button_1)  ;Button "Abbrechen"
        If go=1
        MessageRequester ("Info","Timer ist gestopt.")
        go.l=0
        Else
         Gosub Ende ;Abbruch wurde gedrückt und der Befehl "gosub" lässt das Programm zur kennzeichnung "Ende" springen
          Return ;damit Gosub wirksam wird
          EndIf
          Case (#Button_2)  ;Button "Aktion sofort durchführen"
          
          Result = MessageRequester("Frage","Möchten Sie die Aktion wirklich durchführen?",#PB_MessageRequester_YesNo)
  
  If Result = #PB_MessageRequester_Yes       ; Ja-Schalter wurde gedrückt
    If GetGadgetState(#Combo_0)=0 ;ComboBox Muss auf Herunterfahren stehen
            LogOffControl(3);Befehl zum Herunterfahren
          ElseIf GetGadgetState(#Combo_0)=1 ;ComboBox muss auf Neustart stehen
            LogOffControl(0); Befehl zum Neustart
          ElseIf GetGadgetState(#Combo_0)=2 ;ComboBox muss auf Ruhezustand stehen
            If OpenLibrary(0,"powrprof.dll") And IsFunction(0,"SetSuspendState") ;Überprüfung ob das System Ruhezustand unterstützt
              erg=CallFunction(0,"IsPwrHibernateAllowed") ;Varabel erg bekommt den Wert 0 oder 1
              If erg=0 ;Die Variabel "erg" muss 0 haben
                MessageRequester ("Ruhezustand","Ruhezustand wird NICHT unterstützt!") ;Meldung das, dass System den Ruhezustand nicht unterstützt
              Else ;Anderer Fall (erg muss einen anderen Wert als wie 0 aufweisen)
                 CallFunction(0,"SetSuspendState",1,0,0) ;Befehl für den Ruhezustand
                 Gosub Ende
                 Return 
              EndIf ;Ende der Bedingung
  Else                                       ; Nein-Schalter wurde gedrückt
    
  EndIf
  EndIf
EndIf
          
          
          
          
          
      EndSelect ;Ende der abfrage    
  EndSelect ;Ende der abfrage


Until Event = #PB_EventCloseWindow ;Fenster wird geschlossen
Ende: ;Gosub Kennzeichnung
End ;Ende Des Programms
Wie man sehen kann habe ich auch alles fleisig kommentiert damit auch andere Anfänger fieleict darin was verstehen.

PS: Bei Win9x kommt die Meldung das "Ruhezustand" nicht unterstützt wird da es bei Win 9x noch nicht unterstützt wird.

MfG:
Kain

Verfasst: 22.11.2005 18:28
von AND51
Schön, schn. Habs mir angesehen und kompiliert und nochmal angesehen.

Aber das mit den Kommentaren ist stark übertireben, finde ich. Es würde reichen, wenn dudas so kmmentierst, dass nur du oder dein Freund sich darin zurechtfindet. Dass du sogar End dekumentierst/kommentierst, ist übertrieben, darunter leidet ja die Übersichtlichkeit.

Aber ich will dir nicht zu nahe treten. Wenn du diese Arbeitsmethode beibehalten möchtest dann tu es.

ich weise nur auf eines hin: Ich habe einen alten, sehr alten rechner mit 400 MHz und 64 MB arbeitsspeicher. Da habe ich mal WinXP draufgepackt. Vorher war da Win98 drauf. Nun fahre ich den Comuter herunter: Bei Win98 klappt es reibungslos. Fahre ich ihn mit WinXP runter, gehe ich ja auf Start, Ausschalten, Auschalten. Aber der schaltet sich nicht ausd, sondern startet sich neu! Und das ist kein bug, sondern hat was mit der (alten) technik zu tun (Power Management). Nur, wenn ich auf der alten Mühle Ruhezustand anklicke, dann geht der richtig aus, also so, ass ich den Stecker zeihen könnte.

Aus Gründen der Abwärtskompatiblität wäre ich da vorsichtig, es sei denn du schei***t was auf die 12 von 128456128345612394 Usern, die einen (zu) alten PC haben ;-) =)

(Sry, f. d. rechtschreibfehler...)

Verfasst: 22.11.2005 19:01
von Tsuki-Namida
@AND51
Deine argumente sind super! Danke ;)

zu meinen Gegenargumenten:

Ich habe das so kommtentier da mit auch jeder blutiger anfänger damit klar kommen dürfte, ich wäre am anfang jedenfals sehr glücklich gewesen wenn ich einen so oder so ähnlich kommentierten quellentxt gesehen hätte um dinge schneller zu verstehen (ich brauche halt lange^^)

das tool habe ich auf einen 500 MHz programmiert und getestet mit den system XP Prof.
Meine 2 kleinen brüder haben einen 351MHz rechner mit win 98 und auf beiden läuft es super beide rechner schlten beim herunterfahren ab meiner auch bei ruhezustand (win 98 unterstützt kein ruhezustand)

Meine schwester hat einen 1GHz rechner der beim normalen runterfahren auch nicht abschaltet wie deiner bei dem too schaltet er logischerweise auch nicht ab.

was ich damit sagen möchte ist das es am boad liegt wenn der rechner nicht abschaltet. wenn ich mich nicht irre kann man das aber im bios einstellen...

PS: ach ja.... du bist mit nicht zu nahe getreten ;) ich mag kritik egal um prositiv oder negativ

Verfasst: 26.11.2005 23:21
von Kaeru Gaman
AND51 hat geschrieben: Ich habe einen alten, sehr alten rechner mit 400 MHz und 64 MB arbeitsspeicher. Da habe ich mal WinXP draufgepackt.
Selber Schuld!

...XP frißt so viel ressourcen, das läuft auf nem 700MHz nicht dauerhaft rund...

meiner meinung nach ist 1GHz auf 128MB das absolute minimum für XP, 256MB sind besser.

Verfasst: 13.12.2005 19:39
von Rubiko
Kaeru Gaman hat geschrieben:
AND51 hat geschrieben: Ich habe einen alten, sehr alten rechner mit 400 MHz und 64 MB arbeitsspeicher. Da habe ich mal WinXP draufgepackt.
Selber Schuld!

...XP frißt so viel ressourcen, das läuft auf nem 700MHz nicht dauerhaft rund...

meiner meinung nach ist 1GHz auf 128MB das absolute minimum für XP, 256MB sind besser.
ich hab nen 500 MHz mit 96 mb ram und da bleibt der pc oft mal die ganze nacht an... ohne, dass er sich hängt! und langsam laufen tut er auch nicht

Verfasst: 25.01.2006 21:09
von Tafkadasom2k5
Ich habe mal ein ähnliches Tool geschrieben, und werde es hier einfach mal posten. Ich weis nicht, ob es 100%ig funktoniert, bei manchen Rechner funktionert der Timer nicht richtig. Einfach, wenn es Probleme gibt, die Zeile 302 verändern, mit nem entsprechenden Delay.

Delays sind zwar für timer ned sonderlich gut geeignet...aber egal..

Worauf ich bei meinem Proggi aufmerksam machen will, ist die Technik des Herunterfahrens. Ich habe einfach die "shutdown.exe" des Windowas bverwendet, die sich seit 98 an der gleichen Stelle befindet (soweit ich weis-korrigiert mich, falls ich falsch liege ;) ).

Achja:
Die Datei "Noten.bmp" is nötig um starten zu können.Den Pfad müsst ihr leider vorher auswechseln.Irgendeine beliebeige BMP auswählen :)

Wär für Anregungen zu haben :)

Gr33tz
Tafkadasom2k5

EDIT:
Ihr braucht "JaPBe" und ihr müsst die "MCI-Sound-Lib" aktivieren---:oops: ganz vergessen---

Code: Alles auswählen

;- Window Constants
;
OpenLibrary(0,"user32.dll")

Global Ueberschrift.s
Ueberschrift = "Marc`s Sleep-Timer V1.3"



Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #String_0
  #String_1
  #Text_1
  #Text_2
  #Button_0
  #CheckBox_1
  #CheckBox_2
  #String_2
  #Text_3
  #Button_1
  #Button_2
  #Text_4
  #Button_3
  #Text_6
  #Text_7
  #Text_5
  #Image_1
  
EndEnumeration

;- Fonts
;
Global FontID1
FontID1 = LoadFont(1, "Comic Sans MS", 16, #PB_Font_Bold)
Global FontID3
FontID3 = LoadFont(4, "Arial", 12, #PB_Font_Bold)
Global FontID4
FontID4 = LoadFont(2, "Arial", 12)
Global FontID5
FontID5 = LoadFont(3, "Arial", 11)




UseJPEGImageDecoder()
LoadImage(1,"D:\Images.gif")

Global Image0

;- Catch Images
Image0 = CatchImage(0, ?Image0)

;- Images
DataSection
Image0:
IncludeBinary "Noten.bmp"
EndDataSection




Procedure CheckChars()
  
  For I=1 To Len(GetGadgetText(#String_0))
    If Mid(GetGadgetText(#String_0),I,1) = "1" Or Mid(GetGadgetText(#String_0),I,1) = "2" Or Mid(GetGadgetText(#String_0),I,1) = "3" Or Mid(GetGadgetText(#String_0),I,1) = "4" Or Mid(GetGadgetText(#String_0),I,1) = "5" Or Mid(GetGadgetText(#String_0),I,1) = "6" Or Mid(GetGadgetText(#String_0),I,1) = "7" Or Mid(GetGadgetText(#String_0),I,1) = "8" Or Mid(GetGadgetText(#String_0),I,1) = "9" Or Mid(GetGadgetText(#String_0),I,1) = "0" Or Mid(GetGadgetText(#String_0),I,1) = ""
    Else
      MessageRequester("Fehler:","Die Eingabefelder dürfen keine Zeichen ausser Zahlen enthalten")
      SetGadgetText(#String_0,"")
      Goto Anfang
    EndIf
  Next
  
  For I=1 To Len(GetGadgetText(#String_1))
    If Mid(GetGadgetText(#String_1),I,1) = "1" Or Mid(GetGadgetText(#String_1),I,1) = "2" Or Mid(GetGadgetText(#String_1),I,1) = "3" Or Mid(GetGadgetText(#String_1),I,1) = "4" Or Mid(GetGadgetText(#String_1),I,1) = "5" Or Mid(GetGadgetText(#String_1),I,1) = "6" Or Mid(GetGadgetText(#String_1),I,1) = "7" Or Mid(GetGadgetText(#String_1),I,1) = "8" Or Mid(GetGadgetText(#String_1),I,1) = "9" Or Mid(GetGadgetText(#String_1),I,1) = "0" Or Mid(GetGadgetText(#String_1),I,1) = ""
    Else
      MessageRequester("Fehler:","Die Eingabefelder dürfen keine Zeichen ausser Zahlen enthalten")
      SetGadgetText(#String_1,"")
      Goto Anfang
    EndIf
  Next
  
  
  
  For I=1 To Len(GetGadgetText(#String_2))
    If Mid(GetGadgetText(#String_2),I,1) = "1" Or Mid(GetGadgetText(#String_2),I,1) = "2" Or Mid(GetGadgetText(#String_2),I,1) = "3" Or Mid(GetGadgetText(#String_2),I,1) = "4" Or Mid(GetGadgetText(#String_2),I,1) = "5" Or Mid(GetGadgetText(#String_2),I,1) = "6" Or Mid(GetGadgetText(#String_2),I,1) = "7" Or Mid(GetGadgetText(#String_2),I,1) = "8" Or Mid(GetGadgetText(#String_2),I,1) = "9" Or Mid(GetGadgetText(#String_2),I,1) = "0" Or Mid(GetGadgetText(#String_2),I,1) = ""
    Else
      MessageRequester("Fehler:","Die Eingabefelder dürfen keine Zeichen ausser Zahlen enthalten")
      SetGadgetText(#String_2,"")
      Goto Anfang
    EndIf
  Next
  
  Repeat
    If Val(GetGadgetText(#String_2)) > 60
      Minutes = Minutes + 1
      Str.l = Val(GetGadgetText(#String_2)) - 60
      SetGadgetText(#String_2,Str(Str))
    EndIf
  Until Val(GetGadgetText(#String_2)) < 60
  
  Str = Val(GetGadgetText(#String_1))
  Str = Str + Minutes
  SetGadgetText(#String_1,Str(Str))
  
  Repeat
    If Val(GetGadgetText(#String_1)) >60
      Hours = Hours + 1
      Str = Val(GetGadgetText(#String_1)) - 60
      SetGadgetText(#String_1,Str(Str))
    EndIf
  Until Val(GetGadgetText(#String_1)) < 60
  
  Str = Val(GetGadgetText(#String_0))
  Str = Str + Hours
  SetGadgetText(#String_0,Str(Str))
  
EndProcedure

Procedure Reset() 
  SetGadgetText(#String_0,"0")
  SetGadgetText(#String_1,"0")
  SetGadgetText(#String_2,"0")
  SetGadgetText(#Button_0,"Go")
  DisableGadget(#CheckBox_1,0)
  DisableGadget(#CheckBox_2,0)
  DisableGadget(#Button_0,0)
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 400, 200, 265, 242,  #PB_Window_SystemMenu  | #PB_Window_TitleBar | #PB_Window_MinimizeGadget, Ueberschrift)
    If CreateGadgetList(WindowID())
      TextGadget(#Text_0, 50, 30, 150, 30, "Sleep - Timer")
      SetGadgetFont(#Text_0, FontID1)
      StringGadget(#String_0, 10, 100, 70, 30, "")
      GadgetToolTip(#String_0, "Hier die Stunden eingeben...")
      SetGadgetFont(#String_0, FontID1)
      StringGadget(#String_1, 100, 100, 70, 30, "")
      GadgetToolTip(#String_1, "Hier die Minuten eintragen...")
      SetGadgetFont(#String_1, FontID1)
      TextGadget(#Text_1, 10, 70, 50, 20, "Stunden:")
      TextGadget(#Text_2, 100, 70, 50, 20, "Minuten:")
      ButtonGadget(#Button_0, 100, 160, 70, 30, "Go")
      CheckBoxGadget(#CheckBox_1, 20, 210, 65, 30, "Signalton")
      CheckBoxGadget(#CheckBox_2, 150, 210, 90, 30, "Herunterfahren")
      StringGadget(#String_2, 190, 100, 70, 30, "")
      GadgetToolTip(#String_2, "Hier bitte die Sekunden eingeben...")
      TextGadget(#Text_3, 190, 70, 60, 20, "Sekunden:")
      SetGadgetFont(#String_2, FontID1)
    EndIf
  EndIf
EndProcedure
Procedure Open_Window_1()
  If OpenWindow(#Window_1, 390, 260, 280, 100, #PB_Window_TitleBar , "Signal-Fenster")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_1, 30, 60, 130, 30, "Abbrechen")
      TextGadget(#Text_6, 50, 20, 90, 40, "Signal...")
      SetGadgetFont(#Text_6, FontID1)
      ImageGadget(#Image_1, 190, 20, 73, 51, Image0)
      
    EndIf
  EndIf
EndProcedure



Open_Window_0()

Anfang:

SetGadgetText(#String_0,"0")
SetGadgetText(#String_1,"0")
SetGadgetText(#String_2,"0")
SetGadgetText(#Button_0,"Go")
DisableGadget(#CheckBox_1,0)
DisableGadget(#CheckBox_2,0)

Repeat
  
  EventID = WaitWindowEvent()
  
  If GetGadgetState(#CheckBox_1) = 1 And check <> 1
    Soundfile.s = OpenFileRequester("Soundfile","C:\","Soundfiles|*.wav; *.mp3; *.wma; *.mid; .*midi",0)
    check = 1
  EndIf
  
  
  If Soundfile.s = ""
    SetGadgetState(#CheckBox_1,0)
  ElseIf check = 1
    
    
    
    
    
    
    
  EndIf
  
  If check = 1 And GetGadgetState(#CheckBox_1) = 0
    check = 0
  EndIf
  
  If EventID = #PB_Event_CloseWindow
    Quit = 1
  EndIf
  
  If EventID = #PB_Event_Gadget
    
    
    If EventGadgetID() = #Button_0
      CheckChars()
      
      SetGadgetText(#Button_0,"Abbrechen")
      
      Stunden.l =  Val(GetGadgetText(#String_0))
      Minuten.l =  Val(GetGadgetText(#String_1))
      Sekunden.l = Val(GetGadgetText(#String_2))
      
      SetGadgetText(#Button_0,"Abbrechen")
      
      If GetGadgetState(#CheckBox_2) = 1
        Shutdowns.s = "Shutdown"
      EndIf
      
      
      Repeat
        
        DisableGadget(#CheckBox_1,1)
        DisableGadget(#CheckBox_2,1)
        
        EventID = WindowEvent()
        
        If EventID = 5 Or Title = 1
          Ueberschrift = Str(Stunden) + " Stunden " + Str(Minuten) + " Minuten " + Str(Sekunden) + " Sekunden"
          SetWindowTitle(#Window_0,Ueberschrift.s)
          Title = 1
        EndIf
        
        If EventID = 15
          Ueberschrift = "Marc`s Sleep-Timer V1.3"
          SetWindowTitle(#Window_0,Ueberschrift.s)
          Title = 0
        EndIf
        
        
        
        If EventID = #PB_Event_Gadget
          
          If EventGadgetID() = #Button_0
            
            Antwort = MessageRequester("Bestätigung","Wollen Sie den Countdown abbrechen?",#PB_MessageRequester_YesNo)
            
            If Antwort = 6
              SetGadgetText(#String_0,"0")
              SetGadgetText(#String_1,"0")
              SetGadgetText(#String_2,"0")
              Goto Anfang
            EndIf
            
          EndIf
          
          If EventGadgetID() = #PB_Event_CloseWindow
            Antwort = MessageRequester("Bestätigung","Wollen Sie den Countdown abbrechen und das Programm schliessen?",#PB_MessageRequester_YesNo)
            
            If Antwort = 6
              SetGadgetText(#String_0,"0")
              SetGadgetText(#String_1,"0")
              SetGadgetText(#String_2,"0")
              Quit = 1
              Goto Ende
            EndIf
            
          EndIf
          
        EndIf
        
        If Delay = 0
          Sekunden = Sekunden - 1
          
          If Sekunden = -1 And Minuten <> 0
            Minuten = Minuten - 1
            Sekunden = 59
          EndIf
          
          If Sekunden = -1 And Minuten = 0 And Stunden <> 0
            Stunden = Stunden - 1
            Minuten = 59
            Sekunden = 59
          EndIf
          
          SetGadgetText(#String_0,Str(Stunden))
          SetGadgetText(#String_1,Str(Minuten))
          SetGadgetText(#String_2,Str(Sekunden))
          Delay = 1000
        Else
          Delay = Delay - 1
        EndIf
        
        Delay(1)
        
      Until Sekunden = <0 And Minuten = 0 And Stunden = 0
      
      SetWindowTitle(#Window_0,"Marc`s Sleep-Timer V1.3")
      
      
      
      
      If check = 1
        SetGadgetText(#Button_0,"Go")
        DisableGadget(#Button_0,1)
        
        
        MCI_Load(1,Soundfile)
        laenge = MCI_GetLength(1)
        
        MCI_Play(1)
        
        
        Open_Window_1()
        
        Delay = 0
        Volume.f = 0
        
        Repeat
          EventID = WindowEvent()
          Delay(1)
          Delay + 1
          If Delay = 100
            laenge = laenge - 100
            Delay = 0
          EndIf
          
          If Volume <> 1000
            Volume = Volume + 0.25
            MCI_SetVolume(1,Volume)
          EndIf
          
          
          
          
        Until laenge < 0 Or EventGadgetID() = #Button_1
        
        If EventGadgetID() = #Button_1
          abbruch = 1
        EndIf
        
        MCI_Stop(1)
        CloseWindow(#Window_1)
        MCI_Free(1)
        Reset()
        
        
        If GetGadgetState(#CheckBox_2) = 1 And abbruch <> 1
          
          
          RunProgram("c:/windows/system32/tsshutdn","0 /Delay:0 /Powerdown","",2)
          
          Quit =1
          Goto Ende
          
          
          SetGadgetText(#Button_0,"Go")
          DisableGadget(#Button_0,0)
        Else
          abbruch = 0
        EndIf
        
        check = 0
        SetGadgetState(#CheckBox_1,0)
        
      ElseIf  check = 0 And GetGadgetState(#CheckBox_2) <> 0
        
        
        RunProgram("c:/windows/system32/tsshutdn","0 /Delay:0 /Powerdown","",2)
        
        Quit =1
        Goto Ende
        
      Else
        Reset()       
      EndIf
      
    EndIf
  EndIf
  
  Delay = 100
  
  Ende:
Until Quit = 1

Verfasst: 25.01.2006 22:37
von 125
Kaeru Gaman hat geschrieben:meiner meinung nach ist 1GHz auf 128MB das absolute minimum für XP, 256MB sind besser.
Haben es in der Schule bei 500 MHZ und 256 MB stabil laufen ;)

Verfasst: 25.01.2006 23:01
von ts-soft
Ich hab sogar Win95A auf nem Rechner mit 4 MB RAM (386SX-25) zum
laufen bekommen, stabil. Die 16 Minuten wartezeit beim starten haben
mich damals auch nicht gestört :mrgreen: