AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Image conversions and capturing with GDI+
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
 
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
engunneer



Joined: 30 Aug 2005
Posts: 6560
Location: Pacific Northwest, US

PostPosted: Tue Jun 12, 2007 12:25 am    Post subject: Reply with quote

I think you need an external EXIF Reader (EXIFTool, for example)
_________________
Unless otherwise noted, all code is untested.
Common Answers: 1.(Loops, Viruses, etc.) 2. Search 3.RTFM
Back to top
View user's profile Send private message Visit poster's website
willyfoo



Joined: 03 Jun 2007
Posts: 25

PostPosted: Tue Jun 12, 2007 5:03 am    Post subject: Reply with quote

Hmm.. Exiftool.exe is 2.71MB!

Found jhead which is 107kb and looks pretty flexible as well.. will do more search into this..
_________________
http://willyfoo.com
http://livestudios.sg
Back to top
View user's profile Send private message
engunneer



Joined: 30 Aug 2005
Posts: 6560
Location: Pacific Northwest, US

PostPosted: Tue Jun 12, 2007 5:22 am    Post subject: Reply with quote

i think jhead can only read, though that is all what you need i think.
_________________
Unless otherwise noted, all code is untested.
Common Answers: 1.(Loops, Viruses, etc.) 2. Search 3.RTFM
Back to top
View user's profile Send private message Visit poster's website
PhiLho



Joined: 27 Dec 2005
Posts: 6721
Location: France (near Paris)

PostPosted: Tue Jun 12, 2007 12:47 pm    Post subject: Reply with quote

It doesn't really belong to this topic (I don't think GDI+ handles Exif) and unlike what you think, the topic has been raised some times. Did you searched the forum? Not sure there were a good answer, but yet...
_________________
vPhiLho := RegExReplace("Philippe Lhoste", "^(\w{3})\w*\s+\b(\w{3})\w*$", "$1$2")
Back to top
View user's profile Send private message Visit poster's website
Sean



Joined: 12 Feb 2007
Posts: 1281

PostPosted: Wed Jun 13, 2007 12:20 pm    Post subject: Reply with quote

PhiLho wrote:
It doesn't really belong to this topic (I don't think GDI+ handles Exif) and unlike what you think, the topic has been raised some times. Did you searched the forum? Not sure there were a good answer, but yet...

As a matter of fact, GDI+ can handle the Exif, using GdipGetPropertyItem.
There are also other related functions like GdipGetAllPropertyItems, GdipGetPropertyIdList, etc.
Although I won't go into these myself, at least for now, it may be of interest to other members.

Code:
; Exif-specific Image property ID tags
#define PropertyTagExifExposureTime  0x829A
#define PropertyTagExifFNumber       0x829D

#define PropertyTagExifExposureProg  0x8822
#define PropertyTagExifSpectralSense 0x8824
#define PropertyTagExifISOSpeed      0x8827
#define PropertyTagExifOECF          0x8828

#define PropertyTagExifVer            0x9000
#define PropertyTagExifDTOrig         0x9003 // Date & time of original
#define PropertyTagExifDTDigitized    0x9004 // Date & time of digital data generation

#define PropertyTagExifCompConfig     0x9101
#define PropertyTagExifCompBPP        0x9102

#define PropertyTagExifShutterSpeed   0x9201
#define PropertyTagExifAperture       0x9202
#define PropertyTagExifBrightness     0x9203
#define PropertyTagExifExposureBias   0x9204
#define PropertyTagExifMaxAperture    0x9205
#define PropertyTagExifSubjectDist    0x9206
#define PropertyTagExifMeteringMode   0x9207
#define PropertyTagExifLightSource    0x9208
#define PropertyTagExifFlash          0x9209
#define PropertyTagExifFocalLength    0x920A
#define PropertyTagExifMakerNote      0x927C
#define PropertyTagExifUserComment    0x9286
#define PropertyTagExifDTSubsec       0x9290  // Date & Time subseconds
#define PropertyTagExifDTOrigSS       0x9291  // Date & Time original subseconds
#define PropertyTagExifDTDigSS        0x9292  // Date & TIme digitized subseconds

