Inhalt dieses LOOPs ausdrucken

Die erste Wahl beim Drucken des Inhalts dieses LOOPs geht in jedem Fall über die PDF-Version dieses Skripts.

Wer etwas mehr Wert darauf legt, dass der Ausdruck möglichst exakt so aussieht, wie die Inhalte hier im Browser, der kann zu dieser Bastel-Lösung greifen.


Bastel-Lösung

Die Bastel-Lösung ist aus der Not heraus entstanden, weil die PDF-Export-Funktion in einem anderen LOOP aus unerklärlicher Weise nicht funktionierte, aber dennoch kurzfristig ein PDF erstellt werden musste.

Das folgende AutoIt-Skript ruft nachheinander alle Seiten des LOOP-Inhaltsverzeichnisses im Internet Explorer auf, macht einen Screenshot von den verschiedenen Teilen der Seite, und fügt diese in ein Word-Dokument ein.

So geht es halt auch, dauert nur etwas länger.


DOM-Manipulation im Browser

Und wer vielleicht aus dem Bereich der Webprogrammierung schon immer mal ein praktisches Beispiel für DOM-Manipulation im Browser haben wollte: Das Skript macht ausgibig Gebrauch davon!


Download

File:LOOP-Content-from-IE-to-Word.zip


Verwendete Software

Neben Microsoft Windows, Internet Explorer und Microsoft Word wurden noch verwendet:


Quellcode des Skripts

