SnagIt automatiseren

Voorbeeldbestanden bij dit artikel:
  • SnagIt automatiseren
  • Inleiding

    SnagIt is zo één van die programma′s die zeer handig zijn als je regelmatig screenshots (schermafdrukken) moet maken. Denk maar aan presentaties geven of het doorsturen van handleidingen. Deze (betalende) software bevat vele inputmogelijkheden:

    • schermafdruk van een Venster, een bepaald gebied daarin of het hele scherm
    • vrije selectie (niet noodzakelijk een rechthoekige selectie)
    • alle afbeeldingen op een webpagina
    • tekst op een scherm capteren
    • een webpagina waarbij niet 1 scherm gekopieerd wordt, maar waarbij er gescrold wordt naar beneden/opzij. Dit betekent dat de hele pagina 1 grote afbeelding wordt. Denk ook bvb. aan Windows Verkenner met een schermafdruk van een map die een paar 100 mappen bevat (allemaal op 1 afbeelding)

    De outputmogelijkheden zijn ook legio: naar een afbeelding als bestand, de printer, PDF, Excel/Word/PowerPoint, email, FTP, en nog andere. Ook kunnen afbeeldingen zelf nog eerst bewerkt worden met allerlei grafische effecten.

    En ingebouwd in Windows…

    Wat Windows daar tegenover zet aan ingebouwde (gratis) functionaliteiten, is mager. Reeds lang kennen we PrntScrn en Alt + PrntScrn) om schermafdrukken te nemen. Die plakken we dan in Paint of Word zodat er verder mee gewerkt kan worden. Windows 7 heeft een knipprogramma (snipping tool), die je kan vinden onder Accessoires. Dit is een goede vooruitgang voor vele gebruikers die slechts af en toe een schermafdruk nodig hebben. Je kan dit echter niet vergelijken met een tool als SnagIt. Merk op dat Excel 2010 standaard toelaat om een schermafdruk van een geopend venster te plakken. Dit is wel handig! Je zou ook nog Windows API calls kunnen programmeren, maar dat is niet echt gemakkelijk.

    SnagIt + VBA = ?

    Je kan met SnagIt snel en gemakkelijk schermafdrukken maken. Maar kan dit ook aangestuurd worden vanuit VBA? En hoe pak je zoiets aan? Nu, als je kijkt bij de Referenties binnen VBE, en als SnagIt geïnstalleerd werd, dan zie je o.a. SNAGIT 1.0 Type Library. Met andere woorden, leggen we die referentie, zouden we dan het nemen van schermafdrukken kunnen automatiseren? Het antwoord is ja. De software geeft de programmeur via bibliotheken toegang tot de eigenschappen en methoden. 1 van de methoden is de Capture methode. Die instrueert de software om een afdruk te nemen van het actieve scherm op basis van de instellingen op dat moment (welk type van input, output en andere instellingen zoals het tonen van de cursor of niet).

    Eens proberen

    Bij wijze van voorbeeld heb je hier code voor een schermafdruk van het actieve venster. Leg een referentie naar SNAGIT 1.0 Type Library om de code te laten werken. De code zal een afbeelding maken met als bestandsnaam test.png (zie Filename en FileType hieronder) in de map C:\Screencaptures (zie Directory). Zorg ervoor dat die map bestaat of verander de code daartoe. Eerst wordt de map volledig leeggemaakt via het Kill commando.

    Sub Voorbeeld_1()
    ' Wim Gielis ' http://www.wimgielis.com
    ''''' ' Automating SnagIt ' 14/11/11 '''''
    On Error Resume Next Kill "C:\Screencaptures\*" On Error GoTo 0 With CreateObject("SnagIt.ImageCapture") 'properties for the Input .Input = siiWindow .InputWindowOptions.SelectionMethod = swsmActive 'properties for the Output .Output = sioFile With .OutputImageFile .FileNamingMethod = sofnmFixed .Directory = "C:\Screencaptures" .Filename = "test" .FileType = siftPNG End With .IncludeCursor = False .EnablePreviewWindow = False 'launch the capture ! .Capture End With
    End Sub

    Hoe heb ik de namen van eigenschappen en methoden kunnen achterhalen? Dit is een generieke manier van werken die je ook voor andere automatiseringsopdrachten kan aanwenden. Vooreerst moet je het programma zelf (SnagIt) goed kennen. Je moet de mogelijkheden en werkwijzen kennen, want uiteindelijk gebruik je VBA om SnagIt aan te sturen: je zegt via commando′s wat je graag zou hebben en wat je normaal manueel zou doen. Ken je de mogelijkheden en eigenschappen van het programma niet, dan zal extern aansturen ook niet lukken.

    Daarnaast is het de maker van de software die een aantal methoden en eigenschappen open stelt, beschikbaar maakt, voor toegang van buitenaf. Door de referentie te leggen (cf. supra) stel je jezelf in staat om ze aan te spreken en te gebruiken in je eigen code. Wanneer je op functietoets F2 drukt, zie je de lijst van beschikbare bibliotheken in de Object Browser. 1 daarvan is nu SNAGITLib, een library van SnagIt. Binnen die bibliotheek kan je een zoekopdracht definiëren: hieronder zie je het resultaat van het zoeken op Window (screenshot genomen met SnagIt :-)).

    In het midden selecteer ik de regel voor SnagInputImage en siiWindow: dit gaat om de constanten (zie onderaan als extra informatie) die we gebruiken om aan te geven welk type van input we willen maken. Voor de constant siiWindow (=1) is dit een Venster. siiRegion (=4) kan ook gebruikt worden, enz.

    Gebruik je object variabelen, dan zal je geholpen worden via Intellisense:

    
        Dim s As SNAGITLib.IImageCapture2
        Set s = CreateObject("SnagIt.ImageCapture")
    
    

    MySnag is hier een object variabele. Door dat woord te typen, gevolgd door een punt, ontrolt zich een lijst van beschikbare methoden, eigenschappen en events (zo die er zijn). Verder typen of de muis hanteren vereenvoudigt ons werk, leert ons de syntax en verkleint de kans op typfouten.

    Nu aan jou!

    Nu we dit weten, kunnen we bijvoorbeeld via code een heel aantal vensters na mekaar activeren (zie hier voor code), en telkens SnagIt de schermafdruk laten nemen. Of x aantal keer dezelfde special effects toepassen op een reeks van schermafdrukken. Wie SnagIt geïnstalleerd heeft moet maar eens experimenteren met de informatie die ik in dit artikel getoond heb.




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links