Registreren   Inloggen   Zoeken:  Nu zoeken
donderdag 24 juli 2008
     
Visual Basic Magazine 2003-12 | december 2003

Visual Basic 6 & API's - Een andere aanpak

In de afgelopen jaren heb ik met grote regelmaat aandacht besteedt aan het fenomeen API’s. API’s zijn feitelijk niet meer dan functies in een DLL, die u vanuit uw Visual Basic applicatie kunt benaderen. Hierdoor komen geavanceerde mogelijkheden binnen het handbereik van iedere Visual Basic programmeur. Elke API of functie dient u in uw applicatie te declareren en u moet van te voren exact weten welke parameters de functie verwacht en welk object of variabele eventueel wordt teruggeven. Hierdoor worden API’s vaak als lastig ervaren, ook omdat men vaak te maken heeft met datatypen uit C++ en de beschrijvingen vaak op deze taal gebaseerd zijn. Toch kan het eenvoudiger…

Een DLL (Dynamic Link Library) kan ook een COM-object zijn. Hierdoor kan men binnen Visual Basic een referentie maken naar deze DLL en de functies die in die DLL zitten met behulp van objecten met eventuele properties en methods benaderen. Hierdoor wordt het werken ermee een stuk eenvoudiger omdat u dan ook hulp krijgt van uw Visual Basic omgeving in de vorm van Intellisense.

Afbeelding 1

Afbeelding 1. COM-object met intellisense

Een voorwaarde is dat het een COM-object betreft en dat u binnen uw applicatie een referentie naar dit object of naar de desbetreffende DLL maakt. In dit artikel laat ik u kennis maken met sommige objecten binnen de SHELL32.DLL. De objecten die zich in deze DLL bevinden zijn niet direct zichtbaar wanneer u uw Refrerences scherm toont. U dient daarom deze DLL handmatig toe te voegen door gebruik te maken van de ‘Browse…’ knop in het ‘References’scherm. U selecteert vervolgens SHELL32.DLL; deze bevindt zich doorgaans in c:\windows\system32. Nadat u deze referentie hebt toegevoegd ziet u ‘Microsoft Shell Controls And Automation’ in de lijst staan (zie figuur 1).  Deze DLL herbergt een groot aantal objecten, waarmee u ontzettend veel mogelijkheden heeft. Laten we dit object eens nader bestuderen…

Afbeelding 2

Afbeelding 2. Een referentie toevoegen

Aan de slag
Om een object te kunnen gebruiken dienen we het te dimensioneren, instantiëren en na gebruik netjes op te ruimen.  Plaats de volgende code binnen het form waarbinnen u de objecten wilt aanroepen.


 Private mobjShell As Shell32.Shell

 Private Sub Form_Initialize()

    Set mobjShell = New Shell32.Shell

 End Sub

 

 Private Sub Form_Terminate()

    Set mobjShell = Nothing

 End Sub

Codevoorbeeld 1.

U ziet dat er in dit geval een object wordt gemaakt van het type ‘Shell32.Shell’.  Dit object beschikt over een aantal zeer handige functies, bijvoorbeeld de  functie ControlPanelItem. Hiermee toont u met een regel code een item uit het configuratiescherm. Wanneer u bijvoorbeeld de ‘Telefoon- en modemopties’ wilt tonen heeft u alleen de volgende code nodig:


 mobjShell.ControlPanelItem "telephon.cpl"
 
Codevoorbeeld 2.

Als parameter geeft u de bestandsnaam aan van het .cpl bestand dat zich in de system32 map bevindt. Zie tabel 1 voor een overzicht van mogelijke parameters. Afhankelijk van het besturingssysteem en de eventueel geïnstalleerde software kunnen er op uw werkstation misschien meerdere mogelijkheden zijn.

access.cpl

Toegankelijkheidsopties

appwiz.cpl

Software

desk.cpl

Beeldscherm

hdwwiz.cpl

Hardware

inetcpl.cpl

Internet-opties

intl.cpl

Landinstellingen

joy.cpl

Spelbesturingen

main.cpl

Muis

mmsys.cpl

Geluid en audioappraten

ncpa.cpl

Netwerkverbindingen

nusrmgr.cpl

Gebruikersaccounts

odbccp32.cpl

ODBC-Gegevensbronbeheer

powercfg.cpl

Energiebeheer

sysdm.cpl

Systeem

telephon.cpl

Telefoon- en modem opties

timedate.cpl

Datum en tijd


Afbeelding 3

Afbeelding 3. Schermen behorende bij twee .cpl bestanden

Naast de ControlPanelItem functie kent het Shell object, zoals reeds eerder geschreven, veel meer functies en methoden.  Hieronder treft u een opsomming aan van de meest in het oog springende…

Explore
Met de functie kunt u een bepaalde map verkennen. U dient het volledige pad of een constante uit de reeks ShellSpecialFolderConstants mee te geven. U roept de functie alsvolgt aan:


 'Toon map 'Geschiedenis'
 
mobjShell.Explore esfHistory

  'Toon map 'Projecten' op D:

  mobjShell.Explore "d:\Projecten\"
 

Codevoorbeeld 3.

FileRun, FindComputer en FindFiles
Met behulp van de methods toont u achtereenvolgens het ‘Uitvoeren’ scherm, het ‘Zoeken Computer’ scherm en het ‘Bestand Zoeken’ scherm. Dezelfde functionaliteit die u kunt verkrijgen door bijvoorbeeld op ‘Start’ te klikken en vervolgens op ‘Uitvoeren’


  'Toon 'Computer Zoeken' scherm
 
