Code: Select all
; Version 12 juni 2020
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
; Programmet används för att selektera den logo (image) som finns i PDF-filen
; Spara den under ett logobibliotek.
;
; XpdfProg := "C:\Users\jan_o\OneDrive\Dokument\Expo\Autohotkey\Projekt PDF konvertering\Prog\bin64\pdfimages.exe"
; Används för att selektera bilde i PDF-filen
;
; c:\Windows\system32\certutil.exe
; Används för att avläsa filens HD5 värde (för att jämföra två filer)
;
; En katalog väljs där fakturor existerar (A_ScriptDir\PDF-faktura)
; Ett logobibliotek sätts "LogoLib"
; En liten bild som pekar på den bild som hämtats från PDF-filen "LogoPil.png"
; En tempkatalog väljs "c:\ExpoProg\Temp\"
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Katalog där fakturor som ska analyseras finns
; FakturaLib := A_ScriptDir "\PDF-faktura"
FakturaLib := A_ScriptDir "\PDF-testkatalog"
; Skapa arrayer
Support := [] ; Skapa array - Support!
Support.namn := "Jan Öhman"
Support.tfn := "070 2728753"
Support.epost := "jan@expoumea.se"
; - - - - Hantera katalog med Logo:s - - - - - - - - -
; Katalog måste existera (t.ex. /logoLib)
; ImageLib - logo:s från leverantörers fakturor (underlag för jämförelse med Fakturor)
logoLib := []
logoLib.name := "LogoLib"
logoLib.path := A_ScriptDir
logoLib.dir := logoLib.path "\" logolib.name
if !FileExist(logoLib.dir) ; Existerar katalogen?
{ MsgBox 68, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Katalog med Logo:s saknas! `n
Namn .: " logoLib.name "
Path .: " logoLib.path "`n
Ska katalogen skapas?"
)
IfMsgBox, No
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Detta program avslutas!"
)
ExitApp
}
FileCreateDir % logoLib.dir
If ErrorLevel
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Katalogen kunde inte skapas! `n
Katalognamn .: " logoLib.name "
Sökväg .: " logoLib.path "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
}
}
; - - - - Klart! - Hantera katalog med Logo:s - - - - - - - - - - - - - - - - - - - - -
; - - - - Markering av PDF-logo - - - - - - - - -
; Markering (en liten bild) som pekar på den logo som hämtats från PDF-filen
; - Kolla om markören(lilla bilden) existerar i PDF-filen
; - Bilden bör finnas
; - Avläs storlek på png-bilden
GUIimage1 := []
; GUIimage1.name := "pdfLogo.png"
; GUIimage1.name := "PilPåPdf.png"
; GUIimage1.name := "LitenPilPdf1.png"
GUIimage1.name := "LogoPil.png"
GUIimage1.path := A_ScriptDir
GUIimage1.file := GUIimage1.path "\" GUIimage1.name
If !FileExist(GUIimage1.file)
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Bild saknas! `n
En markör som markerar bilden(logo) som hittats i Fakturan. `n
Namn (png-fil) .: " GUIimage1.name "
Sökväg .: " GUIimage1.path "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program fortsätter!"
)
}
else ; Utförs endast om bilden/logo redan existerar.
{ ; Avläs info.bildens storlek
size := GetImageSize(GUIimage1.file)
GUIimage1.wide := size.w
GUIimage1.height := size.h
}
; - - - - Klart! - Markering av PDF-logo - - - - - - - - - - - - - - - - - - - -
; - - - -
; Tempkatalog måste existera
aTemp := [] ; Skapa array - Temp
aTemp.name := "Temp"
aTemp.path := "c:\ProgExpo"
aTemp.dir := aTemp.path "\" aTemp.name
aTemp.allJpg := "*.jpg"
aTemp.allPng := "*.png"
aTemp.allPbm := "*.pbm"
aTemp.allPpm := "*.ppm"
if !FileExist(aTemp.dir) ; Existerar katalogen?
{ MsgBox 68, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Temp katalog saknas! `n
Namn .: " aTemp.name "
Path .: " aTemp.path "`n
Ska katalogen skapas?"
)
IfMsgBox, No
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Detta program avslutas!"
)
ExitApp
}
FileCreateDir % aTemp.dir
If ErrorLevel
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Katalogen kunde inte skapas! `n
Katalognamn .: " aTemp.name "
Sökväg .: " aTemp.path "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
}
}
; - - - - Klart! - Hantera Tempkatalog - - - - - - - - - - - - - - - - - - - - -
; - - - - Hantera namn på tempfil(er) - - - - - - - - -
tmpImage := []
tmpImage.name := "xpdfLogo"
; - - - - Klart! - Hantera Tempkatalog och tempfil(er) - - - - - - - - - - - - - - - - - - - - -
; - - - - Program för bild analys PDF-faktura - - - - - - - - -
; Program för PDF-logo analys .: pdfimages.exe
; https://www.xpdfreader.com/pdftotext-man.html
; bild hämtats från PDF-fil - Måste finnas
xPdf := []
xPdf.nameImage := "pdfimages.exe"
xPdf.pathImage := A_ScriptDir "\prog\bin64"
xPdf.fileImage := xPdf.pathImage "\" xPdf.nameImage
If !FileExist(xPdf.fileImage)
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Program saknas! `n
Programmet avläser information om PDF-filen.`n
Namn (exe-fil) .: " xPdf.nameImage "
Sökväg .: " xPdf.pathImage "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
MsgBox ,,, Programmet avslutas!, 1
ExitApp
}
; - - - - Klart! - Program för PDF bild analys - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Val av faktura
;
; Array .: pdfInvoice - för PDF-faktura
; .path
; .name
; .file
; .ext
; .nameNoExt
; .drive
; .size
FileSelectFile file, 3, %FakturaLib%, Välj en PDF-faktura, PDF-filer (*.pdf)
SplitPath % file, fileName, filePath, Ext, NameNoExt, progDrive
pdfInvoice := [] ; Skapa en array av fakturanamnet
pdfInvoice.path := filePath
pdfInvoice.name := fileName
pdfInvoice.file := pdfInvoice.path "\" pdfInvoice.name
pdfInvoice.ext := Ext
pdfInvoice.nameNoExt := nameNoExt
pdfInvoice.drive := progDrive
If (file = "")
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Ingen PDF-faktura är vald! `n
Detta program avslutas!"
)
MsgBox ,,, Programmet avslutas!, 1
ExitApp
}
FileGetSize Size, % pdfInvoice.file, K
pdfInvoice.size := Size ; Filstorlek i kB
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
imageCount(pdfInvoice, aTemp, tmpImage, A_LineNumber) ; Returnera namn och MD5 på de bilder som hittats i PDF-filen
If ( tmpImage.totNum > 1 )
ValdBild := showImages(tmpImage, A_LineNumber)
else
ValdBild := aTemp.dir "\" tmpImage.name1
tmpImage.prog := ValdBild
/*
for k, v in tmpImage
res .= "k.: " k "`t`tv.: " v "`n"
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % res
*/
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Antal bilder .: " tmpImage.totNum "st`n`nVald bild .: " tmpImage.prog
filnamn := ImageName(pdfInvoice, GuiImage1, tmpImage, logolib, A_LineNumber)
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Filnamn .: " filnamn
ExitApp
ImageName(pdfInvoice, GuiImage1, tmpImage, logoLib, line)
{ Static Fakt1, Fakt2, inpTxt, resName1, LogoLibName, WB1
Global resFileName, buttSave
Suspend On ; Suspends hotstrings while GUI is shown
xxa=Shell.Explorer ; ActiveX PDFx - för att kunna visa en PDF i ett GUI-fönster
/*
for k, v in pdfInvoice
res .= "k.: " k "`t`tv.: " v "`n"
MsgBox,, %A_ScriptName% - Row %A_LineNumber%, % res
*/
; Avläs Logons bredd och höjd
size := GetImageSize(tmpImage.prog)
tmpImage.wide := size.w
tmpImage.height := size.h
PointH := GUIimage1.height
PointW := GUIimage1.wide
; Om bilden är mycket högre än pilen - anpassa höjd och bredd på logo.
If ( tmpImage.height > (GUIimage1.height + 50))
{ imgRatio := tmpImage.height / (GUIimage1.height + 50)
tmpImage.height := ( GUIimage1.height + 50 )
tmpImage.wide := Round((tmpImage.wide / imgRatio), 0)
}
LogoH := tmpImage.height
LogoW := tmpImage.wide
; Om höjden är mindre än den pekande pilen
StartPosY = 450 ; (y-värdet där bilder kommer)
If (tmpImage.height < GUIimage1.height) ; Om logon har mindre höjd än pilen - anpassa logon
{ LogoO := Floor(( GUIimage1.height - tmpImage.height ) / 2)
LogoY := StartPosY + LogoO
GuiHeight := StartPosY + LogoY ; Startvärde + bildhöjd
PointO = 0
PointY := StartPosY + PointO
}
else ; Om logon har Större höjd än pilen - anpassa pilens position
{ PointO := Floor(( tmpImage.height - GUIimage1.height ) / 2)
PointY := StartPosY + PointO
GuiHeight := tmpImage.height + PointY
LogoO = 0
LogoY := StartPosY + LogoO
}
GuiWide = 1200 ; Minsta bredden GUI-fonstret kan anta
; Dynamisk linjebredd
LineW := GuiWide - 20 - 20 + 145
If ( tmpImage.wide >= (GuiWide - 145) )
{ GuiWide := 145 + tmpImage.wide + 50
LineW := 145 + LogoW - 40
}
else
{ LineW := GuiWide - 40
}
; Create GUI
Handles := []
aFile := [], aFile.sh := [], aFile.ln := [] ; Används till olika listor med fakturanamn
Loop % logoLib.dir "\*.*" ; Read the files in the logodirectory
{ SplitPath A_LoopFileLongPath, tmpName, tmpPath,, tmpNameNoExt
aFile.sh.push(tmpNameNoExt)
aFile.ln.push(tmpName)
aFile.path := tmpPath
}
Gui 2: New, hwndhGui
Gui 2: Color, White
Gui 2: +AlwaysOnTop ; This is to keep the GUI on top, because I'm cutting and pasting from another app
; Gui 2: +LastFound ; Sets the window to be the "Last Found Window"
; Information
Gui 2: Font, cBlue s14 Bold, Verdana
Gui 2: Add, Text, x0 y10 w%GuiWide% h25 +Center, Ange leverantör till denna faktura.
Gui 2: Font, cBlack s10 Normal, Verdana
Gui 2: Add, Text, xp yp+30 w%GuiWide% h18 +Center, (dvs. leverantörsnamnet i Squid - ex. East, Fondaco, Beson osv.)
Gui 2: Font, cBlack s12 Normal, Verdana
Gui 2: Add, Text, x400 y70 w115 h20, Vald faktura .:
Gui 2: Font, cBlue s14 Bold, Verdana
Gui 2: Add, Text, x+10 y67 w700 h25, % pdfInvoice.name
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Gui 2: Add, Text, x20 y100 w%LineW% h2 0x7 ; Rita en linje
Gui 2: Font, cRed s10 Bold, Verdana
Gui 2: Add, Text, x230 yp+10 w170 h20, 1) Ange fakturatyp .:
; Radiobutton1
Gui 2: Font, cGreen s12 Bold, Verdana
Gui 2: Add, Radio, xp+20 yp+25 vFakt1 gInputName Group checked hwndhwnd, Leverantörsfaktura
Handles[hwnd] := {Type:"Checkbox",Blah:"Blah", TIP: "Varuleverantör anges`nex. EAST"}
; Radiobutton2
Gui 2: Add, Radio, xp yp+25 vFakt2 gInputName hwndhwnd, Faktura
Handles[hwnd] := {Type:"Checkbox",Blah:"Blah", TIP: "Övriga fakturor`nex. Telia"}
; Namn på leverantör
Gui 2: Font, cRed s10 Bold, Verdana
Gui 2: Add, Text, xp-20 yp+30 w200 h20, 2) Ange leverantör i Squid .:
Gui 2: Font, cRed s16 Bold, Verdana
; Gui 2: Add, Edit, xp yp+25 w200 +Center vInpTxt gInputText hwndhwnd
Gui 2: Add, Edit, xp+15 yp+25 w200 +Center vLogoLibName gInputName hwndhwnd
GuiControl 2: Focus, LogoLibName
Handles[hwnd] := {Type:"Edit"}
; Skapa förutsättningar i ett fönster
Gui 2: Font, cBlack s10 Normal, Verdana
Gui 2: Add, Text, xp yp+40 w200 h20 vResName1, Logonamn (som skapas) .:
Gui 2: Font, cGreen s14 Bold, Verdana
Gui 2: Add, Text, xp yp+20 w240 h25 vResFileName
; Gui 2: Add, Text, x+20 y115 w250 h25 BackgroundTrans vResFileName
*/
; Skapa ListView med en kolumn:
Gui 2: Font, cGreen s12 Normal, Verdana
Gui 2: Add, ListView, x20 y110 r9 w180+30, Logo från
; Visa alla namn i en ListView
For k, v in aFile.sh
LV_Add("", v)
LV_ModifyCol(1, "150 Sort")
/*
; Resultatfilnamn
Gui 2: Font, cBlack s12 Normal, Verdana
Gui 2: Add, Text, x20 y+30 w160 h20, Logofilnamn .:
Gui 2: Font, cBlue s16 Bold, Verdana
Gui 2: Add, Text, x+20 y115 w250 h25 BackgroundTrans vResFileName
*/
; Knappar
Gui 2: Font, cBlack s12 Normal, Verdana
Gui 2: Add, Button, x60 y375 w70 h30 gESC, Avbryt
Gui 2: Font, cBlack s18 Bold, Verdana
Gui 2: Add, Button, x250 y350 w200 h80 Default Disabled gSave vbuttSave, &Bekräfta filnamnet!
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; PDF-fönster
Gui 2: Add, Text, x500 y100 w2 h340 0x7 ; Rita en lodrät linje
Gui 2: Add, ActiveX, x500 yp w670 h300 vWB1, %xxa% ; Visar PDF-filen i ett GUI-fönster.
WB1.Navigate(pdfInvoice.file)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Gui 2: Add, Text, x20 y440 w%LineW% h2 0x7 ; Rita en linje
Gui 2: Add, Picture, x10 y%PointY% h%PointH% w%PointW%, % GUIimage1.file ; Förtydligande bild
Gui 2: Add, Picture, x145 y%LogoY% h%LogoH% w%LogoW%, % tmpImage.prog
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "PointY .: " PointY "`nPointH .: " PointH "`nPointW .: " PointW "`n`nLogoY .: " LogoY "`nLogoH .: " LogoH "`nLogoW .: " LogoW
Gui 2: Show, h%GuiHeight% w%GuiWide%, Logo Create!
; för hantering av hjälptexter (som visas en kort stund)
LastTooltipValue := "" ; For use inside the timer.
TooltipExpiryTime := 0 ; For use inside the timer.
SetTimer InfoText, 250
WinWaitActive ahk_id %hGui%
WinWaitClose ahk_id %hGui%
; MsgBox 64, Rad %A_LineNumber% -> %A_ScriptName%, % newFileName
Suspend Off ; Re-enable hotstrings that were disable above
Return newFileName
InputName:
; ToolTip % A_LineNumber "`n`n" LogoLibName
GuiControlGet newFilename,, LogoLibName ; Fånga filnamnet på logon som skrivs i inmatningsfältet
If ( StrLen(newFilename) > 0 )
{ GuiControl 2: Text, ResFileName, % newFilename ".jpg"
GuiControl 2: Enable, buttSave
}
else
{ GuiControl 2: Text, ResFileName,
GuiControl 2: Disable, buttSave
}
; ToolTip % A_LineNumber "`n`n" LogoLibName ResFileName
Gui 2: Submit, NoHide
StringUpper lowSearch, LogoLibName ; Angiven text - endast med versaler
; ToolTip % "Rad .: " A_LineNumber "`n" InpTxt "`n" newFilename "`n" LogoLibName
; MsgBox,, %A_ScriptName% - Row %A_LineNumber%, % InpTxt "`n" newFilename "`n"
; Bygg upp en ny ListView
; Selektera val av Leverantörsfaktura
If (Fakt1 = 1)
{ aFindFile := []
LV_Delete()
For k, v in aFile.sh ; ex. aFile.sh = EAST_01
{ StringUpper lowFile, v ; Filnamn i versaler
If ( lowFile ~= "^Ö&.*" ) ; Hoppa över vanliga fakturor dvs. filer som börjar på "ö&..."
Continue
If ( lowFile ~= "^" lowSearch ".*" ) ; Välj endast filer ex. "clo*"
{ aFindFile.push(v)
LV_Add("", v)
}
}
}
else ; Selektera val av andra fakturor
{ aFindFile := []
LV_Delete()
For k, v in aFile.sh
{ StringUpper lowFile, v ; filename
If !( lowFile ~= "^Ö&.*" ) ; Hoppa över Leverantörsfakturor
Continue
If ( lowFile ~= "^Ö&" lowSearch ".+" ) ; Välj endast filer som börjar på "ö&"
{ modName := SubStr(v, 3)
aFindFile.push(v)
LV_Add("", modName)
}
}
}
LV_ModifyCol(1, "150 Sort") ; Skapa ny tabell
; Modifiera filnamnet beroende på antal tecken (ex. TEST eller Testa eller ö&Testa
If ( strLen(lowSearch) < 5 )
StringUpper newFileName, lowSearch
else
StringUpper newFileName, lowSearch, T
; Kontrollera vilket nummer som bilden ska få ex. EAST_01 eller EAST_02
If Fakt1
newFileName := newName(aFile.ln, newFileName)
If Fakt2 ; Hantera visning av ö& vid allmän faktura (inte Leverantörsfaktura)
{ newFileName := "ö&" newFileName
newFileName := newName(aFile.ln, newFileName)
newFileName := strReplace(newFileName, "&", "&&") ; Ändra för att visa önskat filnamn på skärm
; res := ""
; for k, v in aFile.ln
; res .= "k.: " k "`t`tv.: " v "`n"
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % res
; ToolTip % A_LineNumber "`n- " res "`n- " newFileName
}
; Radera innehållet i fältet för resultatfilnamnet - dvs. Om input saknas
if ( StrLen(LogoLibName) < 1 )
newFileName := ""
; ToolTip % A_LineNumber "`n- " newFileName "-`n- " inpTxt "-`n- " inpTxt "`n- " strLen(inpTxt) "`n- " strLen(newFileName)
; Visa det valda namnet i GUI-fönstret
If ( StrLen(newFilename) > 0 )
{ ; ToolTip % A_LineNumber "`n- " newFileName
GuiControl 2: Text, ResFileName, % newFileName
GuiControl 2: Enable, buttSave
}
else ; Töm informationsfält
{ GuiControl 1: Text, ResFileName,
GuiControl 1: Disable, buttSave
}
Return
Save:
; Skapa ett resultatnamn
If newFileName ~= "^ö&&" ; Ta bort ett & för att få önskat filnamn
newFileName := strReplace(newfileName, "&&", "&")
Gui 1: Destroy
Gui 2: Destroy
newFile := []
; newFile.name := newFileName ".jpg"
newFile.name := newFileName
newFile.path := logoLib.dir
newFile.prog := Newfile.path "\" newFile.name
; MsgBox 64, %A_ScriptName% - Rad %A_LineNumber%, % newFile.prog
; Existerar Resultatnamnet?
If FileExist(newFile.prog)
{ ; Avläs Logons bredd och höjd
size := GetImageSize(newFile.prog)
newFile.wide := size.w
newFile.height := size.h
; 1) kolla HD5
; newFile.md5 := md5(newFile.prog)
newFile.md5 := Calc_MD5(newFile.prog)
If (newFile.md5 = tmpImage.md5)
{ ; Gui Close 2:
MsgBox 64, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Logotyp existerar!.
Inget kommer att utföras.`n`n
Detta program avslutas!"
)
ExitApp
}
; Logotypen finns men inte samma CRC MD5 - Visa
; Avläs Logons bredd och höjd
size := GetImageSize(tmpImage.prog)
tmpImage.wide := size.w
tmpImage.height := size.h
/*
PointH := GUIimage1.height
PointW := GUIimage1.wide
LogoH := tmpImage.height
LogoW := tmpImage.wide
*/
Logo1H := newFile.height
Logo1W := newFile.wide
; Om höjden är mindre än den pekande pilen
StartPosY = 90 ; (y-värdet där bilder kommer)
If (tmpImage.height < GUIimage1.height) ; Om logon har mindre höjd än pilen - anpassa logon
{ LogoO := Floor(( GUIimage1.height - tmpImage.height ) / 2)
LogoY := StartPosY + LogoO
GuiHeight := StartPosY + LogoY
PointO = 0
PointY := StartPosY + PointO
}
else ; Om logon har Större höjd än pilen - anpassa pilens position
{ PointO := Floor(( tmpImage.height - GUIimage1.height ) / 2)
PointY := StartPosY + PointO
GuiHeight := tmpImage.height + PointY
LogoO = 0
LogoY := StartPosY + LogoO
}
GuiHeight := GuiHeight + Logo1H + 20 + 40 ;
; Kolla bredden på de olika logotyperna (tmpImage.wide / newFile.wide)
If ( tmpImage.wide < newFile.wide )
ImageWide := newFile.wide
else
ImageWide := tmpImage.wide
GuiWide = 850 ; Minsta bredden GUI-fonstret kan anta
If GuiWide < ImageWide ; Anta största värdet av GUI-bredd / tmpImage.wide / newFile.wide
GuiWide := ImageWide
LineW := GuiWide - 20 - 20 + 145
If ( ImageWide >= (GuiWide - 145) )
{ GuiWide := 145 + ImageWide + 50
LineW := 145 + ImageWide - 40
}
else
{ LineW := GuiWide - 40
}
; Visa båda logotyperna och välj om den ska skrivas över.
Gui 3: Color, White
Gui 3: Font, cBlack s12 Normal, Verdana
Gui 3: Add, Text, x20 y10 w300 h20, % "Logon existerar. (men inte lika)"
Gui 3: Add, Text, x20 y40 w180 h20, % "Namn på logotypen .: "
Gui 3: Font, cBlue s16 Bold, Verdana
Gui 3: Add, Text, x+10 y35 w150 h25, % newFile.name
Gui 3: Add, Text, x20 y70 w%LineW% h2 0x7 ; Rita en linje
Gui 3: Add, Picture, x10 y%PointY% h%PointH% w%PointW%, % GUIimage1.file ; Förtydligande bild
Gui 3: Add, Picture, x145 y%LogoY% h%LogoH% w%LogoW%, % tmpImage.prog
Gui 3: Add, Text, x20 y+20 w%LineW% h2 0x7 ; Rita en linje
Gui 3: Font, cBlack s16 Normal, Verdana
Gui 3: Add, Text, x10 y+20 w200 h25, Befintlig logotyp .:
Gui 3: Add, Picture, x145 y+20 h%Logo1H% w%Logo1W%, % newFile.prog
Gui 3: Add, Text, x20 y+20 w%LineW% h2 0x7 ; Rita en linje
Gui 3: Font, cBlack s16 Normal, Verdana
Gui 3: Add, Button, x130 y+40 w200 h50 gESC, Nej - Avbryt!
Gui 3: Font, cBlack s16 Bold, Verdana
Gui 3: Add, Button, x+100 w200 h50 Default gByt1 vbuttSave1, &Ja - Byt logo
Gui 3: Show, w%GuiWide%, Logo Create!
Return
}
InfoText: ; Visar hjälptexter från fält
MaxTid := 3 ; sekunder
MouseGetPos,,,,ctrl, 2
CoordMode Mouse, Screen
; Hantera hjälptext för EDIT-fältet - beroende på vilken radioknapp som tryckts.
Gui 1: Submit, NoHide
If ( Handles[ctrl].Type = "Edit" )
{ Fakt1 ? Handles[ctrl] := {Type:"Edit",Blah:"Blah", TIP: "Ange endast namn på leverantör`nex. EAST"}
Fakt2 ? Handles[ctrl] := {Type:"Edit",Blah:"Blah", TIP: "Ange endast namn på faktura`nex. TELIA"}
}
; Hanterar att hjälptexten endast visas i MaxTid(3?) sekunder
CurrentTooltipValue := Handles[ctrl].Tip
if (CurrentTooltipValue = LastTooltipValue) {
if (A_TickCount > TooltipExpiryTime)
CurrentTooltipValue := ""
} else {
LastTooltipValue := CurrentTooltipValue
TooltipExpiryTime := A_TickCount + MaxTid * 1000
}
ToolTip % CurrentTooltipValue
Return
}
newName(array, prefix)
{ ; Version 19 maj 2021
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=90534&p=400396#p400396
; by mikeyww
suffix := 1
prefix .= "_"
Loop
For k, v in array
found := v = fn := Format("{}{:02}.jpg", prefix, found ? suffix += found : suffix)
Until found
Until !found
Return fn
}
Byt1:
Gui 3: Destroy
FileMove % tmpImage.prog, % newFile.prog, 1 ; skriv över befinlig fil
/*
Klart:
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, Klart! `n`nPDF-logo - Utfört!
*/
ExitApp
imageCount(pdfInvoice, aTemp, tmpImage, line)
{ ; Version 07 maj 2021, 25 jan 2021
;
; Skapa och räkna antal bilder som PDF-filen innehåller
; Hanterar även bilder i ppm-format / pgm-format
; Alla bilder i PDF-filen omvandlas till jpg-format
;
; IrfanView krävs (ev. IrfanView64)
;
; Följande "arrayer" krävs.
; pdfInvoice
; .drive
; .ext
; .file - Hela filnamnet med sökväg
; .name - Vald PDf-fil
; .nameNoExt - bara filnamnet
; .path
; .size
;
; aTemp
; .name - Temp
; .path - c:\ProgExpo
; .dir - c:\progExpo\temp
; .allJpg - *.jpg
; .allPng - *.png
; .allPbm - *.pbm
; .allPpm - *.ppm
;
; tmpImage
; .name - xpdfLogo
;
; Global information .:
; Support
; .namn - namn på support
; .tfn- - telefonnr
; .epost - epost - adress
;
; xPdf
; https://www.xpdfreader.com/pdftotext-man.html
; .nameImage - pdfImages.exe
; .pathImage
; .fileImage
;
; Returnerar
; tmpImage.name1, tmpImage.name2, tmpImage.name3 osv.
; tmpImage.md5_1, tmpImage.md5_2, tmpImage.md5_3 osv.
; tmpImage.totNum = Antal bilder som hittats
Global Support, xPdf
funcName := "imageCount ( pdfInvoice, aTemp, tmpImage, " line " )"
; Kontrollera om IrfanView existerar
iviewPrg := "C:\Program Files\IrfanView\i_view64.exe"
If !FileExist(iviewPrg)
{ SplitPath iviewPrg, tmpFil, tmpPath
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Förväntat program saknas!
`t(inte installerat?)`n
Filnamn .: " tmpFil "
Sökväg .: " tmpPath "`n
Kontakta " Support.namn " - " Support.tfn "`n
Detta program avbryts! "
)
ExitApp
}
; Om Globala objektet Support saknas!
If !isObject(Support)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - Support`n
Globalt definierad i funktionen .:
" funcName "
dvs. anrop från rad .: " line " `n
Support förväntas innehålla .:
`t.namn ex. Arne Svensson
`t.tfn ex. 070 1234456
`t.epost ex. jack@prog.se `n
Kontakta systemansvarig!`n
Detta program måste avslutas!"
)
ExitApp
}
; Om Globala objektet xPdf saknas!
If !isObject(xPdf)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - xPdf`n
Globalt definierad i funktionen .:
" funcName "
dvs. anrop från rad .: " line " `n
xPdf förväntas innehålla .:
`t.pathImage ex. sökväg c:\...\bin64
`t.nameImage ex. pdfimages.exe
`t.fileImage Ovanstående sökväg + program `n
Kontakta " support.namn " - " support.tfn "`n
Detta program måste avslutas!"
)
ExitApp
}
; Om objektet pdfInvoice saknas!
If !isObject(pdfInvoice)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - pdfInvoice`n
Måste finnas definierat vid anrop! `n
Anrop till funktion .:
" funcName "
dvs. anrop från rad .: " line " `n
pdfInvoice förväntas innehålla .:
`t.path ex. A_ScriptDir \ PDF-faktura
`t.name ex. Kökskungen.pdf
`t.file sökväg \ filnamn . ext
`t.ext ex. pdf
`t.nameNoExt ex. Kökskungen
`t.drive ex. c:
`t.size ex. 69 - filstorlek i kB`n
Kontakta " support.namn " - " support.tfn "`n
Detta program måste avslutas!"
)
ExitApp
}
; Om objektet aTemp saknas!
If !isObject(aTemp)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - aTemp`n
Måste finnas definierat vid anrop! `n
Anrop till funktion .:
" funcName "
dvs. anrop från rad .: " line " `n
aTemp förväntas innehålla .:
`t.name ex. Temp
`t.path ex. c:\ProgExpo
`t.dir ex. c:\progExpo\temp
`t.allJpg ex. *.jpg
`t.allPng ex. *.png
`t.allPbm ex. *.pbm
`t.allPpm ex. *.ppm`n
Kontakta " support.namn " - " support.tfn "`n
Detta program måste avslutas!"
)
ExitApp
}
; Om objektet tempImage saknas!
If !isObject(tmpImage)
{ tmpTxt := "tmpImage"
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - " tmpTxt "`n
Måste finnas definierat vid anrop! `n
Anrop till funktion .:
" funcName "
dvs. anrop från rad .: " line " `n
" tmpTxt " förväntas innehålla huvudnamnet
till de bilder som skapas från PDF-filen.
`t.name ex. xpdfLogo `n
Kontakta " support.namn " - " support.tfn "`n
Detta program måste avslutas!"
)
ExitApp
}
/*
for k, v in tmpImage
res .= "k.: " k "`tv.: " v "`n"
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % res
*/
; a) Radera alla temporära filer med bilder skapade från PDF-filer
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Innan temp filer är raderade .: " aTemp.dir "\" tmpImage.name "-*.*"
Loop Files, % aTemp.dir "\" tmpImage.name "-*.*" , F
{ FileDelete %A_LoopFilePath%
If ErrorLevel
{ SplitPath A_LoopFilePath, tmpFil, tmpPath, tmpExt
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%,
( Ltrim
% "Bilden kunde inte raderas!`n
Bildtyp .: " tmpExt "
Filnamn .: " tmpFil "
Sökväg .: " tmpPath "`n
Detta program avbryts! "
)
ExitApp
}
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Fil raderas!`n`n" A_LoopFileName "`n" A_LoopFilePath "`n`n" tmpFile.path "`n`n" tmpFile.name
}
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Alla tempfiler som börjar med `n" tmpImage.name " har raderats"
; b) Avläs de bilder som finns i PDF-filen och skapa temporära filer
RunWait % ComSpec " /c " Format("""""{}"" -j -f 1 -l 1 ""{}"" ""{}""""", xPdf.fileImage, pdfInvoice.file, aTemp.dir "\" tmpImage.name ) ,, Hide
; c) Om resultat inte jpg - försök att skapa jpg med IrfanView
Loop Files, % aTemp.dir "\" tmpImage.name "-*.*" , F
{ SplitPath A_LoopFilePath, tmpFil, tmpPath, tmpExt, tmpFilNoExt
If ( tmpExt <> jpg )
{ ; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % "Inte jpg `n" tmpFil "`n" tmpPath "`n" tmpExt
frImg := tmpPath "\" tmpFil ; frImg := "c:\ProgExpo\temp\xpdfLogo-0000.ppm"
toImg := tmpPath "\" tmpFilNoExt ".jpg" ; toImg := "c:\ProgExpo\temp\xpdfLogo-0000.jpg"
RunWait % ComSpec " /c " Format("""""{}"" ""{}"" /convert= ""{}""""", iviewPrg, frImg, toImg),, Hide
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % iviewPrg "`n`n" frImg "`n`n" toimg
}
}
; Lägg alla bilder som hittats i PDf-filen i en array
; Lägg även MD5-numret i samma array
; Spara antal bilder som hittats
Loop Files, % aTemp.dir "\" tmpImage.name "-" aTemp.allJpg, F
{ tmpImage["name" A_Index] := A_LoopFileName
tmpImage["md5_" A_Index] := Calc_MD5(A_LoopFileLongPath)
tmpImage["totNum"] := A_Index
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % A_LoopFileName "`n" Calc_MD5(A_LoopFileLongPath) "`n`n" A_LoopFileLongPath
}
; MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, % tmpImage.count() "`n- " tmpImage.name "`n- " tmpImage.name1
If ( tmpImage.totNum < 1 ) ; Bild saknas i fakturan
{ MsgBox 64, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Logo saknas i PDF-fakturan! `n
Funktion .: " funcName "`n
Faktura .: " pdfInvoice.name "
Sökväg .: " pdfInvoice.path "`n
Fakturan måste hanteras på annat sätt!
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
ExitApp
}
Return
}
GetImageSize(imageFilePath){
if !hBitmap := LoadPicture(imageFilePath, "GDI+")
throw "Failed to load the image"
VarSetCapacity(BITMAP, size := 4*4 + A_PtrSize*2, 0)
DllCall("GetObject", "Ptr", hBitmap, "Int", size, "Ptr", &BITMAP)
DllCall("DeleteObject", "Ptr", hBitmap)
Return { W: NumGet(BITMAP, 4, "UInt"), H: NumGet(BITMAP, 8, "UInt") }
}
GuiClose:
GuiContextMenu:
; *ESC::ExitApp
ESC::
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=90723&p=401260#p401260
; By Rohwedder
Suspend Permit
MsgBox ,,, Programmet avslutas!, 1
ExitApp
Return
; - - - C a l c _ M D 5 - - - - - - - - C a l c _ M D 5 - - - - - - - -
Calc_MD5(filePath)
{ ; Version 8 maj 2021
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=90278&p=398512#p398512
; By teadrinker
If !FileExist(filepath)
Return "0"
File := FileOpen(filePath, "r")
File.Pos := 0
File.RawRead(buff, len := File.Length)
File.Close()
VarSetCapacity(MD5_CTX, 104, 0)
DllCall("advapi32\MD5Init", "Ptr", &MD5_CTX)
DllCall("advapi32\MD5Update", "Ptr", &MD5_CTX, "Ptr", &buff, "UInt", len)
DllCall("advapi32\MD5Final", "Ptr", &MD5_CTX)
loop 16
md5 .= Format("{:02x}", *(&MD5_CTX + 87 + A_Index))
Return md5
}
; - - - E N D - C a l c _ M D 5 - - - - - - - -
showImages(picNames, line)
{ ; Version 11 maj 2021
; Visar ett antalbilder (logon)
; Gui in Functions
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=84650&p=371314&hilit=gui+static+function#p371314
Global Support, aTemp
Static ImgSelect
funcName := "imageCount ( picNames, " line " )"
; Om objektet tempImage saknas!
If !isObject(picNames)
{ tmpTxt := "picNames"
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Förväntat object saknas! - " tmpTxt "`n
Måste finnas definierat vid anrop! `n
Anrop till funktion .:
" funcName "
dvs. anrop från rad .: " line " `n
" tmpTxt " förväntas innehålla huvudnamnet
till de bilder som skapas från PDF-filen.
`t.name ex. xpdfLogo `n
Kontakta " support.namn " - " support.tfn "`n
Detta program måste avslutas!"
)
ExitApp
}
; Selektera endast namn på hittade bilder - imgName.namn1, namn2... (inte imgName.namn)
imgName := []
for k, v in picNames
{
If regexmatch(k, "^name\d+")
imgName[k] := aTemp.dir "\" v
; res .= "k.: " k "`t`tv.: " v "`n"
}
imgCount := imgName.count() ; Antal bilder i PDF-filen
/*
res := ""
for k, v in imgName
res .= "k.: " k "`t`tv.: " v "`n"
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % res "`n`n" imgName.count()
*/
; MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % res "`n`n" imgName.count() "`n`n" imgName.name1
Suspend On ; Suspends hotstrings while GUI is shown
Gui 2: New, +hwndhGui
Gui 2: +AlwaysOnTop ; This is to keep the GUI on top, because I'm cutting and pasting from another app
; Gui 2: +LastFound ; Sets the window to be the "Last Found Window"
aImages := [{}] ; Create an object in an array
; - - - Gui values
guiX = 50 ; The location of Gui on the screen - start value
guiY = 50
guiW = 500 ; GUI win size - (start value = min value)
guiH = 450
frameW = 400 ; The size of the frame
frameH = 400
frameX = 40 ; The osition of the first frame in the GUI
frameY = 40
offFrameX = 40 ; The space between the frames
; --- --- --- --- --- --- --- --- --- --- --- --- ---
; Om bilden ska visas mindre än ramstorlek - bild kan aldrig bli större än ramen
imgMaxW := 390 ; Max Hight and Width on the image (limit the frame)
imgMaxH := 390
If ( imgMaxH >= frameH )
imgMaxH := frameH - 2 ; Koorigering för ram
If ( imgMaxW >= frameW )
imgMaxW := frameW - 2 ; Koorigering för ram
imgMaxX := Round(((frameW - imgMaxW) / 2 ) + frameX, 0)
imgMaxY := Round(((frameH - imgMaxH) / 2 ) + frameY, 0)
; - - - Image values - - -
imgX := imgMaxX ; The initial value (x, y in the GUI) for the first image
imgY := imgMaxY
; Justera Gui storleken
If ( frameH + 220 > guiH )
guiH := frameH + 220
; Beräkna bild placeringar (imgName innehåller alla bildnamn med sökväg)
for k, v in imgName
{ imgInfo := []
; Create a frame in desire position
imgInfo.frameW := frameW
imgInfo.frameH := frameH
imgInfo.frameX := frameX
imgInfo.frameY := frameY
frameX += imgInfo.frameW + offFrameX ; Placering nästa ram
; Handle the imagename
SplitPath v, imgName, imgPath
imgInfo.name := imgName
imgInfo.path := imgPath
; Check and handle width and height of the image to fit an Area
; Image Size
Gui 3: add, picture, hwndmypic, % v
ControlGetPos,,, imgOrgW, imgOrgH,, ahk_id %mypic%
imgInfo.imgOrgW := imgOrgW
imgInfo.imgOrgH := imgOrgH
; Beräkna förhållandet mellan ramensstorlek och bildens original storlek
; Vilken dimension begränsar storleken (Höjd / Bredd)
imgInfo.ratioW := imgOrgW / imgMaxW
imgInfo.ratioH := imgOrgH / imgMaxH
If ( imgInfo.ratioW > imgInfo.ratioH ) ; Width is larger
{ imgInfo.imgW := imgMaxW
imgInfo.imgH := Round(imgInfo.imgOrgH / imgInfo.ratioW, 0)
offX = 0
offY := Round((imgMaxH - imgInfo.imgH) / 2, 0)
}
else ; Height is larger
{ imgInfo.imgW := Round(imgInfo.imgOrgW / imgInfo.ratioH, 0)
imgInfo.imgH := imgMaxH
offX := Round((imgMaxW - imgInfo.imgW) / 2, 0)
offY = 0
}
; Koordinaterna till bilden
imgInfo.imgX := Round(offX + imgMaxX, 0)
imgInfo.imgY := Round(offY + imgMaxY, 0)
; Beräkna nästa position
imgMaxX += imgInfo.frameW + offFrameX
aImages[A_Index] := imgInfo
}
; Koorigera GUI-bredd efter antal bilder
if ( guiW < frameX )
guiW := frameX
; --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
; Show the result in a GUI
Gui 2: Font, S14 cBlue Bold, Verdana
Gui 2: Add, Text, x0 y5 w%guiW% h25 center , % "PDF-filen innehåller följande bilder"
Loop % aImages.count()
{ posX := aImages[A_Index].imgX
posY := aImages[A_Index].imgY
width := aImages[A_Index].imgW
height := aImages[A_Index].imgH
imgName := aImages[A_Index].path "\" aImages[A_Index].name
Gui 2: Add, Picture, x%posX% y%posY% w%width% h%height%, % imgName
If A_Index = 1
guiColor := "Red"
else
guiColor := "Blue"
; DrawOutline( Gui, x, y, w, h, Color1, Color2, Thickness )
DrawOutline( 2, aImages[A_Index].frameX, aImages[A_Index].frameY, aImages[A_Index].frameW, aImages[A_Index].frameH, guiColor, guiColor, 2 )
; Bildtextplacering / text / färg
imgTxtX := aImages[A_Index].frameX
imgTxtY := aImages[A_Index].frameY + aImages[A_Index].frameH + 5
Gui 2: Font, S10 c%guiColor% Bold, Verdana
Gui 2: Add, Text, x%imgTxtX% y%imgTxtY% w100 h20, Bild .: %A_Index%
}
Gui 2: Font, S14 cBlack Bold, Verdana
imgTxtX := aImages.1.frameX
Gui 2: Add, Text, x%imgTxtX% yp+30, % "Vilken bild ska användas som logo? (1-" imgCount ")"
; Gui 2: Add, Text, x%imgTxtX% yp+30, % "Vilken bild ska användas som logo? (1-" imgCount ")"
Gui 2: Add, Edit, x+30 yp w50 +Center vImgSelect gImgNumber
; Knappen Nej!
buttX := aImages.1.frameX
buttY := guiH - 100
Gui 2: Add, Button, x%buttX% y%buttY% w130 h70, Avbryt
Gui 2: Show, x100 y200 w%guiW% h%guiH% , %A_ScriptName%
; Knappen Ja
; buttX := aImages.1.frameX + 175
; buttY := guiH - 100
; Gui 2: Add, Button, x%buttX% y%buttY% w200 h70 default, Ja
; Gui 2: Show, x100 y200 w%guiW% h%guiH% , %A_ScriptName%
WinWaitActive ahk_id %hGui%
WinWaitClose ahk_id %hGui%
; WinWaitActive ; If all window parameters are blank or omitted, the "Last Found Window" will be used.
; WinWaitClose ; Same as above
Suspend Off ; Re-enable hotstrings that were disable above
; MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % ValdFil
Return % ValdFil
ImgNumber:
Gui 2: Submit
ValdFil := aImages[ImgSelect].path "\" aImages[ImgSelect].name
/*
for k, v in aImages[ImgSelect]
res .= "k.: " k "`t`tv .: " v "`n"
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, % Res
*/
Gui 2: Destroy
Return
; 2GuiClose:
2ButtonAvbryt:
; Gui 2: Submit
Gui 2: Destroy
Gui 3: Destroy
MsgBox ,,, Programmet avslutas!, 1
ExitApp
Return
/*
2ButtonJa:
Gui 2: Submit
ValdFil := aImages.1.name
Gui 2: Destroy
Gui 3: Destroy
Return
*/
}
; --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
; Ritar en ram
DrawOutline( NameGUI, x, y, w, h, Color1 := "Black", Color2 := "Black", Thickness := 1 )
{ GUI , % NameGUI ": Add" , Progress , % "x" x " y" y " w" w " h" Thickness " Background" Color1
GUI , % NameGUI ": Add" , Progress , % "x" x " y" y " w" Thickness " h" h " Background" Color1
GUI , % NameGUI ": Add" , Progress , % "x" x " y" y + h - Thickness " w" w " h" Thickness " Background" Color2
GUI , % NameGUI ": Add" , Progress , % "x" x + w - Thickness " y" y " w" Thickness " h" h " Background" Color2
}
/*
md5(file)
{ ; Version 5 okt 2020
; https://www.autohotkey.com/boards/viewtopic.php?p=356449#p356449
;
Global Support
; Kontrollera att hasch-programet esisterar
Prog := []
Prog.path := A_WinDir "\System32"
Prog.name := "certutil.exe"
Prog.file := Prog.path "\" Prog.name
Prog.opt := "-hashfile"
If !FileExist(Prog.file)
{ MsgBox 16, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Program saknas! `n
Programmet som läser checksumman, `nhos en fil med hash-algoritm (MD5), saknas.`n
Namn (exe-fil) .: " Prog.name "
Sökväg .: " Prog.path "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
MsgBox ,,, Programmet avslutas!, 1
ExitApp
}
; Kontrollera att en fil har valts.
If !FileExist(file)
{ MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Fil saknas! `n
Filnamn .: " file "`n`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
ExitApp
; Return
}
try
{ RunWait % ComSpec " /c " Prog.file " " Prog.opt " """ file """ MD5 | Clip",, Hide
If ErrorLevel
{ MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%,
( LTrim
% "Ett problem uppstod!`n`n
ErrorLevel .: " ErrorLevel "`n
Kontakta .: " Support.namn " - " Support.tfn "`n
Detta program avslutas!"
)
ExitApp
}
} catch e {
MsgBox ,, %A_ScriptName% - Rad %A_LineNumber%, The catch error .: %e%
}
; Hämta information från rad2
Loop Parse, Clipboard, `n, `r
{ If ( A_Index = 2 )
{ line := A_LoopField
Break
}
}
Return line
}
*/