Moin,
Anmerkung 1 -> IrfanView:
Am Anfang der Routine prüfst Du, ob IrfanView_32 auf einem 64-Bit System installiert ist. Wenn das nicht so ist, ist nach einer Fehlermeldung Schluss:
Code: Select all
I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe" ; 32-Bit I_View auf 64-Bit System
IF !FileExist(I_view_exe)
{
Warnung_IViewText =
(LTrim
Zum Erstellen eines virtuellen Deckblattes
benötigen Sie das Bildprogramm IrfanView!
)
MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
Return
}
Später versuchst Du, das installierte I_View über die Registrierung zu ermitteln.
Code: Select all
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
Der ursprüngliche Eintrag in der Variablen
I_view_exe wird dabei überschrieben. Der aus der Registrierung ausgelesene Parameter
"%1" wird aber (wenn das überhaupt so klappt) nur für I_View 64-Bit entfernt.
Ich würde mal vermuten, dass sich die IrfanView-Installation während der Ausführung Deines Skripts nicht ändern wird. Die einmalige Suche nach der
I_VIEW_EXE zu Beginn des Skripts sollte deshalb ausreichen.
Anmerkung 2 -> Einrückungen:
Deine Einrückungen erschließen sich mir nicht. Man kann die Ablaufstruktur nicht erkennen, ohne den kompletten Code zu lesen.
Folgendes ist für mich deutlich übersichtlicher:
Code: Select all
#NoEnv
F11::
VirtuellesDeckblatt:
I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe"
IF !FileExist(I_view_exe)
{
Warnung_IViewText =
(LTrim
Zum Erstellen eines virtuellen Deckblattes
benötigen Sie das Bildprogramm IrfanView!
)
MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
Return
}
If !(ModulAuswahl = 4 or ModulAuswahl = 0)
{
MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
IfMsgBox Ok
{
Gosub Auswahlfenster
ModulAuswahl := 4
return
}
else
return
}
else
ModulAuswahl := 4
Clipboard := ""
VD_IBoxText =
(LTrim
Ein virtuelles Deckblatt zum
Bestand %AktSign% wird erstellt.
Geben Sie die Aktensignatur ein!
)
InputBox, VD_SignBox, Virtuelles Deckblatt, %VD_IBoxText%, ,240, 185,
If ErrorLevel
return
else
If InStr(VD_SignBox, "-")
{
VD_Array := StrSplit(VD_SignBox, "-")
VD_SignNeu := VD_Array[1]
VD_LoopEnd := VD_Array[2]
}
else
{
VD_SignNeu := VD_SignBox
VD_LoopEnd := VD_SignBox
}
VD_LoopIndex := VD_LoopEnd-VD_SignNeu+1
;~ Index := O
IndexStellen := StellenIndex
Index := Format("{:0" . IndexStellen . "}", 0)
;~ MsgBox, VD_LoopIndex ist %VD_LoopIndex%
VD_AktSign := StrReplace(AktSign, "--", "/")
;MsgBox %VD_AktSign%
DocumentPath := VD_Vorlage
BookmarkName1 := "AktSign_Marke"
BookmarkName2 := "Signatur_Marke"
Loop, %VD_LoopIndex%
{
oWord := ComObjCreate("Word.Application")
oWord.DisplayAlerts := 0
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName1).Select
oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
oDoc.Bookmarks(BookmarkName2).Select
oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
Send, {PGUP}
Send, ^a
Send, ^c
VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
VD_NameNeu := AktSign . "_" . VD_SignName . "-" . Index
;~ MsgBox, %VD_NameNeu%
oWord.ActiveDocument.SaveAs(Deckblattproben . VD_NameNeu . ".docx")
;oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\VD_docDateien\" . VD_NameNeu . ".docx")
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
;~ oWord := ComObjActive("Word.Application")
;~ oRange := oWord.ActiveDocument.Range.Copy
;~ oWord.DisplayAlerts := 0
;Run, %I_view_exe% /clippaste /convert=c:\test\test.jpg
Run, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg
WinClose, I_view_exe
WinClose, Word
;~ oWord.ActiveDocument.Close(0)
;~ oWord.Quit()
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
;~ MsgBox, SignNeu ist z.Z. %VD_SignNeu%
VD_SignNeu := ++VD_SignNeu
}
;~ WinClose, I_view_exe
;~ WinClose, Word
Run, Deckblattproben
;~ MsgBox, SignNeu ist jetzt %VD_SignNeu%
return