Kezdőoldal » Számítástechnika » Programozás » Autoitnál hogy oldható meg,...

Autoitnál hogy oldható meg, hogy ne programlistában hívjunk meg a "nev () " kifejezéssel egy "func nev () " és "endfunc" kifejezés között levő programlistában levő részt? Hanem egy önálló autoit fáljt hívjunk meg.

Figyelt kérdés
2019. jún. 10. 01:59
 1/6 anonim ***** válasza:
2019. jún. 10. 02:16
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
100%
A többi autoit kérdésért is te vagy a felelős?
2019. jún. 10. 07:42
Hasznos számodra ez a válasz?
 3/6 tabaki ***** válasza:
Ühüm, programlista, hogyne. Gyanúm, hogy magát az AutoItet akarod egy újabb példányban elindítani egy másik szkripttel, mondjuk a ShellExecuteWait() segítségével. De a kérdés alapján lehet, hogy nem értem a szándékodat.
2019. jún. 11. 08:25
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

Az első válasz lesz az amire gondolok, természetesen a Te válaszod is cél csak most ép nem erre gondoltam. Az zavar be, hogy a minta az image_get_info.au3 file ami #include "image_get_info.au3" utasítással van meghatározva, a mappában image_get_info.au3-ként szerepel, a program azonban $aInfo = _ImageGetInfo($fotofile) utasítással hívja meg. Nem értem hogy hogy hivja meg alsóvonalakkal elválasztások nélküli névvel mikor a file nevében ott vannak ezek az első vonalak, a meghiváskor azonban alsó vonalakkal kezdődik, miközben a filenév nem.


Magában az image_get_info.au3 fileben viszont ott van a függvény, a 22.sorban, "Func _ImageGetInfo($sFile)" programsor részeként. Most akkor az #include parancs egy mappában vagy az autoit gyökérben levő file-ben levő függvényt hív meg, nem pedig magát a file-t?


;===============================================================================

;

; Description: Return JPEG, TIFF, BMP, PNG and GIF image common info:

; Size, Color Depth, Resolution etc. For JPEG files retreive

; additional information from exif tag (if exists).

; Parameter(s): File name

; Requirement(s): Autoit 3.3.0.0

; Return Value(s): On Success - string in format:

; ParamName=ParamValue

; Pairs are separated by LF char. For getting data can be used

; function _ImageGetParam($sData, $sParam), where

; $sData - string, returned by _ImageGetInfo

; $sParam - param name, for ex. Width

; On Failure sets @ERROR:

; 1 - Can't open image

; Return string become empty if no info found

; Author(s): Dmitry Yudin (Lazycat)

; Version: 2.8

; Date: 08.10.2010

;

;===============================================================================

Func _ImageGetInfo($sFile)

Local $sInfo = "", $hFile, $nClr

Local $ret = DllCall("kernel32.dll","int","CreateFile", _

"str",$sFile, _

"int",0x80000000, _

"int",0, _

"ptr",0, _

"int",3, _

"int",0x80, _

"ptr",0)


If @error OR Not $ret[0] Then

SetError(1)

Return ""

Endif

Local $hFile = $ret[0]

Local $p = _FileReadToStruct("ubyte[54]", $hFile, 0)

Local $asIdent[8] = [7, Chr(0xFF) & Chr(0xD8), "BM", Chr(0x89) & "PNG" & Chr(0x0D) & Chr(0x0A) & Chr(0x1A) & Chr(0x0A), "GIF89", "GIF87", "II", "MM"]

For $i = 1 To $asIdent[0]

If _DllStructArrayAsString($p, 1, StringLen($asIdent[$i])) = $asIdent[$i] Then

Select

Case $i = 1 ; JPEG

$sInfo = _ImageGetInfoJPG($hFile, FileGetSize($sFile))

Exitloop

Case $i = 2 ; BMP

$t = DllStructCreate("int;int;short;short;dword;dword;dword;dword", DllStructGetPtr($p, 1) + 18)

_Add($sInfo, "Width", DllStructGetData($t, 1))

_Add($sInfo, "Height", DllStructGetData($t, 2))

_Add($sInfo, "ColorDepth", DllStructGetData($t, 4))

_Add($sInfo, "XResolution", Round(DllStructGetData($t, 7)/39.37))

_Add($sInfo, "YResolution", Round(DllStructGetData($t, 8)/39.37))

_Add($sInfo, "ResolutionUnit", "Inch")

Exitloop

Case $i = 3 ; PNG

$sInfo = _ImageGetInfoPNG($hFile, FileGetSize($sFile))

Exitloop

Case ($i = 4) or ($i = 5) ; GIF

$t = DllStructCreate("short;short;ubyte", DllStructGetPtr($p, 1) + 6)