#define PropertyTagExifFPXVer         0xA000
#define PropertyTagExifColorSpace     0xA001
#define PropertyTagExifPixXDim        0xA002
#define PropertyTagExifPixYDim        0xA003
#define PropertyTagExifRelatedWav     0xA004  // related sound file
#define PropertyTagExifInterop        0xA005
#define PropertyTagExifFlashEnergy    0xA20B
#define PropertyTagExifSpatialFR      0xA20C  // Spatial Frequency Response
#define PropertyTagExifFocalXRes      0xA20E  // Focal Plane X Resolution
#define PropertyTagExifFocalYRes      0xA20F  // Focal Plane Y Resolution
#define PropertyTagExifFocalResUnit   0xA210  // Focal Plane Resolution Unit
#define PropertyTagExifSubjectLoc     0xA214
#define PropertyTagExifExposureIndex  0xA215
#define PropertyTagExifSensingMethod  0xA217
#define PropertyTagExifFileSource     0xA300
#define PropertyTagExifSceneType      0xA301
#define PropertyTagExifCfaPattern     0xA302
Back to top
View user's profile Send private message
SKAN



Joined: 26 Dec 2005
Posts: 5721

PostPosted: Wed Jun 13, 2007 1:41 pm    Post subject: Reply with quote

So it is possible ?! Rolling Eyes
Back to top
View user's profile Send private message
PhiLho



Joined: 27 Dec 2005
Posts: 6721
Location: France (near Paris)

PostPosted: Wed Jun 13, 2007 2:02 pm    Post subject: Reply with quote

Ah, so that's how Win Explorer displays Exif information? Cool, I like when somebody proves I am wrong when writing something is not possible! Very Happy
_________________
vPhiLho := RegExReplace("Philippe Lhoste", "^(\w{3})\w*\s+\b(\w{3})\w*$", "$1$2")
Back to top
View user's profile Send private message Visit poster's website
SKAN



Joined: 26 Dec 2005
Posts: 5721

PostPosted: Wed Jun 13, 2007 2:13 pm    Post subject: Reply with quote

Dear PhiLho, Smile

This Word Doc provided by MSDN seems to have useful info :Supporting MetaData in Image Files through GDI+ [ 111KB ]

Please... Smile

Edit: I have converted it into HTM: http://www.autohotkey.net/~goyyah/samples/GDIplus_Metadata.htm
Back to top
View user's profile Send private message
willyfoo



Joined: 03 Jun 2007
Posts: 25

PostPosted: Wed Jun 13, 2007 3:39 pm    Post subject: Reply with quote

Geez.. I still can't get used to DllCalls..

How do I invoke

GetPropertyItem(
IN PROPID propid,
IN UINT propSize,
IN/OUT PropertyItem* buffer)

To get propid=PropertyTagOrientation

Anybody familar with dll to help here?
_________________
http://willyfoo.com
http://livestudios.sg
Back to top
View user's profile Send private message
Paulo -nli
Guest





PostPosted: Sat Jun 16, 2007 7:32 am    Post subject: Reply with quote

Hello, I am not sure if this script is 100% ok because I can't find a good source of info about gdi+.
Anyway it is a good starting point.

This script is using the "NumGet" function of the Beta version of autohotkey.exe.
You also need GDIplusWrapper.ahk
Code:

#Include GDIplusWrapper.ahk