mobjShell.FindComputer   

Codevoorbeeld 4. 

SetTime
Het dialoogkader ‘Eigenschappen voor Datum en Tijd’ kunt u tonen door het aanroepen van de SetTime method. Wederom is één regel code voldoende:


  'Toon 'Eigenschappen voor Datum/Tijd'
   mo
bjShell.SetTime   

Codevoorbeeld 5.

MinimizeAll
Ik bracht voor een maand geleden een collega helemaal in vervoering toen ik hem wees op de mogelijkheid om, met één handeling, alle schermen die binnen Windows open zijn te minimaliseren. Hierdoor hebt u direct weer een leeg bureaublad, waardoor eventuele snelkoppelingen die zich op dat bureaublad bevinden weer toegankelijk worden. Deze functionaliteit bevindt zich, volgens mij, op systemen vanaf Windows 98 (Het knopje ‘Bureaublad weergeven’ direct naast uw Startmenu). U kunt dit ook vanuit uw eigen applicatie doen met behulp van de MinimizeAll functie.


  'Minimaliseer alle open programma’s
 
mobjShell.MinimizeAll

Codevoorbeeld 6.

BrowseForFolder
Om de method BrowseForFolder succescol te gebruiken moeten we iets meer code typen. In het voorbeeld dat ik nu ga uitwerken dient u ook gebruik te maken van het FolderItems- en FolderItem-object. Met behulp van de objecten kunt u ook eenvoudig door alle items in een map of directory lopen en per item een aantal eigenschappen opvragen en instellen.  Bekijkt u eens de volgende code:


  Dim objFolder As Shell32.Folder
 
Dim objFolderItems As Shell32.FolderItems
 
Dim objFolderItem As Shell32.FolderItem
 
Dim strFolderItems As String   

  'Vraag de gebruiker om een map te selecteren

  Set objFolder = mobjhell.BrowseForFolder(Me.hWnd, _

                                        "Selecteer een map", _

                                         ebfDontGoBelowDomain,  _

                                        "C:\Program Files")

   

  'Alleen wat doen als we ook echt een map hebben

  If Not objFolder Is Nothing Then

    'Bepaal items in map

    Set objFolderItems = objFolder.Items

      

    'Doorloop alle items in de collectie

    For Each objFolderItem In objFolderItems

      With objFolderItem

        'Maak een string met folderitem info

        strFolderItems = strFolderItems & .Path & _

                              " - " & .Size & " - " & _

                             .IsFolder & vbCrLf

      End With

    Next

  End If

   

  'Toon Text

  txtBrowsForFolder.Text = strFolderItems

   

  'Ruim objectenn op

  Set objFolder = Nothing

  Set objFolderItem = Nothing

  Set objFolderItems = Nothing

 

Codevoorbeeld 7.

 We vragen de gebruiker om een map te selecteren. Daarna bepalen we of de gebruiker daadwerkelijk ‘iets’ heeft geselecteerd en doorlopen vervolgens alle items in die map. Dit kunnen subdirectories zijn, maar ook bestanden. Van die items bepalen we vervolgens drie eigenschappen: .Path, .Size en .IsFolder.
Om u een indruk te geven van de properties van zo’n Folder-object heb ik ze voor u op een rijtje gezet:

  • .Application
  • .GetFolder
  • .GetLink
  • .IsBrowsable
  • .IsFileSystem
  • .IsFolder
  • .ModifyDate
  • .Name
  • .Parent
  • .Size
  • .Type

De meeste eigenschappen spreken waarschijnlijk voor zich. De .BrowsForFolder functie verwacht een viertal parameters. Voor een complete beschrijving van de functie verwijs ik u naar de website van Microsoft. Een gedetailleerde beschrijving hoe u die informatie kan vinden, treft u later in dit artikel aan. Wat u hopelijk duidelijk is geworden, dat het programmeren van de Shell redelijk eenvoudig is.

Afbeelding 4


Afbeelding 4. Selecteer een map en toon folderiteminformatie

Deze materie is door Microsoft uitstekend gedocumenteerd. Bezoek de website: http://msdn.microsoft.com

Klik in het linker menu achtereenvolgens op:

  • User Interface Design and Development
  • Windows Shell
  • Shell Reference
  • Shell Objects for Scripting and Microsoft Visual Basic
  • Shell

Onder het hoofdstuk ‘Shell Objects for Scripting and Microsoft Visual Basic’ treft u uitgebreide beschrijvingen aan van een nog groter aantal objecten. Hierbij kunt u denken aan DiskQuotaControl of het Shell-LinkObject. Daarnaast valt op te merken dat voor de sommige functies de minimum versie van shell32.dll varieert. De hier besproken functionaliteit zou moe-ten werken vanaf versie 4.71; wat inhoudt dat minimaal Windows 95 met Internet Explorer 4 geïnstalleerd moet zijn. Ik ben echter ook functies tegengekomen die minimaal 5.0 of zelfs 6.0 (Windows XP) eisen.

Advertenties
Leer ook Visual Basic!

Visual Basic 2005 - de Basis | André Obelink

 


Microsoft Certified Solution Developer

Microsoft Certified Professional

Microsoft Most Valuable Professional

VP Speakers Bureau - INETA Europe

Brainbench Certified Master Visual Basic 6.0 Programmer

Gebruiksovereenkomst   Privacybeleid   Copyright 2005 André Obelink