_Add($sInfo, "Width", DllStructGetData($t, 1))

_Add($sInfo, "Height", DllStructGetData($t, 2))

$nClr = DllStructGetData($t, 3)

_Add($sInfo, "ColorDepth", _IsBitSet($nClr, 0) + _IsBitSet($nClr, 1)*2 + _IsBitSet($nClr, 2)*4 + 1)

Exitloop

Case $i = 6 ; TIFF II

$sInfo = _ImageGetInfoTIFF($hFile, 0)

Exitloop

Case $i = 7 ; TIFF MM

$sInfo = _ImageGetInfoTIFF($hFile, 1)

Exitloop

EndSelect

Endif

Next

DllCall("kernel32.dll","int","CloseHandle","int", $hFile)

$p = 0

Return($sInfo)

EndFunc


;===============================================================================

; PNG Parser

;===============================================================================

Func _ImageGetInfoPNG($hFile, $nFileSize)

Local $sInfo = "", $nNextOffset = 8, $nBlockSize, $nID = 0

Local $nBPP, $nCol, $sAlpha, $nXRes, $nYRes, $sKeyword, $nKWLen

Local $pBlockID = DllStructCreate("ulong;ulong")

While $nID <> 0x49454E44 ; IEND

$pBlockID = _FileReadToStruct($pBlockID, $hFile, $nNextOffset)

$nBlockSize = _IntR(DllStructGetData($pBlockID, 1))

If $nBlockSize > $nFileSize Then Return SetError(1, 0, $sInfo)

$nID = _IntR(DllStructGetData($pBlockID, 2))

Select

Case $nID = 0x49484452 ; IHDR

$t = _FileReadToStruct("ulong;ulong;byte;byte;byte;byte;byte", $hFile, $nNextOffset + 8)

_Add($sInfo, "Width", _IntR(DllStructGetData($t, 1)))

_Add($sInfo, "Height", _IntR(DllStructGetData($t, 2)))

$nBPP = DllStructGetData($t, 3)

$nCol = DllStructGetData($t, 4)

$sAlpha = ""

If $nCol > 3 Then

$nCol = $nCol - 4

$sAlpha = " + alpha"

Endif

If $nCol < 3 Then $nBPP = ($nCol + 1) * $nBPP

_Add($sInfo, "ColorDepth", $nBPP & $sAlpha)

_Add($sInfo, "Interlace", DllStructGetData($t, 7))

Case $nID = 0x70485973 ; pHYs

$t = _FileReadToStruct("ulong;ulong;ubyte", $hFile, $nNextOffset + 8)

$nXRes = _IntR(DllStructGetData($t, 1))

$nYRes = _IntR(DllStructGetData($t, 2))

If DllStructGetData($t, 3) = 1 Then

$nXRes = Round($nXRes/39.37)

$nYRes = Round($nYRes/39.37)

Endif

_Add($sInfo, "XResolution", $nXRes)

_Add($sInfo, "YResolution", $nYRes)

_Add($sInfo, "ResolutionUnit", "Inch")

Case $nID = 0x74455874 ; tEXt

$t = _FileReadToStruct("char[80]", $hFile, $nNextOffset + 8)

$sKeyword = DllStructGetData($t, 1)

$nKWLen = StringLen($sKeyword) + 1

$t = _FileReadToStruct("char[" & $nBlockSize - $nKWLen & "]", $hFile, $nNextOffset + 8 + $nKWLen)

_Add($sInfo, $sKeyword, DllStructGetData($t, 1))

2019. jún. 11. 11:34
 5/6 A kérdező kommentje:

Case $nID = 0x74494D45 ; tIME

$t = _FileReadToStruct("ushort,ubyte,ubyte,ubyte,ubyte,ubyte", $hFile, $nNextOffset + 8)

_Add($sInfo, "DateTime", StringFormat("%4d:%02d:%02d %02d:%02d:%02d", _

DllStructGetData($t, 1), DllStructGetData($t, 2), _

DllStructGetData($t, 3), DllStructGetData($t, 4), _

DllStructGetData($t, 5), DllStructGetData($t, 6)))

EndSelect

$nNextOffset = $nNextOffset + 12 + $nBlockSize ; 12 = data size + data header + crc32 size

$t = 0

Wend

Return $sInfo

EndFunc


;===============================================================================

; JPEG Parser

;===============================================================================

Func _ImageGetInfoJPG($hFile, $nFileSize)

Local $anSize[2], $sData, $sSeg, $nPos = 2, $sInfo = ""

Local $sUnit = "Pixel", $nMarker = 0, $nComLen

Local $p = DllStructCreate("ubyte;ubyte;ushort;byte[128]")

While ($nMarker <> 0xDA) and ($nPos < $nFileSize)