property34665 = PropertyTagExifIFD
property34853 = PropertyTagsIFD
property254 = PropertyTagNewSubfileType
property255 = PropertyTagSubfileType
property256 = PropertyTagImageWidth
property257 = PropertyTagImageHeight
property258 = PropertyTagBitsPerSample
property259 = PropertyTagCompression
property262 = PropertyTagPhotometricInterp
property263 = PropertyTagThreshHolding
property264 = PropertyTagCellWidth
property265 = PropertyTagCellHeight
property266 = PropertyTagFillOrder
property269 = PropertyTagDocumentName
property270 = PropertyTagImageDescription
property271 = PropertyTagEquipMake
property272 = PropertyTagEquipModel
property273 = PropertyTagStripOffsets
property274 = PropertyTagOrientation
property277 = PropertyTagSamplesPerPixel
property278 = PropertyTagRowsPerStrip
property279 = PropertyTagStripBytesCount
property280 = PropertyTagMinSampleValue
property281 = PropertyTagMaxSampleValue
property282 = PropertyTagXResolution
property283 = PropertyTagYResolution
property284 = PropertyTagPlanarConfig
property285 = PropertyTagPageName
property286 = PropertyTagXPosition
property287 = PropertyTagYPosition
property288 = PropertyTagFreeOffset
property289 = PropertyTagFreeByteCounts
property290 = PropertyTagGrayResponseUnit
property291 = PropertyTagGrayResponseCurve
property292 = PropertyTagT4Option
property293 = PropertyTagT6Option
property296 = PropertyTagResolutionUnit
property297 = PropertyTagPageNumber
property301 = PropertyTagTransferFuncition
property305 = PropertyTagSoftwareUsed
property306 = PropertyTagDateTime
property315 = PropertyTagArtist
property316 = PropertyTagHostComputer
property317 = PropertyTagPredictor
property318 = PropertyTagWhitePoint
property319 = PropertyTagPrimaryChromaticities
property320 = PropertyTagColorMap
property321 = PropertyTagHalftoneHints
property322 = PropertyTagTileWidth
property323 = PropertyTagTileLength
property324 = PropertyTagTileOffset
property325 = PropertyTagTileByteCounts
property332 = PropertyTagInkSet
property333 = PropertyTagInkNames
property334 = PropertyTagNumberOfInks
property336 = PropertyTagDotRange
property337 = PropertyTagTargetPrinter
property338 = PropertyTagExtraSamples
property339 = PropertyTagSampleFormat
property340 = PropertyTagSMinSampleValue
property341 = PropertyTagSMaxSampleValue
property342 = PropertyTagTransferRange
property512 = PropertyTagJPEroc
property513 = PropertyTagJPEGInterFormat
property514 = PropertyTagJPEGInterLength
property515 = PropertyTagJPEGRestartInterval
property517 = PropertyTagJPEGLosslessPredictors
property518 = PropertyTagJPEointTransforms
property519 = PropertyTagJPEGQTables
property520 = PropertyTagJPEGDCTables
property521 = PropertyTagJPEGACTables
property529 = PropertyTagYCbCrCoefficients
property530 = PropertyTagYCbCrSubsampling
property531 = PropertyTagYCbCrPositioning
property532 = PropertyTagREFBlackWhite
property34675 = PropertyTagICCProfile
property769 = PropertyTagGamma
property770 = PropertyTagICCProfileDescriptor
property771 = PropertyTagSRGBRenderingIntent
property800 = PropertyTagImageTitle
property33432 = PropertyTagCopyright
property20481 = PropertyTagResolutionXUnit
property20482 = PropertyTagResolutionYUnit
property20483 = PropertyTagResolutionXLengthUnit
property20484 = PropertyTagResolutionYLengthUnit
property20485 = PropertyTagPrintFlags
property20486 = PropertyTagPrintFlagsVersion
property20487 = PropertyTagPrintFlagsCrop
property20488 = PropertyTagPrintFlagsBleedWidth
property20489 = PropertyTagPrintFlagsBleedWidthScale
property20490 = PropertyTagHalftoneLPI
property20491 = PropertyTagHalftoneLPIUnit
property20492 = PropertyTagHalftoneDegree
property20493 = PropertyTagHalftoneShape
property20494 = PropertyTagHalftoneMisc
property20495 = PropertyTagHalftoneScreen
property20496 = PropertyTagJPEGQuality
property20497 = PropertyTagGridSize
property20498 = PropertyTagThumbnailFormat
property20499 = PropertyTagThumbnailWidth
property20500 = PropertyTagThumbnailHeight
property20501 = PropertyTagThumbnailColorDepth
property20502 = PropertyTagThumbnailPlanes
property20503 = PropertyTagThumbnailRawBytes
property20504 = PropertyTagThumbnailSize
property20505 = PropertyTagThumbnailCompressedSize
property20506 = PropertyTagColorTransferFunction
property20507 = PropertyTagThumbnailData
property20512 = PropertyTagThumbnailImageWidth
property20513 = PropertyTagThumbnailImageHeight
property20514 = PropertyTagThumbnailBitsPerSample
property20515 = PropertyTagThumbnailCompression
property20516 = PropertyTagThumbnailPhotometricInterp
property20517 = PropertyTagThumbnailImageDescription
property20518 = PropertyTagThumbnailEquipMake
property20519 = PropertyTagThumbnailEquipModel
property20520 = PropertyTagThumbnailStripOffsets
property20521 = PropertyTagThumbnailOrientation
property20522 = PropertyTagThumbnailSamplesPerPixel
property20523 = PropertyTagThumbnailRowsPerStrip
property20524 = PropertyTagThumbnailStripBytesCount
property20525 = PropertyTagThumbnailResolutionX
property20526 = PropertyTagThumbnailResolutionY
property20527 = PropertyTagThumbnailPlanarConfig
property20528 = PropertyTagThumbnailResolutionUnit
property20529 = PropertyTagThumbnailTransferFunction
property20530 = PropertyTagThumbnailSoftwareUsed
property20531 = PropertyTagThumbnailDateTime
property20532 = PropertyTagThumbnailArtist
property20533 = PropertyTagThumbnailWhitePoint
property20534 = PropertyTagThumbnailPrimaryChromaticities
property20535 = PropertyTagThumbnailYCbCrCoefficients
property20536 = PropertyTagThumbnailYCbCrSubsampling
property20537 = PropertyTagThumbnailYCbCrPositioning
property20538 = PropertyTagThumbnailRefBlackWhite
property20539 = PropertyTagThumbnailCopyRight
property20624 = PropertyTagLuminanceTable
property20625 = PropertyTagChrominanceTable
property20736 = PropertyTagFrameDelay
property20737 = PropertyTagLoopCount
property20752 = PropertyTagPixelUnit
property20753 = PropertyTagPixelPerUnitX
property20754 = PropertyTagPixelPerUnitY
property20755 = PropertyTagPaletteHistogram
property33434 = PropertyTagExifExposureTime
property33437 = PropertyTagExifFNumber
property34850 = PropertyTagExifExposureProg
property34852 = PropertyTagExifSpectralSense
property34855 = PropertyTagExifISOSpeed
property34856 = PropertyTagExifOECF
property36864 = PropertyTagExifVer
property36867 = PropertyTagExifDTOrig
property36868 = PropertyTagExifDTDigitized
property37121 = PropertyTagExifCompConfig
property37122 = PropertyTagExifCompBPP
property37377 = PropertyTagExifShutterSpeed
property37378 = PropertyTagExifAperture
property37379 = PropertyTagExifBrightness
property37380 = PropertyTagExifExposureBias
property37381 = PropertyTagExifMaxAperture
property37382 = PropertyTagExifSubjectDist
property37383 = PropertyTagExifMeteringMode
property37384 = PropertyTagExifLightSource
property37385 = PropertyTagExifFlash
property37386 = PropertyTagExifFocalLength
property37500 = PropertyTagExifMakerNote
property37510 = PropertyTagExifUserComment
property37520 = PropertyTagExifDTSubsec
property37521 = PropertyTagExifDTOrigSS
property37522 = PropertyTagExifDTDigSS
property40960 = PropertyTagExifFPXVer
property40961 = PropertyTagExifColorSpace
property40962 = PropertyTagExifPixXDim
property40963 = PropertyTagExifPixYDim
property40964 = PropertyTagExifRelatedWav
property40965 = PropertyTagExifInterop
property41483 = PropertyTagExifFlashEnergy
property41484 = PropertyTagExifSpatialFR
property41486 = PropertyTagExifFocalXRes
property41487 = PropertyTagExifFocalYRes
property41488 = PropertyTagExifFocalResUnit
property41492 = PropertyTagExifSubjectLoc
property41493 = PropertyTagExifExposureIndex
property41495 = PropertyTagExifSensingMethod
property41728 = PropertyTagExifFileSource
property41729 = PropertyTagExifSceneType
property41730 = PropertyTagExifCfaPattern
property0 = PropertyTagGpsVer
property1 = PropertyTagGpsLatitudeRef
property3 = PropertyTagGpsLongitudeRef
property5 = PropertyTagGpsAltitudeRef
property7 = PropertyTagGpsGpsTime
property8 = PropertyTagGpsGpsSatellites
property9 = PropertyTagGpsGpsStatus
property10 = PropertyTagGpsGpsMeasureMode
property11 = PropertyTagGpsGpsDop
property12 = PropertyTagGpsSpeedRef
property14 = PropertyTagGpsTrackRef
property16 = PropertyTagGpsImgDirRef
property18 = PropertyTagGpsMapDatum
property19 = PropertyTagGpsDestLatRef
property21 = PropertyTagGpsDestLongRef
property23 = PropertyTagGpsDestBearRef
property25 = PropertyTagGpsDestDistRef