Code
  1. #include <INet.au3>
  2. #include <_HTML.au3>
  3.  
  4. #include <IE.au3>
  5. #include <Word.au3>
  6.  
  7. #include <MsgBoxConstants.au3>
  8.  
  9. ; ================================================================
  10. ; AutoIt-Skript
  11. ; zum Extrahieren des Content eines LOOP (http://loop.oncampus.de).
  12. ; ----------------------------------------------------------------
  13. ; Andreas Wilkens im November 2014
  14. ; aw@dozaw.de
  15. ; ----------------------------------------------------------------
  16. ; Die einzelnen Webseiten werden im Internet Explorer (IE) dargestellt
  17. ; und mit Hilfe von FireShot wird ein Screenshot von bestimmten
  18. ; Seitenteilen angefertigt. Dabei werden alle Nicht-Content-Inhalte
  19. ; zuvor per DOM-Manipulation im Browser ausgeblendet (Navigationselemente,
  20. ; Header, Footer, Sidebar links und rechts)
  21. ; Der Screenshot wird über die Windows-Zwischenablage in ein
  22. ; Word-Dokument eingefügt.
  23. ; Der User kann das Word-Dokument am Ende nach belieben ändern (z.B.
  24. ; formatieren) und abspeichern, oder auch als PDF exportieren.
  25. ; ================================================================
  26. ;
  27. ; Diese Software ist noch im Teststadium.
  28. ; Der Autor übernimmt keine Garantie für die Funktionsfähigkeit.
  29. ; Der Autor haftet nicht für Schäden, die durch die Ausführung dieser
  30. ; Software entstehen.
  31. ; Jegliche Verwendung geschieht auf eigene Gefahr.
  32. ;
  33. ; ================================================================
  34. ; Diese Software wurde entwickelt und getestet unter
  35. ; Microsoft Windows 7 Professional, 64 Bit
  36. ; AutoIt Version 3.3.12.0
  37. ; Internet Explorer Version 11.0.9600.17420
  38. ; FireShot for Internet Explorer v.0.98.63
  39. ; Microsoft Word Version 14.0.7128.5000, 64 Bit, aus dem
  40. ; Microsoft Office Professional Plus 2010 Paket
  41. ; ================================================================
  42. ;
  43. ; Diese Software ist freie Software.
  44. ; Sie darf beliebig verwendet, verändert, veröffentlicht und
  45. ; weitergegeben werden.
  46. ;
  47. ; ================================================================
  48.  
  49. Opt("SendKeyDelay", 0)
  50.  
  51. ; Mit ESC wird die Ausführung des Skripts sofort beendet.
  52. ; Es erfolgt keine weitere Rückfrage.
  53. HotKeySet("{ESC}", "Terminate")
  54.  
  55. Func Terminate()
  56.    MsgBox( 0, "", "Skriptausführung beendet." )
  57.    Exit
  58. EndFunc   ;==>Terminate
  59.  
  60. ; -------------------------------------------------------------------------
  61. ; Wenn $VERBOSE = True gesetzt ist, dann erfolgen beim Start des Skripts
  62. ; eine Reihe von Rückfragen und Auswahlmöglichkeiten für den User. Zum
  63. ; Testen sei dies unbedingt empfohlen!
  64. ; Bei $VERBOSE = False fängt das Skript sofort an zu arbeiten. Es werden
  65. ; dann die vorgegebenen Belegungen der Variablen unverändert übernommen.
  66.  
  67. Local $VERBOSE = True
  68.  
  69. ; -------------------------------------------------------------------------
  70. ; Noch einige Variablen, die später benutzt werden.
  71.  
  72. Local $oIE			; Für den Internet Explorer
  73. Local $hIE_Window_Handle
  74.  
  75. Local $oWord		; Für Word
  76. Local $hWord_Window_Handle
  77.  
  78. Local $TIMEOUT_SECONDS = 3
  79. Local $result					; Für Rückgabewerte aus MsgBox oder InputBox
  80.  
  81. ; -------------------------------------------------------------------------
  82.  
  83. If ($VERBOSE) Then
  84.    $result = MsgBox( $MB_OKCANCEL, "Word schließen","Es darf keine Microsoft Word Anwendung geöffnet sein."  & @CRLF & @CRLF & "Gegebenenfalls bitte jetzt alle aktiven Word-Instazen schließen." )
  85.    If ( ($result <> $IDOK) And ($result <> $IDTIMEOUT) ) Then
  86. 	  ; User hat den Cancel-Button gedrückt.
  87. 	  Exit
  88.    EndIf
  89. EndIf
  90.  
  91. ; -------------------------------------------------------------------------
  92. ; Um alle Links auf dieser Seite geht es.
  93. ; Üblicherweise ist dies eine LOOP-Seite mit dem TOC (Table of Contents)
  94.  
  95. Local $sURL_TOC = "http://vfhcab.oncampus.de/loop/MediaWiki:Loop_toc"
  96.  
  97. If ($VERBOSE) Then
  98.    $sURL_TOC = InputBox("", "Welche Webseite ist der Ausgangspunkt?" & @CRLF & @CRLF & "Üblicherweise ist dies eine LOOP-Seite mit dem 'Table of Contents'",$sURL_TOC, "", 500)
  99.    If (@error <> 0) Then
  100. 	  ; User hat den Cancel-Button gedrückt.
  101. 	  ; Skript wird beendet.
  102. 	  Exit
  103.    EndIf
  104. EndIf
  105.  
  106. ; -------------------------------------------------------------------------
  107.  
  108. If ($VERBOSE) Then
  109.    $result = MsgBox( $MB_OKCANCEL, "IE vorbereiten","Es muss jetzt bereits ein Fenster des Internet Explorers geöffnet sein. Du als User musst dieses Fenster öffnen." & @CRLF & @CRLF & "FireShot muss als AddOn im Internet Explorer installiert sein." & @CRLF & "FireShot muss eingestellt sein auf" & @CRLF & "--> Capture visible Area and" & @CRLF & "--> Copy to Clipboard" & @CRLF & @CRLF & "Bitte FireShot unbedingt testen, da es direkt nach der Installation viele Rückfragen hat. Bei allen Rückfragen mit 'Remember my decision' dafür sorgen, dass sie nicht wieder erscheinen." & @CRLF & @CRLF & "Die LOOP-Seite " & $sURL_TOC & @CRLF & "muss einmal im Internet Explorer geöffnet sein." & @CRLF & "Mit Benutzernamen und Passwort anmelden, falls erforderlich." & @CRLF & "Linke und rechte Sidebar ausblenden.")
  110.    If ( ($result <> $IDOK) And ($result <> $IDTIMEOUT) ) Then
  111. 	  ; User hat den Cancel-Button gedrückt.
  112. 	  Exit
  113.    EndIf
  114. EndIf
  115.  
  116. ; -------------------------------------------------------------------------
  117.  
  118. If ($VERBOSE) Then
  119.    $result = MsgBox( $MB_OKCANCEL, "","Durch drücken der ESC-Taste wird die Ausführung dieses Skripts sofort und ohne Rückfragen beendet.")
  120.    If ( ($result <> $IDOK) And ($result <> $IDTIMEOUT) ) Then
  121. 	  ; User hat den Cancel-Button gedrückt.
  122. 	  Exit
  123.    EndIf
  124. EndIf
  125.  
  126. ; -------------------------------------------------------------------------
  127. ; Alle Links dieser Seite ermitteln.
  128.  
  129. Local $HTML_SOURCE = _INetGetSource($sURL_TOC)
  130.  
  131. Dim $ALL_LINKS = _HTML_GetAllLinks($HTML_SOURCE)
  132.  
  133. If Not IsArray($ALL_LINKS) Then
  134.    MsgBox( 0, "Fehler", "Es ist ein Fehler beim Ermitteln der Links aufgetreten" & @CRLF & @CRLF & sURL_TOC )
  135.    ; Das Skript wird beendet
  136.    Exit
  137. EndIf
  138.  
  139. ; ================================================================
  140. ; Jetzt stehen alle ermittelten Links in $ALL_LINKS.
  141. ; Aber es sind noch Links für die Navigation etc. dabei.
  142. ; ================================================================
  143.  
  144. ; ----------------------------------------------------------------
  145. ; Ein wenig Information ausgeben.
  146.  
  147. If ($VERBOSE) Then
  148.    $result = MsgBox( $MB_OKCANCEL, "Anzahl Links","Auf der Webseite" & @LF & $sURL_TOC & @LF & "gibt es insgesamt" & @LF & UBound($ALL_LINKS) & " Links" )
  149.    If ( ($result <> $IDOK) And ($result <> $IDTIMEOUT) ) Then
  150. 	  ; User hat den Cancel-Button gedrückt.
  151. 	  Exit
  152.    EndIf
  153. EndIf
  154.  
  155. ; ----------------------------------------------------------------
  156. ; $START_NO enthält den Index des ersten Links im Array $ALL_LINKS.
  157. ; Der Wert dieser Variablen definiert, bei welchem Link später
  158. ; mit dem Extrahieren des Content begonnen wird.
  159.  
  160. Local $START_NO = 4
  161.  
  162. If ($VERBOSE) Then
  163.    Local $sTEXT = "Dies sind die ersten Links auf der Seite '" & $sURL_TOC & "'" & @LF
  164.    For $i = 0 To 32
  165. 	  If ($i < UBound($ALL_LINKS)) Then
  166. 		 $sTEXT = $sTEXT & @LF & $i & " : " & $ALL_LINKS[$i]
  167. 	  EndIf
  168.    Next
  169.    $sTEXT = $sTEXT & @LF & @LF & "Bei welcher Link-Nr. soll gestartet werden? (Die Navigations-Links zu Beginn sollten übersprungen werden.)"
  170.  
  171.    $START_NO = InputBox("Start-Nr.",$sTEXT,$START_NO,"",800,600)
  172.  
  173.    If (@error <> 0) Then
  174. 	  ; User hat den Cancel-Button gedrückt.
  175. 	  ; Skript wird beendet.
  176. 	  Exit
  177.    EndIf
  178. EndIf
  179.  
  180. ; ----------------------------------------------------------------
  181. ; $END_NO enthält den Index des letzten Links im Array $ALL_LINKS.
  182. ; Der Wert dieser Variablen definiert, bei welchem Link später
  183. ; das Extrahieren des Content beendet wird.
  184.  
  185. ; Local $END_NO = UBound($ALL_LINKS) - 1
  186. Local $END_NO = $START_NO + 2
  187.  
  188. If ($VERBOSE) Then
  189.    Local $sTEXT = ""
  190.    Local $x
  191.    If (UBound($ALL_LINKS) >= 33) Then
  192. 	  $x = UBound($ALL_LINKS) - 33
  193.    Else
  194. 	  $x = 0
  195.    EndIf
  196.    For $i = (UBound($ALL_LINKS) - 1) To $x Step -1
  197. 	  $sTEXT = $i & " : " & $ALL_LINKS[$i] & @LF & $sTEXT
  198.    Next
  199.    $sTEXT = $sTEXT & @LF & @LF & "Bei welcher Link-Nr. soll beendet werden? (Die Navigations-Links am Ende sollten nicht mit verarbeitet werden.)"
  200.  
  201.    $END_NO = InputBox("End-Nr.",$sTEXT,$END_NO,"",800,600)
  202.  
  203.    If (@error <> 0) Then
  204. 	  ; User hat den Cancel-Button gedrückt.
  205. 	  ; Skript wird beendet.
  206. 	  Exit
  207.    EndIf
  208. EndIf
  209.  
  210. ; -------------------------------------------------------------------------
  211.  
  212. If ($VERBOSE) Then
  213.    $result = MsgBox( $MB_OKCANCEL, "","Die Verarbeitung startet jetzt." & @CRLF & @CRLF & "Dabei klickt das Skript auf den FireShot-Button im Internet Explorer." & @CRLF & "Die Bildschirmkoordinaten für den MouseClick sind im Skript hinterlegt und müssen ggf. angepasst werden. Siehe:" & @CRLF & @CRLF & "Local $FireShot_X = 80" & @CRLF & "Local $FireShot_Y = 66" & @CRLF )
  214.    If ( ($result <> $IDOK) And ($result <> $IDTIMEOUT) ) Then
  215. 	  ; User hat den Cancel-Button gedrückt.
  216. 	  Exit
  217.    EndIf
  218. EndIf
  219.  
  220. ; ================================================================
  221. ; Jetzt haben wir alle Links in dem Array $ALL_LINKS.
  222. ; $START_NO gibt an, bei welchem Array-Index in $ALL_LINKS wir starten.
  223. ; $END_NO gibt an, bei welchem Array-Index in $ALL_LINKS wir enden.
  224. ; Dazwischen werden alle Links verarbeitet.
  225. ; ================================================================
  226.  
  227. ; -------------------------------------------------------------------------
  228. ; Word starten
  229.  
  230. $oWord = _Word_Create()
  231. $hWord_Window_Handle = WinGetHandle("Microsoft Word", "")
  232.  
  233. ; Für Word-Properties siehe:
  234. ; http://msdn.microsoft.com/en-us/library/ff841712%28v=office.14%29.aspx
  235.  
  236. ; Word auf dem Bildschirm positionieren
  237. WinMove( $hWord_Window_Handle, "", 900, 0 )
  238.  
  239. ; Einige Vorbereitungen in Word treffen
  240. Send( "^n" )		; STRG n   -->   Neues Dokument in Word
  241. Send( "^e" )		; STRG e   -->   Absatz zentrieren
  242.  
  243. ; ================================================================
  244. ; Jetzt beginnt die Verarbeitung der gewünschten Links.
  245. ; ================================================================
  246.  
  247. ; Schleife über alle zu verarbeitenden Links
  248. For $URL_NO = $START_NO To $END_NO
  249.  
  250.    WinActivate( $hWord_Window_Handle, "" )		; Dem Word-Fenster den Fokus geben.
  251.  
  252.    Send( "^{Enter}" )		; STRG Enter   -->   Neue Seite in Word
  253.  
  254.    ; Internet Explorer aufrufen mit URL dieses FOR-Durchlaufs
  255.    $oIE = _IECreate( $ALL_LINKS[ $URL_NO ], 0 )
  256.    $hIE_Window_Handle = _IEPropertyGet( $oIE, "hwnd" )
  257.  
  258.    ; Das Fenster des Internet Explorers in der linken oberen Ecke des
  259.    ; Bildschirms positionieren, damit der Mausklick auf den FireShot-Button
  260.    ; weiter unten auch mit den korrekten Koordinaten ausgeführt wird.
  261.    ; (FireShot hat im IE aktuell keinen Shortcut, es muss also zwingend ein
  262.    ; Mausklick erfolgen)
  263.  
  264.    _IEPropertySet( $oIE, "left", 0 )
  265.    _IEPropertySet( $oIE, "top", 0 )
  266.  
  267.    ; Die Breite des Fensters entspricht der Breite des Content.
  268.    ; Das ist wichtig, da FireShot genau in der Breite des Fensterinhalts aufnimmt.
  269.  
  270.    _IEPropertySet( $oIE, "width", 873 )
  271.  
  272.    ; Die Höhe des Fensters ist bewusst klein gewählt. FireShot scrollt bei der Aufnahme
  273.    ; automatisch und baut das Bild korrekt zusammen.
  274.    ; Wäre die Höhe hier großer eingestellt, als der Content lang ist, so würde unnötig
  275.    ; viel leerer Bildschirn aufgenommen werden.
  276.    ; Vorsicht: weniger als 150 macht hier keinen Sinn.
  277.    ; Wenn viele Symbolleisten etc. eingeblendet sind, kann auch ein deutlich größerer
  278.    ; Wert nötig sein.
  279.  
  280.    _IEPropertySet( $oIE, "height", 450 )
  281.  
  282.    ; Über diese Koordinaten klickt die Maus auf den FireShot-Button im Internet Explorer.
  283.    ; Die Koordinaten sind relativ zur linken oberen Ecke des Bildschirms!
  284.    Local $FireShot_X = 80
  285.    Local $FireShot_Y = 66
  286.  
  287.    ; Kurz warten, bis das Bild im Browser korrekt aufgebaut ist.
  288.    Sleep( 500 )
  289.  
  290.    ; ----------------------------------------------------------------
  291.    ; ----------------------------------------------------------------
  292.    ; Ab hier erfolgt die DOM-Manipulation im Browser.
  293.    ; ----------------------------------------------------------------
  294.    ; ----------------------------------------------------------------
  295.  
  296.    ; Alle div's entfernen, die nicht mit in den Screenshot sollen.
  297.    Local $divToBeDeleted = ["header", "navbar1", "navbar2", "pageaudio", "sidebar_left", "sidebar_right", "content_bar", "content_footer", "footer"]
  298.    For $j = 0 To (UBound($divToBeDeleted) - 1)
  299.      $oDiv = _IEGetObjById($oIE, $divToBeDeleted[$j])	; Dies ist das betreffende div.
  300.      $oDiv.outerhtml = ""								; So wird sein Inhalt aus der Browseranzeige entfernt:
  301.    Next
  302.  
  303.    ; Einige weitere Variablen, die zum Ermitteln des Contents nötig sind.
  304.    Local $sTitle = ""		; Nimmt die ermittelte Seitenüberschrift der URL dieses FOR-Durchlaufs auf.
  305.    Local $oDiv;				; Nimmt div-Container auf, um daraus den Content zu ermitteln.
  306.    Local $oChildNodes;		; Nimmt alle ChildNodes eines div-Containers auf.
  307.    Local $oNode;			; Nimmt genau einen Node auf.
  308.  
  309.    ; Die folgenden drei Zeilen dienen dazu, dem Array $HTMLParts die richtige Größe zu geben.
  310.    $oDiv = _IEGetObjById($oIE, "mw-content-text")
  311.    $oChildNodes = $oDiv.childNodes				; Aus dem div alle childNodes ermitteln
  312.    Local $HTMLParts[ $oChildNodes.length + 1 ]	; Für Überschriften und Nodes, die später als Screenshot in Word landen
  313.  
  314.    Local $part = 0;
  315.  
  316.    ; ----------------------------------------------------------------
  317.    ; Jetzt den Seitentitel ermitteln
  318.  
  319.    ; Bei "alten" LOOPs steht die Überschrift der Seite in diesem div
  320.    $oDiv = _IEGetObjById($oIE, "content_body")
  321.  
  322.    $oChildNodes = $oDiv.childNodes		; Aus dem div alle childNodes ermitteln
  323.  
  324.    For $oNode in $oChildNodes
  325.  
  326. 	  If (StringInStr( $oNode.outerhtml, '<h1>' ) = 1) or (StringInStr( $oNode.outerhtml, '<h2>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h3>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h4>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h5>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h6>' ) = 1) Then
  327.  
  328. 		 $sTitle = $oNode.innertext
  329. 		 $HTMLParts[$part] = $sTitle
  330. 		 $part += 1
  331.  
  332. 		 ; Den Inhalt dieses Nodes löschen, da er nicht ein zweites Mal
  333. 		 ; verarbeitet werden darf.
  334. 		 $oNode.outerhtml = ""
  335.  
  336. 		 ExitLoop		; Die For-Schleife sofort verlassen,
  337. 						; weil hier nicht mehr sinnvoller Inhalt stehen kann.
  338.  
  339. 	  EndIf
  340.  
  341.    Next		; For $oNode in $oChildNodes
  342.  
  343.    ; ENDE: Sonderfall "alte" LOOPs.
  344.  
  345.    ; Bei "neuen" LOOPs steht die Überschrift der Seite in diesem div
  346.    ; Und alle weiteren Nodes dieses div enthalten den Content der Seite.
  347.    $oDiv = _IEGetObjById($oIE, "mw-content-text")
  348.  
  349.    $oChildNodes = $oDiv.childNodes		; Aus dem div alle childNodes ermitteln
  350.  
  351.    For $oNode in $oChildNodes
  352.  
  353. 	  If ( $sTitle = "" ) Then
  354. 		 ; Es wurde bislang noch keine Überschrift der Seite gefunden.
  355. 		 ; Entweder ist dieser $oNode eine Überschrift,
  356. 		 ; oder sein Inhalt kann ignoriert werden,
  357. 		 ; weil über der Seitenüberschrift nichts Sinnvolles stehen kann.
  358.  
  359. 		 If (StringInStr( $oNode.outerhtml, '<h1>' ) = 1) or (StringInStr( $oNode.outerhtml, '<h2>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h3>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h4>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h5>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h6>' ) = 1) Then
  360.  
  361. 			; Ja, hier ist die Seitenüberschrift.
  362. 			; Jetzt die Überschrift extrahieren:
  363. 			$sTitle = $oNode.innertext
  364.  
  365. 			$HTMLParts[$part] = $sTitle
  366. 			$part += 1
  367.  
  368. 			; Den Inhalt dieses Nodes löschen, da er nicht ein zweites Mal
  369. 			; verarbeitet werden darf.
  370. 			$oNode.outerhtml = ""
  371.  
  372. 		 EndIf
  373. 	  Else
  374. 		 ; Es wurde bereits die Seitenüberschrift gefunden.
  375. 		 ; Jetzt weiter mit allen anderen Inhalten
  376.  
  377. 		 If ($oNode.innertext = '') Then
  378. 			$oNode.outerhtml = ''
  379. 		 Else
  380.  
  381. 			; Alle HTML-Tags, die Überschriften sind:
  382. 			If  (StringInStr( $oNode.outerhtml, '<h1>' ) = 1) or (StringInStr( $oNode.outerhtml, '<h2>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h3>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h4>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h5>' ) = 1) Or (StringInStr( $oNode.outerhtml, '<h6>' ) = 1) Then
  383. 			   ; Überschrift
  384. 			   $HTMLParts[$part] = $oNode.innertext
  385. 			   $part += 1
  386. 			Else
  387. 			  ; keine Überschrift
  388.  
  389. 			   If Not (StringInStr( $oNode.outerhtml, '<div class="autoit_do_not_print">' ) = 1) Then
  390. 				  $HTMLParts[$part] = $oNode.outerhtml
  391. 				  $part += 1
  392. 			   EndIf
  393.  
  394. 			EndIf
  395.  
  396. 		 EndIf
  397.  
  398. 	  EndIf
  399.  
  400.    Next		; For $oNode in $oChildNodes
  401.  
  402.    ; ----------------------------------------------------------------
  403.  
  404.    ; In dem Array $HTMLParts stehen jetzt die aufgetrennten Seitenteile.
  405.    ; Die Variable $part enthält aktuell die Anzahl der ermittelten Seitenteile.
  406.    ;
  407.    ; Wenn ein Feld in $HTMLParts mit einem < beginnt, so handelt es sich un einen HTML-Tag.
  408.    ; Wenn ein Feld in $HTMLParts nicht mit einem < beginnt, so handelt es sich um eine
  409.    ; Überschrift. Von Überschriften wird nur der reine Text gespeichert.
  410.    ;
  411.    ; $HTMLParts[0] enthält den Titel der in diesem Durchlauf behandelten Seite $ALL_LINKS[ $URL_NO ]
  412.  
  413.    ; ----------------------------------------------------------------
  414.  
  415.    ; Jetzt jeweils nur einen Teil im Browser darstellen,
  416.    ; (also ein Feld aus $HTMLParts)
  417.    ; dann einen Screenshot machen,
  418.    ; und den Screenshot in Word einfügen.
  419.  
  420.    ; ---------------------------------------------------------
  421.    ; Einfügen der Seitenüberschrift in Word
  422.  
  423.    WinActivate( $hWord_Window_Handle, "" )		; Dem Word-Fenster den Fokus geben.
  424.  
  425.    Send( $sTitle )
  426.    Send( "^l" )				; STRG l   -->   Den Absatz linksbündig formatieren. "l" wie Ludwig!
  427.    Send( "!1" )				; ALT 1   -->   Dem Absatz "Überschift 1" zuweisen. Ziffer "1"!
  428.    Send( "{ENTER}" )
  429.    Send( "{ENTER}" )
  430.    Send( "^e" )				; STRG e   -->   Absatz zentrieren
  431.  
  432.    ; Einen Moment abwarten, bis Word mit dem Einfügen fertig ist.
  433.    Sleep( 100 )
  434.  
  435.    ; -------------------------------------------------------------------------
  436.    ; Jetzt die Screenshots machen
  437.  
  438.    For $partnr = 1 To ($part - 1)
  439.  
  440. 	  If Not (StringInStr( $HTMLParts[ $partnr ], '<' ) = 1) Then
  441. 		 ; Der aktuelle Teil beginnt NICHT mit einem '<', deshalb muss es eine Überschrift sein.
  442. 		 ; Einfügen der Seitenüberschrift in Word
  443. 		 ; Dem Word-Fenster den Fokus geben.
  444. 		 WinActivate( $hWord_Window_Handle, "" )
  445. 		 Send( "{ENTER}" )
  446. 		 Send( $HTMLParts[ $partnr ] )
  447. 		 Send( "^l" )				; STRG l   -->   Den Absatz linksbündig formatieren. "l" wie Ludwig!
  448. 		 Send( "!2" )				; ALT 2   -->   Dem Absatz "Überschift 2" zuweisen.
  449. 		 Send( "{ENTER}" )
  450. 		 Send( "^e" )				; STRG e   -->   Absatz zentrieren
  451.  
  452. 		 ; Einen Moment abwarten, bis Word mit dem Einfügen fertig ist.
  453. 		 Sleep( 200 )
  454.  
  455. 	  Else
  456.  
  457. 		 $oDiv.innerhtml = $HTMLParts[ $partnr ]
  458.  
  459. 		 ; Einen Moment abwarten, damit die Inhalte im Browser auch
  460. 		 ; korrekt aufgebaut werden können.
  461. 		 Sleep( 500 )
  462.  
  463. 		 ; ---------------------------------------------------------
  464. 		 ; Anpassen der Höhe des Browserfensters, damit FireShot
  465. 		 ; bei der Aufnahme möglichst nicht scrollen braucht
  466.  
  467. 		 $oDoc = _IEDocGetObj( $oIE )
  468. 		 ; siehe document object http://msdn.microsoft.com/en-us/library/ms535862%28v=vs.85%29.aspx#properties
  469.  
  470. 		 $oBody = $oDoc.body
  471. 		 ; siehe body object http://msdn.microsoft.com/en-us/library/ms535205%28v=vs.85%29.aspx#properties
  472.  
  473. 		 ; Dies ist die Höhe des Content-Teils im Browser:
  474. 		 $bodyHeight = _IEPropertyGet( $oBody, "height" )
  475.  
  476. 		 ; Dies ist die Höhe des Browsers, ohne die angezeigte Webseite.
  477. 		 ; Also Titelleiste im Fenster, Menüzeile, Linksleiste, Statusleiste, etc.
  478. 		 ; Dieser Wert muss ggf. an den eigenen Browser angepasst werden.
  479. 		 Local $individualBrowserHeight = 107
  480.  
  481. 		 ; Neue Fensterhöhe setzen:
  482. 		 _IEPropertySet( $oIE, "height", $individualBrowserHeight + $bodyHeight )
  483.  
  484. 		 ; ---------------------------------------------------------
  485.  
  486. 		 ; Dem IE-Fenster den Fokus geben
  487. 		 WinActivate( $hIE_Window_Handle, "" )
  488.  
  489. 		 ; Auf den FireShot-Button im Browser klicken.
  490. 		 ; Die Koordinaten müssen stimmen!
  491. 		 MouseClick( "left", $FireShot_X, $FireShot_Y )
  492.  
  493. 		 ; Einen Moment abwarten, damit FireShot seine Arbeit tun kann.
  494. 		 Sleep( 1000 )
  495.  
  496. 		 ; ---------------------------------------------------------
  497. 		 ; Einfügen des Screenshot in Word
  498.  
  499. 		 ; Dem Word-Fenster den Fokus geben.
  500. 		 WinActivate( $hWord_Window_Handle, "" )
  501.  
  502. 		 ; Auf die Titelleiste des Word-Fensters klicken.
  503. 		 ; MouseClick( "left", $WORD_X, $WORD_Y)
  504.  
  505. 		 Send( "^v" )		; STRG v   -->   Inhalt der Zwischenablage einfügen
  506. 		 Send( "{Enter}" )
  507.  
  508. 		 ; Einen Moment abwarten, bis Word mit dem Einfügen fertig ist.
  509. 		 Sleep( 200 )
  510.  
  511. 	  EndIf
  512.  
  513.    Next		; For $partnr = 1 To ($part - 1)
  514.  
  515.    ; ---------------------------------------------------------------------
  516.  
  517.    ; Jetzt ist eine einzelne URL aus dem Array $ALL_LINKS abgearbeitet,
  518.    ; also eine LOOP-Seite ist fertig.
  519.  
  520.    ; ---------------------------------------------------------------------
  521.  
  522.    ; Das Fenster des IE wieder schließen
  523.    _IEQuit( $oIE )
  524.  
  525. Next	; For $URL_NO = $START_NO To $END_NO
  526.  
  527. ; ---------------------------------------------------------
  528. ; Einfügen der Seitenüberschrift in Word
  529.  
  530. ; Dem Word-Fenster den Fokus geben.
  531. WinActivate( $hWord_Window_Handle, "" )
  532.  
  533. Send( "^{HOME}" )			; STRG POS1   -->   An den Dokumentenanfang springen.
  534. Send( "^l" )				; STRG l   -->   Den Absatz linksbündig formatieren. "l" wie Ludwig!
  535. Send( "Quelle: {TAB}" )
  536. Send( $sURL_TOC )
  537. Send( "{ENTER}" )
  538. Send( "{ENTER}" )
  539. Send( "Stand: {TAB}" )
  540. Send( "!D" )				; ALT SHIFT d   -->   Das aktuelle Datum einfügen.
  541. Send( "{ENTER}" )
  542. Send( "{ENTER}" )
  543. Send( "Bei Bedarf:" )
  544. Send( "{ENTER}" )
  545. Send( "{TAB}Manuell ein Inhaltsverzeichnis einfügen." )
  546. Send( "{ENTER}" )
  547. Send( "{TAB}Seitenzahlen in Kopf- oder Fußzeile einfügen." )
  548. Send( "{ENTER}" )
  549. Send( "{ENTER}" )
  550.  
  551. ; Einen Moment abwarten, bis Word mit dem Einfügen fertig ist.
  552. Sleep( 200 )
  553.  
  554. Exit