Code:
;allgemeinens
; Anfang der Datei http://activex.autolisp.info/layreactor.html
; Funktion zum Setzen der Reaktoren
(defun add-cmd-reactors( / )
  (vl-load-com)
  (if(not *cmd-reactor-added*)
    (progn
      (vlr-command-reactor nil
       '( (:vlr-commandWillStart . cmd-start-callback))
      )
      (vlr-command-reactor nil
       '( (:vlr-commandEnded . cmd-end-callback))
      )
      (setq *cmd-reactor-added* 'T)
    )
  )
)
; allgemeine Cmd-Callback-Funktion
; (vor der Befehlsausführung)
(defun cmd-start-callback(reactor argslist / )
  (cond
;    ( (member(car argslist)'("_plot""plot"))
;      (plot-start-callback reactor argslist)
;    )
    ( (member(car argslist)'("-VPORTS""-MANSFEN""AFENSTER""-AFENSTER"))
      (vport-start-callback reactor argslist)
    )
     ( (member(car argslist)'("punkt" "_point"))
      (punkt-start-callback reactor argslist)
    )
    ( (member(car argslist)'("_mleader""MFÜHRUNG" "BEMFÜHRUNG" "FÜHRUNG" "SFÜHRUNG"))
      (fuhrung-start-callback reactor argslist)
    )
  )
)
; allgemeine Cmd-Callback-Funktion
; (nach der Befehlsausführung)
(defun cmd-end-callback(reactor argslist / )
  (cond
    
;    ( (member(car argslist)'("_plot""plot"))
;      (plot-end-callback)
;    )
    ( (member(car argslist)'("-MANSFEN""AFENSTER")) 
      (vport-end-callback)
    )     
     ( (member(car argslist)'("punkt" "_point")) 
      (punkt-end-callback)
    )     
     ( (member(car argslist)'("_mleader""MFÜHRUNG" "BEMFÜHRUNG" "FÜHRUNG" "SFÜHRUNG")) 
      (fuhrung-end-callback)
    ) 
  )
)
; Macht einen Layer aktuell
(defun set-layer(name / )
  (vla-put-ActiveLayer
    (current-document)
    (vla-item(document-layers)name)
  )
)
; gibt das Vla-Object zu einem
; Layernamen zurück
(defun layer-object(name / result)
  (vlax-for layer(document-layers)
    (if
      (=(strcase name)
        (strcase(vla-get-name layer))
      )
      (setq result layer)
    )
  )
  result
)
; Erzeugt einen neuen Layer
(defun create-layer(name props / newlayer)
  (setq newlayer
    (vla-add (document-layers) name)
  )
  (foreach prop props
    (vlax-put-property
      newlayer (car prop)(cdr prop)
    )
  )
  newlayer
)
; Ermittelt den aktuellen Layer
(defun get-current-layer( / )
  (vla-get-activelayer
    (current-document)
  )
)
; Gibt die Layer-Collection zurück
(defun document-layers( / )
  (vla-get-layers
    (current-document)
  )
)
; gibt die aktuelle Zeichnung zurück
(defun current-document( / )
  (vla-get-activedocument
    (vlax-get-acad-object)
  )
)
; Vorher-Callback für Ansichtsfenster
(defun vport-start-callback(reactor argslist / layer)
  (setq layer "Defpoints")
  (setq *previous-layer*(get-current-layer))
  (set-layer layer)
)
; Nachher-Callback für Ansichtsfenster
(defun vport-end-callback( / )
  (if *previous-layer*
    (progn
      (vla-put-activelayer
        (current-document)
        *previous-layer*
      )
      (setq *previous-layer* nil)
    )
  )
)
; Vorher-Callback für Punkt
(defun punkt-start-callback(reactor argslist / layer)
  (setq layer "Defpoints")
  (setq *previous-layer*(get-current-layer))
  (set-layer layer)
)
  
; Nachher-Callback für Punkt
(defun punkt-end-callback( / )
  (if *previous-layer*
    (progn
      (vla-put-activelayer
        (current-document)
        *previous-layer*
      )
      (setq *previous-layer* nil)
    )
  )
)
; Vorher-Callback für Führung
(defun fuhrung-start-callback(reactor argslist / layer)
  (setq layer "fp_text")
  (setq *previous-layer*(get-current-layer))
  (set-layer layer)
)
  
; Nachher-Callback für Führung
(defun fuhrung-end-callback( / )
  (if *previous-layer*
    (progn
      (vla-put-activelayer
        (current-document)
        *previous-layer*
      )
      (setq *previous-layer* nil)
    )
  )
)
; Vorher-Callback für Plot
;(defun plot-start-callback(reactor argslist / )
;  (command "BlocksToLayer0")
;  (vl-cmdf)  ; Warten, bis der Befehl abgeschlossen ist
;)
; Vorher-Callback für Plot
;(defun plot-start-callback(reactor argslist / )
;  (BlocksToLayer0)  ; Direktes Aufrufen der Funktion BlocksToLayer0
;)
; Nachher-Callback für Plot
;(defun plot-end-callback( / )
  
;)
 
(princ
    (strcat
        "\n**   ForsterReaktoren.lsp _ Version 2.1 loaded "
    )
)
; Sicherstellen, dass die ActiveX-
; Funktionen geladen sind
(vl-load-com)
; Reaktoren beim Laden starten
(add-cmd-reactors)
; Ende Datei