;------------------------------------------------------------------------------------------------------------------------------------
OnExit, x_CleanUp
If GDIplus_Start()
   Gosub, g_GDI_Error
If GDIplus_LoadBitmap(bitmap, "G:\Netfiles\Pics\saving\ADXHT+03.jpg")
   Gosub, g_GDI_Error
If GdipGetPropertySize(bitmap, Total_Size, Num_Of_Props)
   Gosub, g_GDI_Error
If GdipGetPropertyIdList(bitmap, Num_Of_Props, Total_Size, All_Items)
   Gosub, g_GDI_Error

Loop, %Num_Of_Props%
   Props_list .= NumGet(All_Items, (A_Index-1)*4, "UInt") "`n"

msgbox, %Props_list%

Loop, Parse, Props_list, `n
{
   If !A_LoopField
      Break
   If GdipGetPropertyItemSize(bitmap, A_LoopField, propSize)
      Gosub, g_GDI_Error
   If GdipGetPropertyItem(bitmap, A_LoopField, propSize, PropItem)
      Gosub, g_GDI_Error
   prop_id := NumGet(PropItem, 0, "UInt")
   prop_length := NumGet(PropItem, 4, "UInt")
   prop_type := NumGet(PropItem, 8, "Short")
   value =
    If prop_type in 1,7 ;7=TypeUndefined(ignored) , the only type = 1 I found is thumbnail data(ignored)
      Continue
   Else If prop_type = 2 ;TypeASCII
   {
      VarSetCapacity(value, prop_length)
      DllCall("msvcrt\sprintf",  "Str", value, "Str", "%s", "UInt", NumGet(PropItem, 12, "UInt"), "Cdecl")
   }
   Else If prop_type = 3 ;TypeShort (sometimes it is a table)
   {
      Loop, % prop_length/2
         value .= NumGet(NumGet(PropItem, 12, "UInt"), (A_Index-1)*2, "Short") (A_Index = prop_length/2 ? "" : " - ")
   }
   ;I am unsure about this one I am considering all then as "UInt"
   ;4=TypeLong  5=TypeRational(int??) 9=TypeSLONG 10=TypeSRational(??)
   Else If prop_type > 3
   {
      Loop, % prop_length/4
         value .= NumGet(NumGet(PropItem, 12, "UInt"), (A_Index-1)*4, "UInt") (A_Index = prop_length/4 ? "" : " / ")
   }
   If !prop_name := property%prop_id%
      prop_name = you must search for this prop Id "%prop_id%"
   msgbox, %prop_name%`n%prop_length%`n%prop_type%`n%value%
}

