Manchmal bietet Visual Basic nicht die Funktion, die der Programmierer gerade benötigt. Dann können Sie von Visual Basic aus auch direkt auf die Funktionen der Windows-API zugreifen. Flirt mit dem Windows-System
Windows ist nicht nur eine grafische Benutzeroberfläche. Das Betriebssystem bietet auch eine Schnittstelle, mit deren Hilfe sich die unzähligen Windows-Funktionen nutzen lassen: die sogenannte Windows-API oder kurz Win-API. API steht dabei für "Application Programming Interface", zu deutsch etwa "Programmierschnittstelle". Sie können sich darunter eine Art Sprache vorstellen, die fest in Windows eingebaut ist und allen Arten von Anwendungen zur Verfügung steht. Erst diese API ermöglicht es überhaupt, in eigenen Programmen Elemente und Funktionen von Windows zu nutzen, zum Beispiel den typischen Dialog zum Öffnen oder Speichern von Dateien, Menüleisten, die Windows-Fenster oder die Internet-Funktionen, die das Betriebssystem bietet. Ohne Win-API müsste jeder Entwickler selbst Dateidialoge oder Fensterelemente wie Fensterbalken, Rollbalken, Schließbox etc. programmieren. Der einheitliche Look von Anwendungen wäre schnell dahin – wie damals zu DOS-Zeiten, als es noch keine einheitliche Benutzerführung gab. APIs bietet in der Regel jedes Betriebssystem, denn sie garantieren ein einheitliches Aussehen der Anwendungen. Unter Windows gibt es in allen wichtigen Programmiersprachen für das System gibt es die Möglichkeit, auf die Funktionen der Win-API zuzugreifen. So auch in Visual Basic (VB) und Visual Basic for Applications (VBA). Die API-Funktionen befinden sich in zahlreichen Bibliotheksdateien mit der Erweiterung "DLL" (Dynamic Link Library). Sie befinden sich im Windows-Systemverzeichnis. DLL-Dateien sind keine direkt ausführbaren Programme, sondern können von anderen Anwendungen bei Bedarf als Programm-Modul genutzt und dann ganz oder teilweise in den Arbeitsspeicher geladen werden. Die wichtigsten API-Bibliotheken sind ständig im Arbeitsspeicher vorhanden, damit das Betriebssystem schnell auf sie zugreifen kann und sie nicht erst von Festplatte laden muss. Das beschleunigt das Arbeitstempo eines Betriebssystems erheblich. Aber eine Reihe von Diensten wie zum Beispiel die "Windows Sockets" werden nur geladen, wenn ein Programm sie benötigt. Endet die Anwendung, werden sie wieder aus dem Hauptspeicher entfernt. Deklaration von API-Funktionen Bevor Sie eine API-Funktion nutzen können, müssen Sie Visual Basic erst darüber informieren, dass Sie die Windows-API nutzen wollen. Für diesen Zweck kennt Visual Basic die sogenannte "Declare"-Anweisung. Sie informiert den Interpreter darüber, wo die Funktion zu finden ist und wie sie benutzt werden soll. Die Anweisung benötigt die folgenden Informationen:
Declare Function GetDriveType Lib "kernel32" _ Alias "GetDriveTypeA" ( _ ByVal nDrive As String) As Long GetDriveTyp: Der Funktionsname. Wenn Sie die Funktion nutzen, müssen Sie eine Variable mit dem richtigen Datentyp definieren, um den Rückgabewert der Funktion speichern zu können. Nach der Deklaration der API-Funktion könnten Sie sie zum Beispiel so aufrufen: DriveType = GetDriveType("C:") Datentypen Windows benötigt innerhalb der Declare-Anweisung für die Argumente der Funktion ganz bestimmte Datentypen. Die folgende Tabelle gibt einen Überblick über die vier wichtigsten Datentyp-Definitionen sowie über die Äquivalente in Pascal und C/C++. Diese Definitionen gelten auch für die Rückgabewerte von API-Funktionen.
Handles, Zeiger und Null-Strings Windows benutzt numerische Werte, um bestimmte Objekte wie Fenster oder Dialogelemente zu identifizieren. Zwei Arten von numerischen Werten dieser Art gibt es: Handles und Zeiger. Ein Handle ist ein "Griff" oder "Henkel", um Fenster, Schriften oder Dateien während der Programmierung "anzufassen". Eine ganze Reihe von API-Funktionen arbeiten mit Handles. Ein Handle ist immer ein numerischer Wert des Datentyps Long. Ein Zeiger verweist auf eine bestimmte Position im Arbeitsspeicher. Dort kann sich zum Beispiel eine Zeichenkette (String) befinden. An der Position, auf die der Zeiger verweist, steht dann das erste Zeichen dieser Zeichenkette. Die Länge der Zeichenkette ist dabei unwichtig. Sie muss nicht bekannt sein. Ihr Ende wird durch ein sogenanntes Null-Zeichen markiert. Die Arbeit mit Zeigern ist in der Programmierung unter Windows sehr häufig. Visual Basic dagegen kennt keinen eigenen Datentyp für einen Zeiger. Statt dessen müssen Sie den Datentyp Long benutzen. Ein Null-Zeichen ist nicht einfach das Zeichen "0". Beim PC ist jedes Zeichen – also Buchstaben, Ziffern, Satz- und Sonderzeichen – mit einem bestimmten Zeichenwert kodiert. Das Zeichen "0" hat nicht den Wert 0, sondern 48. Mit Null-Zeichen dagegen ist ein Zeichen gemeint, das tatsächlich den Wert 0 hat. Unter Visual Basic weisen Sie zum Beispiel einer Zeichenvariablen a$ den Wert 0 folgendermaßen zu: a$ = Chr$(0) Visual Basic besitzt sogar eine eingebaute Konstante für diesen Wert, die den gleichen Zweck erfüllt. Sie können auch schreiben: a$ = vbNullChar
Zeichenketten Die API-Funktionen haben ihre ganz eigene Art, mit Zeichenketten umzugehen. Drei Dinge müssen Sie beachten: Variablen mit "ByVal" übergeben Die Größe des reservierten Speichers sLen = 30 Buffer = String$(sLen, 0) Result = TheAPIFunction(Buffer, sLen) Null-terminierte String verwenden VBStr = "Hallo Windows!" WinStr = VbStr + vbNullChar Aliasnamen für API-Funktionen In einigen Fällen wird es nötig sein, API-Funktionen umzubenennen, so dass Sie sie mit einem anderen Namen aufrufen können. Das Technik ist in verschiedenen Situationen hilfreich:
Zum Hintergrund: Sehr viele Funktionen, die Zeichenketten verarbeiten oder zurückgeben, sind in den beiden Varianten FunctionA und FunctionW vorhanden. Die A-Variante einer Funktion nutzt den "klassischen" ANSI-Zeichensatz (wie unter Windows 3.x), bei dem ein Zeichen in einem Byte kodiert wird. Die W-Varianten nutzen dagegen den Unicode-Zeichensatz, bei dem ein Zeichen in zwei Bytes (einem "Word") kodiert wird. Die Unicode-Unterstützung ist in Windows 95 zwar nicht vollständig verwirklicht, die API-Funktionen sind jedoch bereits dafür vorbereitet. Um eine API-Funktion mit einem Aliasnamen auszustatten, müssen Sie folgendes Deklarations-Schema benutzen: Declare Function NeuerName Lib "NameDerDLL" _ Alias "OriginalName" ( _ Argumentliste) Übergabe der Argumente an eine Windows-API-Funktion VB und VBA übergeben Argumente in aller Regel als Referenzparameter. Das heißt: Sie können die Variable einfach mit dem Namen und dem Datentyp deklarieren. Bei Windows API-Funktionen ist jedoch oft eine Übergabe als Wertparameter notwendig. Dies gilt vor allem für API-Funktionen, die Zeiger und Zeichenketten als Argument enthalten. Hier müssen Sie die Argumente mit dem Schlüsselwort ByVal kennzeichnen. Ein Beispiel dafür ist die Funktion lstrcat. Mit ihr können Sie eine Zeichenkette an eine andere anhängen. Wenn Sie die Funktion wie folgt deklarieren Declare Function lstrcat Lib "kernel32" _ Alias "lstrcatA" ( _ lpString1 As String, _ lpString2 As String) As Long erzeugt das entsprechende VB/VBA-Programm einen Laufzeitfehler. Richtig ist vielmehr die folgende Deklaration: Declare Function lstrcat Lib "kernel32" _ Alias "lstrcatA" ( _ ByVal lpString1 As String, _ ByVal lpString2 As String) As Long Mit diesem Know-how sollten Sie gerüstet sein, die Funktionen der Win-API zu nutzen. Damit stehen Ihnen weit mehr Windowsfunktionen zur Verfügung, als bei reinem Visual Basic. Professionelle Anwendungen sind somit auch mit diesem Entwicklungssystem kein Problem mehr. Tools und Informationen zum Thema im Internet Es ist nicht ganz einfach, eine korrekte API-Deklaration aus der Dokumentation des Windows-Entwicklungspakets aufzustellen. Aus diesem Grunde bietet Microsoft in der Developer-Version von Office 97/2000 mit der Datei "winapi.txt" eine Übersicht mit den Deklarationen aller wichtigen Konstanten, Strukturen und Funktionen an. Sie ist auch im Internet als Download in Form eines selbstentpackenden Archivs erhältlich. Eine ausführliche (englischsprachige) Referenz der Win-API mit Deklarationen für VB und VBA stellt der "Windows API Guide" zur Verfügung. Hilfreich ist auch die kostenlose Software "Win32 API Tutor for Visual Basic". Das Programm ist beispielsweise beim Shareware-Angebot Winfiles.com in der Rubrik "Windows 95/98 Visual Basic Tools" erhältlich. Dieser Workshop wurde bereits 24.554 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||||||||||||||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |