Moin moin,
erst einmal danke für das tolle Forum, ihr habt mir schon sehr gut weiter geholfen, leider konnten noch nicht all meine Probleme gelöst werden.
Erst einmal zu dem was mein Programm machen soll:
Ich will die Möglichkeit haben einen Screenshot vom Bildschirm zu machen, diesem eine Nummer geben und ihn kommentieren. Das ganze Produkt speicher ich dann in einer Worddatei, das geht so weiter für jeden Prüfpunkt. Im Header soll der jeweilige Test-Fall, der Namen des Testers und das heutige Datum stehen. Im Footer soll "Seite X von Y" stehen.
Es funktioniert alles so weit ganz gut. Das größte Problem habe ich mit dem Footer, das will patu nicht klappen. Schön wäre es auch wenn ich den Header schöner erzeugen könnte, das ist aber ein Luxusproblem.
Hier einmal mein Code
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; Implementierung der GUI
#Region #
$body = GUICreate("Screenshot-Tool", 307, 332, 193, 124)
$header = GUICtrlCreateLabel("Screenshot-Tool", 72, 8, 175, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$wordDocInfo = GUICtrlCreateLabel("Wie soll die Worddatei heißen?", 8, 64, 181, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$info = GUICtrlCreateButton("?", 190, 58, 25, 25)
$doc = GUICtrlCreateInput("Validierung", 8, 88, 289, 21)
$caseInfo = GUICtrlCreateLabel("Welcher Test Case wird bearbeitet?", 8, 128, 207, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$case = GUICtrlCreateInput("Test Case / Test Fall #", 8, 152, 289, 21)
$nameInfo = GUICtrlCreateLabel("Wie ist Ihr Name?", 8, 192, 105, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$name = GUICtrlCreateInput("Max Mustermann", 8, 216, 289, 21)
$exit = GUICtrlCreateButton("Beenden", 216, 264, 81, 33)
$pause = GUICtrlCreateLabel("PAUSE drücken:", 8, 264, 99, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$pauseInfo = GUICtrlCreateLabel("Screenshot machen und speichern", 8, 288, 169, 17)
GUISetState(@SW_SHOW)
#EndRegion #
; Das Drücken von "Pause" startet die Function print()
HotKeySet("{PAUSE}", "print")
Func print()
Local Const $wdHeaderFooterPrimary = 1
local $sName = GUICtrlRead($doc) ; liest die Eingabe des Dokumentennamen aus und speichert diese in der Variable sName
local $sFileName = @ScriptDir & "\" & $sName & ".docx"
local $sCaseNumber = GUICtrlRead($case) ; liest die Eingabe der Casenummer aus und speichert diese in der Variable sCaseNumber
local $sUserName = GUICtrlRead($name) ; liest die Eingabe des Testers aus und speichert diese in der Variable sUserName
local $date = @MDAY & "." & @MON & "." & @YEAR
; Der Header musste etwas erschummelt werden um ihn über mehrere Zeilen hin zu bekommen
$sHeader = "Test Case/ Test Fall #: " & $sCaseNumber & " " & "Durchgeführt von: " & $sUserName & " " & "Datum: " & $date
$sFooter = 'Seite {PAGE \* Arabic \* MERGEFORMAT} von {NUMPAGES \* Arabic \* MERGEFORMAT}' ;Feldfunktion, kann aber leider nicht als String eingefügt werden
; prüft ob ein Worddokument mit dem Namen aus dem Textfeld existiert und erstellt andernfals ein solches
If Not (FileExists($sName & ".docx")) Then
FileWrite($sName & ".docx","")
; schreibt header (und hoffentlich bald footer)
$oWord = ObjCreate("Word.Application")
$oWord.Visible = False ; bleibt unsichtbar
$oWord.Documents.Open ($sFileName) ; eine bestehende Datei aufrufen
$oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range.Text = $sHeader
$oWord.Application.DisplayAlerts = False
$oWord.ActiveDocument.Save
$oWord.Quit
EndIf
;DRUCK drücken um einen screenshot zu machen
Send("{PRINTSCREEN}")
Sleep(200)
; öffnet ein Eingabefeld in dem ein Kommentar geschrieben werden kann
local $pruefpunkt = "Prüfpunkt: " & InputBox("Prüfpunkt", "Prüfpunkt eingeben")
local $command = InputBox("Kommentar", "Kommentar eingeben")
ShellExecute($sName & ".docx", "", @ScriptDir, "edit") ; öffnet die Worddatei
local $window = WinWait($sName,"",2) ;wartet bis zu 2 Sekunden auf das Öffnen der Worddatei, sonst Abbruch
WinSetState($window, "", @SW_SHOW) ; legt die Worddatei in den Vordergrund
; ans Ende des Dokumentes springen, wichtig falls es geschlossen wurde oder ähnliches
SEND("{CTRLDOWN}{END}{CTRLUP}")
Send("{ENTER}")
[/autoit] [autoit][/autoit] [autoit]; Prüfpunkt als Überschrift des Bildes schreiben
Send($pruefpunkt)
; Einfügen des Bildes
Send("{CTRLDOWN}{v}{CTRLUP}")
Sleep(200)
; Einfügen des Kommentars
Send("{ENTER}")
Sleep(200)
Send("Kommentar:")
Sleep(200)
Send("{SHIFTDOWN}{ENTER}{SHIFTUP}")
Sleep(200)
send($command)
Sleep(200)
; neue Seite
Send("{CTRLDOWN}{ENTER}{CTRLUP}")
; minimieren der Worddatei
WinSetState($window, "", @SW_MINIMIZE)
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $exit
Exit
Case $info
MsgBox(64,"Info","Die Worddatei dient als Dokument, welches die einzelnen Schritte und Prüfpunkte an Hand von Screenshots speichert. Sie dient als Nachweis, dass der jeweilige Test Case bearbeitet wurde.")
EndSwitch
WEnd