Return ;

g_GDI_Error:
SoundBeep, 900, 200
If (#GDIplus_lastError != "")
   MsgBox 16, GDIplus Test, Error in %#GDIplus_lastError%
Gosub, x_CleanUp
Return

x_CleanUp:
If bitmap
   GDIplus_DisposeImage(bitmap)
GDIplus_Stop()
SoundBeep, 300, 20
ExitApp

GdipGetPropertyIdList(bitmap, numOfProps, BufferSize, Byref AllItems)
{
   local r
   #GDIplus_lastError =
   VarSetCapacity(AllItems, BufferSize)
   r := DllCall("GDIplus.dll\GdipGetPropertyIdList"
      , "UInt", bitmap  ;Pointer to the Image object
      , "UInt", numOfProps  ;Integer that specifies the number of elements in the list array. Call the GetPropertyCount method to determine this number.
      , "UInt", &AllItems)  ;Pointer to an array that receives the property identifiers.
   If (r != 0)
   {
      #GDIplus_lastError := "GdipGetPropertyIdList (" . r . ": " . #GpStatus@%r% . ") " . ErrorLevel
   }
   Return r
}

GdipGetPropertyItem(bitmap, propId, propSize, Byref PropItemBuffer)
{
   local r
   #GDIplus_lastError =
   VarSetCapacity(PropItemBuffer, propSize)
   r := DllCall("GDIplus.dll\GdipGetPropertyItem"
      , "UInt", bitmap  ;Pointer to the Image object
      , "UInt", propId    ;Integer that identifies the property item to be retrieved.
      , "UInt", propSize  ;size(bytes), of the property item. Call the GdipGetPropertyItemSize method to determine the size.
      , "UInt", &PropItemBuffer)  ;Pointer to a PropertyItem structure that receives the property item.
   If (r != 0)
   {
      #GDIplus_lastError := "GdipGetPropertyItem (" . r . ": " . #GpStatus@%r% . ") " . ErrorLevel
   }
   Return r
}

GdipGetPropertyItemSize(bitmap, propId, Byref propSize)
{
   local r
   #GDIplus_lastError =
   r := DllCall("GDIplus.dll\GdipGetPropertyItemSize"
      , "UInt", bitmap  ;Pointer to the Image object
      , "UInt", propId   ; Integer that identifies the property item
      , "UInt*", propSize) ; Pointer to a variable that receives the size(bytes)of a property item of this Image object
   If (r != 0)
   {
      #GDIplus_lastError := "GdipGetPropertyItemSize (" . r . ": " . #GpStatus@%r% . ") " . ErrorLevel
   }
   Return r
}

GdipGetPropertySize(bitmap, Byref TotalBufferSize, Byref numOfProps)
{
   local r
   #GDIplus_lastError =
   r := DllCall("GDIplus.dll\GdipGetPropertySize"
      , "UInt", bitmap  ;Pointer to the Image object
      , "UInt*", TotalBufferSize  ;Pointer to a UINT that receives the total size, in bytes, of all the property items.
      , "UInt*", numOfProps)  ;Pointer to a variable that receives the number of property items.
   If (r != 0)
   {
      #GDIplus_lastError := "GdipGetPropertySize (" . r . ": " . #GpStatus@%r% . ") " . ErrorLevel
   }
   Return r
}

Back to top
PhiLho



Joined: 27 Dec 2005
Posts: 6721
Location: France (near Paris)

PostPosted: Mon Jun 18, 2007 11:02 am    Post subject: Reply with quote

Good job Paulo! I have a small collection of various Jpeg images from various cameras and it worked quite well, although some numbers seems to be semi-random (brightness of some billion units?)
I changed the annoying MsgBox in a loop with a string collector and final MsgBox:
Code:
   propertyList = %propertyList%`n%prop_name% (l:%prop_length%, t:%prop_type%) %value%

_________________
vPhiLho := RegExReplace("Philippe Lhoste", "^(\w{3})\w*\s+\b(\w{3})\w*$", "$1$2")
Back to top
View user's profile Send private message Visit poster's website
willyfoo



Joined: 03 Jun 2007
Posts: 25

PostPosted: Mon Jun 18, 2007 11:09 am    Post subject: Reply with quote

Sorry for this dumb question.. I did search, but probably didn't try hard enough to look for the beta version to run NumGet..

Where do it get it?
_________________
http://willyfoo.com
http://livestudios.sg
Back to top
View user's profile Send private message
Helpy
Guest





PostPosted: Mon Jun 18, 2007 11:54 am    Post subject: Reply with quote

http://www.autohotkey.com/forum/viewtopic.php?t=14560&p=127434#127434
Back to top
NoCleverName



Joined: 18 Jun 2007
Posts: 9

PostPosted: Mon Jun 18, 2007 1:01 pm    Post subject: Reply with quote

So, I PM'ed PhiLho with this question, but just to be sure I'm going to ask here as well. What are the rules on distribution/usage of this code?
Back to top
View user's profile Send private message
PhiLho



Joined: 27 Dec 2005
Posts: 6721
Location: France (near Paris)

PostPosted: Mon Jun 18, 2007 2:43 pm    Post subject: Reply with quote

Ah, I forgot to put my usual copyright notice, I added it:
Code:
/* Copyright notice: See the PhiLhoSoftLicence.txt file for details.
This file is distributed under the zlib/libpng license.
copyright (c) 2007 Philippe Lhoste / PhiLhoSoft
*/

I routinely put it in my most finished works...
Basically, it means: you can do whatever you want with this, except claiming you wrote it, and suing me if it doesn't work...
That's basically the normal polite behavior toward all scripts given here, I think, I just formulate it a bit more formally.
The license text is there: http://autohotkey.net/~PhiLho/PhiLhoSoftLicense.txt but you don't really need to include this file with the sources (if you distribute them), just leave the above copyright notice in place (as it references a well known existing license).
_________________
vPhiLho := RegExReplace("Philippe Lhoste", "^(\w{3})\w*\s+\b(\w{3})\w*$", "$1$2")
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
Page 4 of 7

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group