|  |  | 
|  | 
|  | 
|  | | Windows Ende / Herunterfahren / Annuler intercepter de Andreas Miethe: KompilierenMarqueSéparation
 Salve, iF.#############################
Test-Programm für :
XProfan
#############################
Author : Andreas Miethe
August 2003
#############################
Thema : Windows-Ende abfangen
#############################
 $H windows.ph
 $H messages.ph
DEF HiWord(1) And(&(1)>>16,$FFFF)
DEF LoWord(1) And(&(1),$FFFF)
Declare Ende&,Button&,OldWindowProc&
Proc Speicher_Routine
    Declare X&
    Statt einer Speicher-Routine läuft hier nur ein Zähler durch
    ~TextOut(%hDC,0,0,Speicher-Dummy :,16)
    Whilenot X& > 20000
        Locate 2,0
        Print X&
        Inc X&
    EndWhile
    ~TextOut(%hDC,0,100,fertig mit Speichern :,22)
    ~TextOut(%hDC,0,150,Taste.... :,11)
    Waitinput
EndProc
Proc Frage_Speichern
    If Messagebox(Erstmal alle Daten speichern ?,Windows_Ende?,36) = 7
        return 1 Windows wird sofort beendet
    Else
        bevor 1 zurückgegeben wird kann hier eine Speicher-Routine
        eingebaut werden. Windows wird erst beendet wenn alles erledigt ist.
        Speicher_Routine
        return 1 Windows wird nach dem Speichern beendet
        return 0 Windows nicht beendet
    Endif
EndProc
Proc WindowProc
    Parameters Wnd&, Msg&, wParam&, lParam&
    If Msg& = ~WM_COMMAND
        If lParam& = Button& Control abfragen
            If HiWord(wParam&) = ~BN_CLICKEDKlick auf Button
                SendMessage(Wnd&,~WM_CLOSE,0,0)
            Endif
        Endif
    Endif
    If Msg& = ~WM_CLOSE
        Speicher_Routine
        ~PostQuitMessage(0)Programm-Ende
    Endif
    If Msg& = ~WM_QUERYENDSESSION
        Return Frage_Speichern()
    Endif
    alle Messages die nicht behandelt wurden an die Original-Prozedur weiterleiten
    return ~CallWindowProc(OldWindowProc&,Wnd&, Msg&, WParam&, LParam&)
EndProc
set(FastMode,1)
SetTrueColor 1
WindowStyle 31
Window 0,0-640,480
CLS ~GetSysColor(~COLOR_BTNFACE)
Button& = CreateButton(%hwnd,Ende,10,50,80,24)
Sendmessage(Button&,~WM_SETFONT,~GetStockObject(~DEFAULT_GUI_FONT),1)
Window-Prozedur austauschen und die Original-Prozedur in
OldWindowproc sichern
OldWindowProc& = ~SetWindowLong(%hwnd,~GWL_WNDPROC, ProcAddr(windowProc,4))
WhileNot Ende&
    WaitInput
Endwhile
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 |