$p = _FileReadToStruct($p, $hFile, $nPos)

If DllStructGetData($p, 1) = 0xFF Then ; Valid segment start

$nMarker = DllStructGetData($p, 2)

Select

Case ($nMarker = 0xC0) or ($nMarker = 0xC1) or ($nMarker = 0xC2) or _

($nMarker = 0xC3) or ($nMarker = 0xC5) or ($nMarker = 0xC6) or _

($nMarker = 0xC7) or ($nMarker = 0xCB) or ($nMarker = 0xCD) or _

($nMarker = 0xCE) or ($nMarker = 0xCF)

$t = DllStructCreate("align 1;byte;ushort;ushort", DllStructGetPtr($p, 4))

_Add($sInfo, "Width", _IntR(DllStructGetData($t, 3)))

_Add($sInfo, "Height", _IntR(DllStructGetData($t, 2)))

Case $nMarker = 0xE0 ; JFIF header

$t = DllStructCreate("byte[5];byte;byte;ubyte;ushort;ushort", DllStructGetPtr($p, 4))

$nUnit = _IntR(DllStructGetData($t, 4))

If $nUnit = 1 Then

$sUnit = "Inch"

ElseIf $nUnit = 2 Then

$sUnit = "Cm"

EndIf

_Add($sInfo, "XResolution", _IntR(DllStructGetData($t, 5)))

_Add($sInfo, "YResolution", _IntR(DllStructGetData($t, 6)))

_Add($sInfo, "ResolutionUnit", $sUnit)

Case $nMarker = 0xE1 ; EXIF segment

$sInfo = $sInfo & ParseExif($hFile, $nPos)

Case $nMarker = 0xFE ; Comment segment

$nComLen = _IntR(DllStructGetData($p, 3)) - 2

$t = _FileReadToStruct("byte[" & $nComLen & "]", $hFile, $nPos + 4)

_Add($sInfo, "Comment", _DllStructArrayAsString($t, 1, $nComLen))

$t = 0

Case Else

EndSelect

$nPos= $nPos + _IntR(DllStructGetData($p, 3)) + 2

Else

ExitLoop

Endif

Wend

$p = 0

Return($sInfo)

EndFunc


;===============================================================================

; TIFF Parser

;===============================================================================

Func _ImageGetInfoTIFF($hFile, $nByteOrder)

Local $pHdr, $nTagsOffset, $pCount, $nFieldCount, $pTag, $id

Local $anSize[2], $pos = 2, $sInfo = "", $aTag[1][2]


_AddPair($aTag, 0x0100, "Width")

_AddPair($aTag, 0x0101, "Height")

_AddPair($aTag, 0x011A, "XResolution")

_AddPair($aTag, 0x011B, "YResolution")

_AddPair($aTag, 0x0132, "DateTime")

_AddPair($aTag, 0x0131, "Software")

_AddPair($aTag, 0x8298, "Copyright")


$pHdr = _FileReadToStruct("short;short;dword", $hFile, 0)

$nTagsOffset = _IntR(DllStructGetData($pHdr, 3), $nByteOrder)

$pCount = _FileReadToStruct("ushort", $hFile, $nTagsOffset)

$nFieldCount = _IntR(DllStructGetData($pCount, 1), $nByteOrder)

$pTag = DllStructCreate("ushort;ushort;ulong;ulong")

For $i = 0 To $nFieldCount - 1

$pTag = _FileReadToStruct($pTag, $hFile, $nTagsOffset + 2 + 12 * $i)

$id = _IntR(DllStructGetData($pTag, 1), $nByteOrder)

For $j = 1 To $aTag[0][0]

If $aTag[$j][0] = $id Then

_Add($sInfo, $aTag[$j][1], _ReadTag($hFile, $pTag, 0, $nByteOrder)) ; Tiff header at 0 offset

Exitloop

Endif

Next

If $id = 0x0102 Then

If _IntR(DllStructGetData($pTag, 3), $nByteOrder) = 3 Then

$t = _FileReadToStruct("short;short;short", $hFile, _IntR(DllStructGetData($pTag, 4), $nByteOrder))

_Add($sInfo, "ColorDepth", _IntR(DllStructGetData($t, 1), $nByteOrder) + _IntR(DllStructGetData($t, 2), $nByteOrder) + _IntR(DllStructGetData($t, 3), $nByteOrder))

$t = 0

Else

_Add($sInfo, "ColorDepth", _IntR(DllStructGetData($pTag, 4), $nByteOrder))

Endif

Endif

If $id = 0x0128 Then _AddSpecial($sInfo, $id, _ReadTag($hFile, $pTag, 0, $nByteOrder))

Next

Return($sInfo)

Endfunc


;===============================================================================

; EXIF Parser

;===============================================================================

Func ParseExif($hFile, $exif_offset)

Local $nTiffHdrOffset, $pHdr, $nIFDOffset, $pCnt, $nIFDCount, $pTag, $nCnt, $id, $nEIFDCount

Local $ByteOrder = 0, $sInfo = ""

Local $nEIFDOffset, $aTag[1][2]

Local $sSpecialTags = "0112,8822,9208,9207,9209,9101,0128,A217,A403,A402,A406,A408,A409,A40A"


_AddPair($aTag, 0x0100, "ExifWidth")

_AddPair($aTag, 0x0101, "ExifHeight")

_AddPair($aTag, 0x011A, "XResolution")

_AddPair($aTag, 0x011B, "YResolution")

_AddPair($aTag, 0x0102, "Colordepth")

_AddPair($aTag, 0x0132, "DateTime")

_AddPair($aTag, 0x9003, "DateTimeOriginal")

_AddPair($aTag, 0x9004, "DateTimeDigitized")

_AddPair($aTag, 0x9102, "CompressedBitsPerPixel")

_AddPair($aTag, 0x9000, "ExifVersion")

_AddPair($aTag, 0x9204, "ExposureBiasValue")

_AddPair($aTag, 0x829A, "ExposureTime")

_AddPair($aTag, 0x829D, "FNumber")

_AddPair($aTag, 0x920A, "FocalLength")

_AddPair($aTag, 0x8827, "ISO")

_AddPair($aTag, 0x010F, "Make")

_AddPair($aTag, 0x9202, "ApertureValue")

_AddPair($aTag, 0x9205, "MaxApertureValue")

_AddPair($aTag, 0x0110, "Model")

_AddPair($aTag, 0x0131, "Software")

_AddPair($aTag, 0x010E, "ImageDescription")

_AddPair($aTag, 0x013B, "Artist")

_AddPair($aTag, 0x8298, "Copyright")

_AddPair($aTag, 0xA420, "ImageUniqueID")

_AddPair($aTag, 0x9286, "UserComments")

_AddPair($aTag, 0x9201, "ShutterSpeedValue")

_AddPair($aTag, 0x9202, "ApertureValue")

_AddPair($aTag, 0x9203, "BrightnessValue")

_AddPair($aTag, 0x9206, "SubjectDistance")

_AddPair($aTag, 0xA404, "DigitalZoomRatio")


$nTiffHdrOffset = $exif_offset + 10 ; Start of TIFF header


$pHdr = _FileReadToStruct("short;short;dword", $hFile, $nTiffHdrOffset)

If DllStructGetData($pHdr, 1) = 0x4D4D then $ByteOrder = 1

$nIFDOffset = _IntR(DllStructGetData($pHdr, 3), $ByteOrder)

$pCnt = _FileReadToStruct("ushort", $hFile, $nTiffHdrOffset + $nIFDOffset) ; Tags count

$nIFDCount = _IntR(DllStructGetData($pCnt, 1), $ByteOrder)


$pTag = DllStructCreate("ushort;ushort;ulong;ulong")

For $nCnt = 0 To $nIFDCount - 1

$pTag = _FileReadToStruct($pTag, $hFile, $nTiffHdrOffset + $nIFDOffset + 2 + $nCnt * 12)

$id = DllStructGetData($pTag, 1)

$id = _IntR($id, $ByteOrder)

For $i = 1 To $aTag[0][0]

If $aTag[$i][0] = $id Then

_Add($sInfo, $aTag[$i]

2019. jún. 11. 11:34
 6/6 anonim ***** válasza:

1. Felesleges volt a teljes könyvtárat bemásolni, szétcseszi a fórumtopik kinézetét - elég lett volna belinkelni ( [link] ) - a moderátorokat kérem törölni a felesleges forráskód-részleteket (előre is köszönöm a többi fórumozó nevében is).


2. Az #include kulcsszó (nem parancs!) ugyanarra szolgál, mint más nyelvekben - például C/C++-ban a #include, Pascalnál a uses, Python-nál az import, C#-nál a using, Javanál az import - a forráskódot különböző állományokba (könyvtárakba) lehet vele szervezni, ezáltal áttekinthetőbb lesz a kód, moduláris, újrafelhasználható elemekkel (például függvénydeklarációkkal).


3. Az alsóvonás a függvények nevében egy, az Autoit telepítőjéhez mellékelt alapértelmezett függvénykönyvtáraknál (User Definied Functions - felhasználó által definiált függvényekre) alkalmazott "kódolási konvenció" (egyfajta nem kötelezően betartandó "stílusszabály", hogy hogyan "illik" az ilyen könyvtárakat írni).

Bővebben erről hol máshol, mint az Autoit leírásában:

[link]

2019. jún. 11. 12:50
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!