Artikel pedia
| Home | Kontakt | Artikel einreichen | Oberseite 50 artikel | Oberseite 50 autors
 
 


Artikel kategorien
Letztes fugte hinzu
    Ms-access

   Instrumentation + schnittstellen

   Pc tuning - volle kraft voraus für ihr system

   Informatorische grundlagen

   Javascript

   Interne sortieralgorithmen - der kern der sache

   Plotter und sonstige drucker

   Frage 20 (rössl priska)

   Internet - programmierung

   Monitore

   Semesterarbeit und spezialgebiet für informatik

   Erörterungs zum thema

   Inhaltsverzeichnis

   Einführung in die entwicklung ganzheitlicher informationssysteme:

   Titel dokument
alle kategorien

  1

Inhaltsverzeichnis:INHALTSVERZEICHNIS: 1 EINLEITUNG 3 GRUNDLEGENDES 5 Was heißt Programmieren: 5 Was ist Visual Basic: 5 INNERHALB VON FENSTERN 7 Was ist ein Fenster: 7 Wann ist ein Fenster kein Fenster 7 System – Objekte: 7 PROGRAMMERSTELLUNG MIT VISUAL BASIC 8 Interpreter und Compiler: 8 DDE UND OLE 9 Der Dynamische Datenaustausch: 9 Wieso benötigt man den dynamischen Datenaustausch: 9 Begriffserläuterungen: 9 Der dynamische Datenaustausch zur Entwicklungszeit: 10 Der dynamische Datenaustausch zur Laufzeit: 11 HANDLES 11 DIE WINDOWS – API - ROUTINEN 12 Was bedeutet API: 12 Wozu benötigt man API – Funktionen: 12 Allgemeine Informationen: 12 Sicherheitsaspekte beim Gebrauch von API – Routinen: 12 Die Deklaration von DLL – Routinen: 12 Wert oder Referenzübergabe von Argumenten: 13 Konvertieren von C – Deklarationen nach Visual Basic: 14 Zeichenkettenübergabe: 14 Ungültige Namen: 15 Übergeben von Zeichenfolgen: 15 16/32 bit – Anwendungen: 16 Bedingte Kompilierung: 17 GESCHWINDIGKEIT VS. SICHERHEIT BEI DER NUTZUNG VON API – ROUTINEN – ZUSAMMENFASSUNG 18 Vergleich: 18 Visual Basic Code: 18 Win32 API Code: 18 Custom – Controls (Benutzerdefinierte Steuerelemente) und OLE – Server: 19 BEISPIELPROGRAMM: COMPUTER INFORMATIONEN: PROGRAMMIERT VON THOMAS LINDER – 8C - 1998 20 Über dieses Programm: 20 Information bezüglich Sourcecode: 20 Der Sourcecode: 21 Generelle Informationen: 21 Die Hauptform: 21 Die Form ProzInfo: 21 Die Form OSInfo: 22 Die Form RamInfo: 23 Die Form SysInfo: 24 Die Form SmallDriveDir 24 Die Form GenInfo: 24 Die Form DiffAPI: 27 Die Form LWInfo: 29 Das Modul Modul1.bas 32 LITERATURVERZEICHNIS: 33 PROTOKOLL 34  EinleitungWindows ist das Zauberwort der neunziger Jahre. Visual Basic ist der Schlüssel zu Windows, denn Visual Basic ermöglicht das Erstellen von richtigen Programmen ohne spezielle Vorkenntnisse. Kann man Basic, so beherrscht man Windows. Auf diese Kurzformel läßt sich das Geheimnis von Visual Basic bringen.

Visual Basic ist die erste speziell für die Windows – Programmierung konzipierte Programmier- bzw. Hochsprache. Visual Basic ist in mehreren Beziehungen revolutionär. Früher mußte man nicht nur gute Kenntnisse in C und Windows selbst haben, reichen heute Grundkenntnisse in Basic, um in kürzester Zeit funktionsfähige Windows – Programme herzustellen. Visual Basic kombiniert die Einfachheit der Programmiersprache mit einem sehr leistungsfähigen und komfortablen Entwicklungssystem. Visual Basic ist sehr erweiterbar.

Über den Aufruf von sogenannten Bibliotheksfunktionen (siehe Kapitel: API – Routinen) bzw. über Steuerelemente können die Möglichkeiten der Sprache sehr erweitert werden.   Visual Basic erlaubt das Erstellen von komplexen Benutzeroberflächen in kürzester Zeit. Visual Basic Programme unterscheiden sich äußerlich nicht von kommerziellen Programmen. Visual Basic ist allerdings nicht die universelle Programmiersprache für Windows. Es ist vielmehr eine Sprache, die viele Vorteile, aber auch einige Mängel aufweist.

Der wohl wichtigste Vorteil von Visual Basic ist, daß grundlegende Basic – Kenntnisse ausreichen, um voll funktionsfähige Programme entwickeln zu können.   Auch das zur Zeit recht populäre Schlagwort “objektorientiert” wir des öfteren in Verbindung mit Visual Basic gebracht. Visual Basic behandelt jedes Kontrollelement in einem Applikationsfenster als ein Objekt, das eine bestimmte Anzahl von Eigenschaften besitzt. Dazu gehören die Eigenschaften, die das Aussehen bestimmten genauso wie die Möglichkeiten, auf verschiedene Situationen (Mausklick, Tastendruck, ...

) reagieren zu können.   Manch einer kann dem Ganzen nicht so recht trauen. Die Einfachheit, die Effizienz usw. Allerdings legt Visual Basic dem Programmierer etliche Beschränkungen auf. Als Beispiel möchte ich hier große Datenmengen nehmen. Visual Basic richtet sich aber nicht nach der professionellen Programmierung (sie ist zwar mit etwas Beihilfe von C/C++ o.

ä. möglich), sondern eher nach einfacheren Programmen, in denen weder sehr komplexe Datenstrukturen vorkommen, noch die Ausführungsgeschwindigkeit ein Problem darstellt).   Visual Basic kann durchaus mit “Hypercard” (Apple Macintosh) oder mit dem “Interface - Builder” (NeXT – Computer) verglichen werden. So wie diese Programme das Programmierkonzept von den genannten Rechnern verändert haben, wird auch Visual Basic die Programmierart verändern: Einfach und trotzdem leistungsfähig. Man wird nie C/C++ innerhalb von Visual Basic überbieten können, da dieses mehr auf Systemebene arbeitet. Trotzdem ist Visual Basic gerade für den Gelegenheits – Programmierer wie z.


B.: mich ideal, da es doch viele Möglichkeiten besitzt und (im Verglich zu “stärkeren” Programmiersprachen wesentlich billiger ist. Dies sind wohl auch die Möglichkeiten, warum Visual Basic zum Thema meiner Fachbereichsarbeit geworden ist.   Unterteilung: Im ersten Teil befindet sich der theoretische Teil, der die Voraussetzungen zur API Programmierung darstellt. Der zweite Teil ist ein Programm zur API – Programmierung. Im Anhang befindet sich ein Glossar   Auf der beiliegenden CD befindet sich sowohl das Programm als auch die gesamte Fachbereichsarbeit inkl.

aller Bilder und Vorgaben   Bedanken möchte ich mich noch bei Herr Prof. Walter Rigger für die Betreuung meiner Fachbereichsarbeit. GrundlegendesWas heißt Programmieren: Programmieren bedeutet, dem Computer Anweisungen zu geben, die dieser auszuführen hat. Da es sich bei einem Computer, genauer gesagt bei einem Prozessor, der die eigentliche Programmausführung übernimmt, um einen elektronischen Baustein handelt, gilt es ein grundsätzliches Kommunikationsproblem zu überwinden. Dieses Kommunikationsproblem besteht darin, daß der Prozessor nur Befehle und Daten in binärer Form, das heißt in Form von Dualzahlen versteht. Ein typische Befehl an den Prozessor könnte daher folgendes Aussehen haben: 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 Da dieser Befehl direkt vom Prozessor ausgeführt werden kann, wird er als Maschinenbefehl bezeichnet.

Alle Maschinenbefehle eines Prozessors werden unter dem Begriff Befehlssatz zusammengefaßt. Die Gesamtheit aller Befehle heißt: Maschinensprache. Eine einzelne Ziffer einer Dualzahl wird übrigens als Bit bezeichnet. Ein Bit kann nur zwei Zustände annehmen (0 « 1, falsch « wahr, aus « ein) und ist damit die denkbar kleinste Informationseinheit. Die Tatsache, daß jede der beiden abgebildeten Dualzahlen genau 8 Bits umfaßt, ist kein Zufall, denn in der Informationsverarbeitung werden 8 Bits aus praktischen Erwägungen zu einem Byte zusammengefaßt. Auch ein Byte ist eine sehr kleine Einheit, man findet daher in der Praxis die Einheiten Kbyte (1 Kbyte = 1024 Bytes), Mbyte (1Mbyte = 1024 * 1024 Byte = 1024 Kbyte) oder auch Gbyte (1 Gbyte = 1024 * 1024 * 1024 Byte = 1024 Mbyte).

  Verständlicherweise ist die Eingabe von Befehlen und Daten in Form von Dualzahlen sehr umständlich. Schon sehr bald nach Einführung der ersten Rechenmaschine in den Vierziger Jahren, mußte ein Kompromiß gefunden werden. Dieser Kompromiß heißt Programmiersprache. Obwohl die erste Programmiersprache, es war FORTRAN, bereits Anfang der Fünfziger Jahre entwickelt wurde, hat sich an diesem Prinzip grundsätzlich nichts geändert. Inzwischen gibt es für den PC mehrere Dutzend Programmiersprachen. Sie werden auch als Hochsprachen bezeichnet, um sie von der Maschinensprache abzugrenzen.

Alle Hochsprachen haben eines gemeinsam: sie übersetzen die Befehle eines Programms in die “Muttersprache” des Prozessors, die Maschinensprache. Auch für die Windows – Programmierung hat dieser Ablauf Gültigkeit. Allerdings sind Windows – Programme teilweise so komplex, daß der Zusammenhang zwischen den Befehlen der Programmiersprache und den übersetzten Maschinenbefehlen in der Praxis keine Bedeutung hat. Die meisten Windows – Programme werden in der Sprache C erstellt. Doch auch in Visual Basic lassen sich sehr leistungsfähige Programme entwickeln. Was ist Visual Basic: Visual Basic ist eine einfach zu erlernende Programmiersprache, die es dem Anwender bzw.

dem Programmierer ermöglicht, eigene Programme für Microsoft Windows™ zu erstellen. Visual Basic benutzt hierzu eine grafische Oberfläche, die aus verschiedenen Teilbereichen zusammengesetzt ist. Mehr dazu später. Sie wurde von Microsoft entwickelt und mittlerweile gibt es schon die Versionsnummer 5.0. In meinen Beispielen arbeite ich mit Version 4.

0, da Version 5.0 noch sehr neu ist und noch ein paar Mängel aufweist. Außerdem ist es günstig, die Version 4.0 zu verwenden, da es von dieser Version sowohl eine 16bit (Windows 3.x) als auch eine 32bit (Windows ´95/NT) Version gibt. Da Visual Basic einfach zu erlernen ist, hat es auch seine Grenzen, die allerdings für den normalen Programmierer, wie zum Beispiel für mich in weiter Ferne liegen.

Die Befehle von Visual Basic sind nicht Case – Sensitive, d.h. es ist egal, ob bestimmte Befehle groß oder klein geschrieben werden. Außerdem werden Befehle, die Visual Basic erkennt, immer mit blau geschrieben, um eine bessere Übersicht zu gewinnen. Ein weiterer Vorteil von Visual Basic ist, daß es den Zugriff auf die API’s erlaubt. Diese werden weiter hinten noch erläutert.

Ein weiterer Nachteil von Visual Basic ist, daß die kompilierte (fertige) Anwendung im Gegensatz zu komplexeren Programmiersprachen wie z.B.: C/C++ oder Delphi (siehe Vergleiche) relativ langsam ist. Da sich dies allerdings erst bei komplexeren Programmen bemerkbar macht und da bisher erst wenige meiner Programme über die Größe eines Megabytes gingen, ist dieser Aspekt für mich uninteressant.   Ein Grund dafür, warum Visual Basic so bekannt geworden ist, liegt sicher im Preis. Im Gegensatz zu Visual Basic kosten “richtige” Programmiersprache wie z.

B.: C/C++ oder Java ein Vielfaches von Visual Basic. Vielleicht ist Visual Basic nicht gerade die komplexeste Programmiersprache, dafür ist sie aber ebenso einfach zu erlernen.   Diese FBA soll einen kleinen Überblick über die Möglichkeiten von Visual Basic geben und zeigen, was mit einfachsten Mitteln alles möglich ist. Innerhalb von FensternZu Beginn muß gesagt werden, daß sich Visual Basic und Windows sehr gleichen. Visual Basic bietet ein sehr einfach zu benutzendes Interface (eine einfach zu benutzende Oberfläche).

Ein Fenster hat eine große Menge an Eigenschaften, die über das Eigenschaftsfenster einfach verändert werden können. Das API – Interface ist um einiges komplexer.Was ist ein Fenster:Fenster können sowohl Formen, einzelne graphische Teile der Windows - Oberfläche, Bildlaufleisten als auch Icons sein. Sogar der Windows – Hintergrund ist ein Fenster. Wann ist ein Fenster kein Fenster Mit der Version 2.0 von Visual Basic kamen neue Arten von Steuerelementen, die Graphische Steuerelemente genannt wurden.

Diese haben etwas gemeinsam: Sie sind keine Fenster, obwohl sie vielleicht so aussehen oder sich so verhalten. Ein graphisches Steuerelement ist ein innerhalb von Visual Basic definiertes Element. Graphische Steuerelemente unterstützen nicht viele der Möglichkeiten eines Fensters. Als Beispiel möchte ich das Label – Steuerelement (ein einzelnes Feld, in dem Text angezeigt werden kann) aufführen. Es beschreibt nur einen einfachen Textblock und, wie viele andere dieser Steuerelemente auch, kann es zum Beispiel den Fokus nicht erhalten (d.h.

es kann nicht aktiviert werden, es hat immer den gleichen Status; besitzt ein Textfeld den Fokus, so können in dieses Daten eingegeben werden) und somit auch keine Tastatureingabe erkennen und auswerten (im Gegensatz zum Text – Control). Der eigentliche Schwachpunkt aber ist, daß sie keinen Window – Handle (eine Zahl, die ein Fenster eindeutig identifiziert) besitzen. Sie können daher auch nicht von API – Funktionen angesprochen werden, die einen solchen Handle benötigen.System – Objekte: Die Systemobjekte in Visual Basic (Zwischenablage -, Screen -, und Drucker – Objekte) haben ebenfalls keine Ansprechmöglichkeit betrachtet man sie von der Fenster – Seite (sie sind ebenfalls keine Fenster). Diese Systemressourcen werden direkt von Windows – APIs angesprochen.       Programmerstellung mit Visual BasicInterpreter und Compiler:Jeder Computer bzw.

Prozessor besitzt einen Sprach- bzw. Befehlsvorrat, der ihn befähigt bestimmte Aufgaben wie etwa die Addition zweier Zahlen auszuführen. Um die Befehle der Hochsprache (ab hier wird sie nur noch Programmiersprache) genannt in Befehle des Prozessors zu verwandeln, bedarf es eines Dolmetschers, der die Befehle “übersetzt”. Der Übersetzungsvorgang kann vor der eigentlichen Programmausführung geschehen und wird in der Informatik als kompilieren (engl. To compile) bezeichnet. Das Programm, das diese Arbeit erledigt, heißt Compiler.

Im Gegensatz dazu kann das Programm natürlich auch erst während der Programmlaufzeit in die dem Computer verständliche Sprache übersetzt werden. In diesem Fall spricht man von einem Interpreter. Während Sprachen wie PASCAL oder auch C reine Compiler – Sprachen darstellen, also vor dem eigentlichem Programmstart erst einmal kompiliert werden müssen, ist Visual Basic eine Interpreter – Sprache, d.h. das Programm wird – ähnlich einem Simultan – Dolmetscher im Fernsehen – Stück für Stück unmittelbar zur Laufzeit übersetzt. Dieses Verfahren erspart zwar dem Programmierer die Wartezeit, bis sein Quell – Code (Programm) in die Maschinensprache des Computers umgesetzt wurde, hat dafür aber einen gewaltigen Nachteil: das Umsetzen des Programms in Maschinensprache beansprucht Rechnerleistung und somit Zeit, die zur Verlangsamung der Programmausführung führt (oft bis zu einem Faktor 10).

Aus diesen Gründen hat Microsoft seinem Schützling Visual Basic auch einen Compiler mit auf den Weg gegeben, der dafür sorgt, daß die mit dieser Sprache erstellten Windows – Applikationen auch mit maximaler Geschwindigkeit ausgeführt werden können. Der Compiler setzt dabei alle innerhalb der Projektverwaltung aufgelisteten Formulare und Module zu einem direkt ausführbaren Programm um. Nur die Dateiendung wird von *.vbp in *.exe umbenannt, die ja bekanntlich ein direkt ausführbares Programm kennzeichnet. Von nun an kann das Programm direkt von der Windows – Oberfläche heraus gestartet werden.

Visual Basic selbst (hier in Funktion des Interpreter – Programmes) wird nicht mehr zur Programmausführung benötigt. Lediglich eine Datei namens VB40016.DLL für 16-bit Programme bzw. VB40032.DLL für 32-bit Programme, die man übrigens – ohne daß Lizenzgebühren anfallen – mit eigenen Programmen weitergeben darf, muß während der Programmausführung vorhanden sein.   Diese Datei, eine dynamische Link – Library (.

DLL), enthält wichtige Programmfunktionen, die zwar zur Programmlaufzeit benötigt werden, jedoch nicht direkt in die ausführbare EXE – Datei aufgenommen wurden. Der Vorteil einer solchen DLL besteht darin, daß mehrere (mit Visual Basic kompilierten) Programme auf eine DLL zurückgreifen können. Sie muß also nur einmal auf der Festplatte (im Speicher des Computers) vorhanden sein. Würde man die in der DLL enthaltenen Funktionen in jede mit Visual Basic erstellte Applikation direkt aufnehmen, würden sich deren Umfänge erheblich vergrößern. DDE und OLEDer Dynamische Datenaustausch:Man versteht unter dynamischem Datenaustausch das Kommunizieren zweier Windows – Anwendungen, die gegenseitig Windows – Daten austauschen. Diese Möglichkeit wird ebenfalls von Visual Basic – Anwendungen unterstützt.

  Es gibt zwei Möglichkeiten, den dynamischen Datenaustausch zu realisieren: Eine starre Verbindung, die während der Entwicklungszeit hergestellt wird und eine flexible, die erst während der Laufzeit entsteht. Auch über die Zwischenablage lassen sich Daten zwischen einzelnen Anwendungen austauschen, jedoch nicht in dem Umfang und der Flexibilität, wie dies mit dem dynamischen Datenaustausch möglich ist.Wieso benötigt man den dynamischen Datenaustausch:Zu Beginn muß gesagt werden, daß auch die Möglichkeiten des dynamischen Datenaustausches begrenzt sind. Allerdings könnte man ohne ihn auch keine Bilder in Schriftdokumente einbinden, keine Daten in einer Excel – Tabelle darstellen und keine Töne in verschiedene Dokumente einbauen. Der dynamische Datenaustausch stellt eine Art Verbindung zwischen den einzelnen DDE – unterstützenden Programmen dar. Jeder hat wohl schon einmal ein Bild in ein Textdokument eingebaut und hat dadurch seine Arbeit “verschönert”.

Genau diese Verbindung zwischen dem Programm, das das Bild erzeugt hat und dem Programm, mit dem das Textdokument verwaltet wird ist das Ergebnis eines Datenaustausches.Begriffserläuterungen: Client und Server: Das Anwendungsprogramm, welches die Kommunikation beginnt und Daten anfordert, heißt Server. In Visual Basic umgesetzt, bedeutet dies, daß Textfelder, Bilder und Bezeichnungsfelder als Client dienen, während Formen (also Fenster) die Aufgabe des Servers übernehmen. Name des Anwendungsprogramms: Jede Anwendung, die als Server dienen soll, benötigt einen speziellen DDE – Namen – mit diesem wird die Anwendung angesprochen - der aber meist der eigentlichen Anwendungsbezeichnung sehr ähnlich ist (Word für Windows: WinWord, Excel: Excel). In Visual Basic ist der DDE – Name der Name, der ausführbaren EXE – Datei, falls bereits eine erstellt wurde, ansonsten der Hauptname der Projektdatei. Aktive und passive Verbindung: Eine aktive Verbindung besteht dann, wenn Client und Server in ständiger Verbindung stehen, d.

h. die Daten werden ständig aktualisiert. Im Gegensatz dazu tauscht eine passive Verbindung Daten nur dann aus, wenn der Client diese anfordert. Hierzu ein Beispiel: Passive Verbindung: Microsoft WinWord fordert ein Bild von Microsoft Paint an, d.h. die beiden Anwendungen werden verknüpft.

Dieses Bild wird nun ein einziges Mal an WinWord übergeben. Ändert sich das Bild in Paint, so hat dies keinen Einfluß auf WinWord und umgekehrt. Die Verbindung wird hiermit gelöscht. Aktive Verbindung: Auch hier übergibt Paint WinWord ein Bild. Wird dieses nun allerdings in Paint verändert, so erhält auch WinWord das veränderte Bild, d.h.

ein neues Bild wird im Dokument dargestellt. Allerdings funktioniert dieser Vorgang nur bei wenigen Programmen, da viele nur ein passive Verbindung zulassen. Object Linking (Objekt einbinden): Das Objekt einer anderen Anwendung wird in der Rahmenanwendung nur eingebunden, d.h. angezeigt. Eine Bearbeitung ist hier nicht möglich.

Object Embedding (Objekt verknüpfen): Eine Objekt – Verknüpfung geht über die Einbindung hinaus. Das Objekt wird hier nicht nur angezeigt, sondern es kann auch bearbeitet werden. Dazu wird das OLE – Programm (Server) aufgerufen. OLE – Programm: Eine OLE – Programm ist dasjenige Programm, welches die Daten liefert (Server). Beispielsweise liefert Word für Windows ein Textdokument oder Excel eine Kalkulationstabelle als Daten bzw. Objekt, die dann von der Rahmenanwendung (Client) übernommen werden.

Rahmenanwendung: Eine Rahmenanwendung ist das Programm, welches Objekte von einem OLE – Programm (Server) übernimmt, damit diese angezeigt oder bearbeitet werden können. OLE – Objekt: OLE – Objekte sind die Daten, die in die Rahmenanwendung zur Anzeige bzw. Bearbeitung übergeben werden. OLE – Server / OLE – Client: Ein OLE – Server ist die Anwendung, die Daten bzw. Objekte zur Verfügung stellt, welche im OLE – Client eingebettet bzw. mit ihm verknüpft werden.

Wird z.B.: in einer Visual Basic – Anwendung eine Excel Tabelle eingebunden bzw. bearbeitet, so ist Excel der OLE – Server und Visual Basic der OLE – Client. Klasse: Die Klasse eines Objekts legt die Anwendung fest, welche das Objekt erzeugt. Klassen sind z.

B.: MsGraph, MsDraw, Word – Dokument oder Excel – Worksheet. Die Klasse ist die formale Definition eines Objekts. Sie ist die Vorlage, nach der zur Laufzeit eine Instanz eines Objekts erzeugt wird. Die Klasse definiert die Eigenschaften des Objekts und die Methoden, die zur Steuerung des Objektverhaltens verwendet werden. Klassenmodul: Das Klassenmodul ist ein Modul, das die Definition einer Klasse (ihre Eigenschaften – und Methoden – Definitionen) enthält.

Klassenbibliothek: Die Klassenbibliothek ist eine Datei oder ein Teil einer Datei die Standardbeschreibungen von offengelegten Objekten, Eigenschaften und Methoden im Rahmen der OLE – Automatisierung enthält. Objektbibliotheksdateien (.OLB) enthalten Klassenbibliotheken. Objekt: Objekt ist ein allgemeiner Begriff für Formen und Steuerelemente. Aber auch die Zwischenablage (Clipboard), der Drucker (Printer), der Bildschirm (Screen) sowie die Fehlersucheinrichtung (Debug) zählen zu den Objekten von Visual Basic. Jedem Objekt werden zur Entwicklungs- oder zur Laufzeit bestimmte Eigenschaften (Properties) zugewiesen, die z.

B.: die Abmessungen oder die Farben des Objekts festlegen. Objektbibliothek: Die Objektbibliothek ist eine Datei mit der Erweiterung .OLB, die Informationen zu OLE – Automatisierungs – Controllern (wie Visual Basic) über verfügbare OLE – Automatisierungsobjekte bereitstellt. Der Objektkatalog ist ein Dialogfeld und kann verwendet werden, um den Inhalt einer Objektbibliothek zu untersuchen und Informationen zu den verfügbaren Objekten zu erhalten.  Der dynamische Datenaustausch zur Entwicklungszeit:Die erste Möglichkeit einen dynamischen Datenaustausch herzustellen, ist die nachstehend beschriebene starre Methode.

Hierbei wird bereits während der Entwicklungszeit eines Visual Basic – Projektes eine aktive Verbindung zum anderen Anwenderprogramm hergestellt, die später während der Ausführung in der gleichen Weise wiederaufgenommen wird. Da diese Art der Kommunikation ausschließlich über Visual Basic – Menübefehle abgewickelt wird, ist die zwar einfach zu handhaben aber wenig flexibel und benötigt auch keinen Programmcode. Die Verbindung kann außerdem nur bei Programmbeendigung abgebrochen werden. Darüber hinaus ist diese Methode auch nur für solche Anwenderprogramme geeignet, die über ein Menü Bearbeiten/Verknüpfen und Einfügen (oder ähnliches) verfügen.Der dynamische Datenaustausch zur Laufzeit:Nachfolgend ist die zweite flexible Methode beschrieben, einen dynamischen Datenaustausch herzustellen. Diese ist wesentlich flexibler als die oben beschriebene und eignet sich auch für Anwendungen, die nicht über den vorher genannten Menüpunkt verfügen.

Der Datenaustausch wird hier während der Programmausführung über Visual Basic – Eigenschaften, - Ereignisse und –Methoden gesteuert, für die der Anwender wiederum Code schreiben kann.HandlesFenster, Geräte, Programminstanzen, Bitmaps und Mauszeiger stellen wohl die wichtigsten Objekte in einer Windows – Umgebung dar. Sie können auf verschiedene Arten angesprochen werden. Das bedeutet auch, daß es einen Weg geben muß, diese identifizieren zu können, um sie dann als Parameter an Funktionen weitergeben zu können. Windows identifiziert jedes dieser Objekte mit einer 32bit langen geraden Zahl (Integer), die auch als Handle bekannt ist. Jedes Handle hat als Typenidentifzierer (Identifier) ein kleines h am Anfang.

Als Beispiel möchte ich einen einfachen Fall aufzeigen, die API – Funktion SetFocus.   An die SetFocus – Funktion wird ein Parameter übergeben, der das Fenster eindeutig identifiziert. Diese Funktion lautet vollständig also SetFocus(hWnd).   Menu hMenu Menüleiste oder Pop - Up Menü Module hModule Zeigt auf ein Codemodul wie z.B. eine DLL oder ein Anwendungsmodul Palette hPalette Farbtabelle Region hRgn Ein Gebiet eines Fensters Windows HWnd Ein Fenster   Neben diesen gibt es auch noch weitere, die allerdings weniger häufig gebraucht werden.

Objekte, die von der Windows API benutzt werden, sollten nicht mit Visual Basic Objekten vermischt werden, da diese mit dem Visual Basic Befehl GetObject herausgefunden werden. Diese Objekte werden von OLE (Object Linking and Embedding) oder Visual Basic selbst verändert und sind nicht im Kern der Windows – API vorhanden. Die Windows – API - RoutinenWas bedeutet API:API bedeutet Advanced Programmer’s Interface (engl.: die Oberfläche des fortgeschrittenen Programmierers), also eine erweiterte Programmierschnittstelle zu anderen Anwendungen bzw. Dateien.Wozu benötigt man API – Funktionen:API – Funktionen stellen einen wichtigen Bereich in der (Visual – Basic) Programmierung dar.

Sie sind sozusagen die Schnittstelle zu wichtigen System – Funktionen. Mit ihrer Hilfe können die Möglichkeiten von Visual Basic erheblich gesteigert werden. Visual Basic zielt hauptsächlich darauf ab, die Systemstabilität zu gewährleisten. Dazu muß allerdings auch die Zahl der verfügbaren Funktionen erheblich eingeschränkt werden. Allerdings sind ein Großteil der wichtigen Funktionen nun über die API – Schnittstelle bzw. die API – Funktionen erreichbar.

Man kann demzufolge sagen, daß die API – Routinen eine Schnittstelle zwischen den wirklich abgesicherten Visual Basic Funktionen und den absturzgefährdeten Windows - Routinen sind. Diese API – Routinen können von Visual Basic zwar nicht direkt angesprochen werden - sie müssen zuvor deklariert werden – sind später aber voll funktionsfähig. Der einzige Nachteil dieser Funktionen gegenüber den Visual Basic – Funktionen ist der, daß alle Sicherheitsmechanismen bei dem Aufruf einer API von Visual Basic außer Kraft gesetzt sind, da diese bekanntlich nicht zu Visual Basic sondern zu Windows selbst gehören.Allgemeine Informationen:Eine besondere Variante, die Leistungsfähigkeit von Visual Basic erheblich zu steigern, liegt im Einsatz von dynamischen Verbindungsbibliotheken, den sogenannten DLLs (Dynamic Link Library). Auch die Windows API Funktionen sind in diesen Dateien enthalten. Visual Basic selbst kann keine DLLs mit exportierten Funktionen erzeugen.

Höhere Programmiersprachen wie z.B.: Delphi oder C/C++ können Funktionen aus DLLs direkt exportieren.Sicherheitsaspekte beim Gebrauch von API – Routinen:Die Sicherheits- und Überprüfungsmöglichkeiten von Visual Basic sind beim Aufruf von DLL - Routinen außer Kraft gesetzt. Deshalb ist es notwendig, daß vor jedem Aufruf eines DLL beinhaltenden Programmes die Quelldatei gespeichert wird, um etwaigem Datenverlust vorzubeugen.Die Deklaration von DLL – Routinen:An dieser Stelle soll zuerst die Schnittstelle von Visual Basic erklärt werden, die den Zugriff auf DLL – Routinen ermöglicht.

Jede DLL – Routine muß vor Ihrem Einsatz zunächst deklariert werden. Neben dem Prozedurnamen muß sowohl die dynamische Verbindungsbibliothek (DLL) als auch die Parameterliste genannt werden. Mit der Anweisung Declare kennzeichnen Sie eine Prozedur als extern (außenständig, nicht direkt in Visual Basic implementiert). Der DLL – Name muß angegeben werden, da die DLL dynamisch zur Laufzeit an ein Programm gebunden ist (sie wird erst während der Ausführung des Programms benötigt, nicht gleich beim Aufruf). Die DLL muß sich entweder im Programm- oder Windows - Systemverzeichnis befinden. Ist dies nicht der Fall, muß explizit der Suchpfad mit angegeben werden.

Es sollten jeweils nur Deklarationen in ein Programm aufgenommen werden, die unbedingt benötigt werden.   Die allgemeine Syntax lautet:   DECLARE FUNCTION LIB “Bibliothek.dll” [ALIAS “Originalname”] ([[BYVAL|BYREF] Variablenname [AS Variablentyp] [,[BYVAL|BYREF] Variablenname ...][.

...]]) bzw. DECLARE SUB LIB “Bibliothek.dll” [ALIAS “Originalname”] ([[BYVAL|BYREF] Variablenname [AS Variablentyp] [,[BYVAL|BYREF] Variablenname .

..][....

]])   Der Abschnitt Lib LibName in der Declare - Anweisung teilt Visual Basic mit, wo die Dynamic - Link Library gespeichert ist. Betriebssystem - DLLs sind entweder “User”, “GDI” oder “Kernel” oder eine der anderen System - DLLs wie “MMSystem”. Bei anderen DLLs ist LibName ein Dateiname, der auch eine Pfadangabe enthalten kann.   Mit der Alias – Klausel kann eine Prozedur deklariert und damit einhergehend umbenannt werden. Diese Umbenennung ist dann sinnvoll, wenn ein Name einer DLL – Prozedur in Visual Basic nicht gültig ist oder aber bereits definiert ist. Wird eine Routine innerhalb DLL lediglich unter einer Ordnungszahl verwaltet, muß die Prozedur wie unten beschrieben deklariert werden.

  DECLARE PROZEDURNAME LIB “Bibliothek.dll” ALIAS “#Zahl” .....

..   Die Ordnungsnummer wird im Zeichenkettenformat angegeben und mit einem Doppelkreuz eingeleitet. Die Parameterliste ist optional, lediglich die runden Klammern sind in jedem Fall mit anzuführen. Die Parameterliste kann einen oder mehrere Parameter enthalten. Jeder Parameter muß mit einem Datentyp versehen werden.

Folgende Besonderheiten sind bei der Übergabe von Werten an DLL – Routinen zu berücksichtigen.Wert oder Referenzübergabe von Argumenten:Standardmäßig übergibt Visual Basic alle Argumente als Referenz. d.h. Visual Basic übergibt die 32-Bit-Adresse, an der der Wert gespeichert ist, und nicht den eigentlichen Wert des Arguments. Das Schlüsselwort ByRef muß zwar nicht angegeben werden, man kann es aber zur Dokumentation im Code verwenden, damit offensichtlich ist, wie Daten übergeben werden.

  Viele DLL - Prozeduren erwarten, daß ein Argument als Wert übergeben wird, d.h. sie erwarten den eigentlichen Wert und nicht die Speicheradresse des Wertes. Wenn ein Argument als Referenz an eine Prozedur übergeben wird, die eine Übergabe des Wertes erwartet, erhält die Prozedur falsche Daten und kann nicht korrekt ausgeführt werden.   Ein Argument kann als Wert übergeben werden, indem vor der Argumentdeklaration in der Declare - Anweisung das Schlüsselwort ByVal eingefügt wird. Dies gewährleistet, daß das Argument bei jedem Prozeduraufruf als Wert übergeben wird.

Konvertieren von C – Deklarationen nach Visual Basic:Die Prozeduren in DLLs werden meistens in der Syntax der Programmiersprache C dokumentiert. Um sie von Visual Basic aus aufzurufen, müssen sie in gültige Declare - Anweisungen übersetzt und ordnungsgemäß aufgerufen werden. Die folgende Tabelle enthält eine Liste der wichtigsten C - Deklarationen und der jeweiligen Entsprechung in Visual Basic.Zeichenkettenübergabe:Zeichenketten, die an DLL – Routinen übergeben werden, enden im Regelfall mit Chr$(0) (ASCII – String). Das Nullzeichen wird automatisch an eine Zeichenkette, die an eine DLL Routine übergeben wird, angehängt, wenn sie innerhalb der Parameterliste mit dem Schlüssel ByVal deklariert ist. Zeichenketten werden an DLL – Routinen immer als Referenz übergeben.

DLL – Routinen liefern in der Regel nur Zeichenketten mit maximal 255 Zeichen zurück. Die Länge einer Zeichenkette kann in der DLL nicht geändert werden, sofern die Routine nicht speziell für Visual Basic geschrieben wurde. Eine Zeichenkette, die ein Ergebnis zurückliefert, muß daher in der Regel zunächst auf 255 Zeichen initialisiert werden. Dies kann mit dem Befehl Variable1$ = Space$(255). Funktionen, die in einem Parameter eine Zeichenkette mit dem Wert Null erwarten, können die Visual Basic Konstante VbNullString erhalten. Zeichenketten fester Länge können an DLL – Funktionen nicht übergeben werden.

Gibt eine DLL – Funktion eine Zeichenkette zurück, so ist diese ebenfalls mit Chr$(0) abgeschlossen. Left$(Rückgabewert$, InStr(Rückgabewert$, Chr$(0)) – 1) liefert dann einen String in der richtigen Länge.   Hierzu ein Beispiel: Mit Hilfe einer API – Routine wird versucht, das Systemverzeichnis des Betriebsystemes Windows95 zu eruieren. Angenommen es lautet “C:\WINDOWS\SYSTEM”. Diese Variable benötigt mindestens eine Länge von 17 Zeichen. Wird das Feld, also die Variable, in die der Wert geschrieben wird nur mit 15 Zeichen initialisiert, so werden die letzten zwei Zeichen in den Speicher geschrieben.

Anstelle der ansonsten reservierten 255 Zeichen (Visual Basic liefert keinen String zurück, der länger ist als 255 Zeichen) sind nun nur 15 Zeichen im Speicher frei. Angenommen, im Speicher würde hinter unserer Variable gleich anschließend eine wichtige Windows – Systemdatei stehen, so würde es zu einem Datenverlust kommen, da die ersten beiden Zeichen der Variable die ersten Zeichen der Systemdatei überschreiben würden. Unter Umständen könnte es auch zu einem Systemabsturz kommen, wenn auf die wichtige Datei unmittelbar danach zugegriffen wird, da sie 2 Byte an Fehlinformationen enthält. Um dies zu verdeutlichen habe ich eine Zeichnung angefertigt.   Hier wurde die Systemdatei Kernel.dll mit der Variable, die die gewünschten Informationen enthält überschrieben.

Es wäre aber ebenso möglich, daß unsere Variable von einer anderen Datei überschrieben werden würde, was wiederum einen Datenverlust, nur diesmal bei unserem Programm, zur Folge hätte. Normalerweise nimmt eine Variable, die mit 255 Zeichen initialisiert wurde, immer 255 Zeichen Platz ein. Es wären also im Normalfall 17 Zeichen und 208 Leerzeichen (208 + 17 = 255). Ungültige Namen:Mitunter hat eine DLL - Prozedur einen Namen, der kein gültiger Bezeichner ist. Der Name kann ein ungültiges Zeichen (beispielsweise einen Bindestrich) enthalten oder mit einem reservierten Wort von Visual Basic (beispielsweise GetObject) übereinstimmen. In diesem Fall muß das Schlüsselwort Alias verwendet werden.

  Einige Prozeduren in den DLLs der Betriebsumgebung beginnen beispielsweise mit einem Unterstrich. Zwar können Sie Unterstriche in Visual Basic - Bezeichnern verwenden, doch darf der Unterstrich nicht das erste Zeichen sein. Um solche Prozeduren verwenden zu können, muß die Prozedur mit Alias deklariert werden: Declare Function LOpen Lib "kernel" Alias "_lopen" (ByVal fn As String, ByVal f As Integer) As Integer   In diesem Beispiel ist LOpen der Name der Prozedur, wie er in der Visual Basic - Prozedur verwendet wird. Der Name _lopen ist der Name, der in der DLL erkannt wird. Der Alias - Abschnitt, kann verwendet werden, wenn immer es angebracht ist. Die folgende Declare - Anweisung ersetzt beispielsweise einen langen Namen (GetWindowsDirectory) durch einen kürzeren Namen (WinDir): Declare Function WinDir Lib "kernel" Alias "GetWindowsDirectory" (ByVal lpBuffer As String, ByVal nSize As Integer) As Integer Nun kann die Funktion mit einem kürzeren Namen aufgerufen werden: Dim WinPath As String WinPath = String(145, Chr(0)) WinPath = Left(WinPath, WinDir(WinPath, Len(WinPath))) Übergeben von Zeichenfolgen:Visual Basic verwendet einen String - Datentyp, der als BSTR bezeichnet wird und einen Datentyp darstellt, der durch die OLE-Automatisierung definiert wird.

Ein BSTR - Wert verhält sich wie ein Zeiger auf das erste Datenbyte. BSTR - Werte verweisen auf Zeichenfolgen, die durch ein Null - Zeichen (ANSI-Wert Null) begrenzt sind. Den Daten ist ein Header vorangestellt, der von Visual Basic verwendete Informationen enthält. Der BSTR - Wert ignoriert diesen Header und verweist auf das erste Datenbyte in der Zeichenfolge.   Die folgende Funktion würde Daten in eine Variable schreiben. Ist diese Variable aber nicht lange genug (z.

B.: weniger als zehn Zeichen, obwohl 17 benötigt würden), so würde die API – Funktion über den reservierten Speicher hinausschreiben, ein anderer Inhalt würde überschrieben werden und ein Datenverlust wäre die Folge.   Declare Function GetWindowsDirectory Lib "Kernel" (ByVal lpBuffer As String, ByVal nSize As Integer) As Integer Eine sichere Lösung zum Aufrufen der Prozedur ist das Erstellen eines Rückgabearguments, das mindestens 255 Zeichen lang ist, durch Auffüllen des Arguments mit Zeichen — in diesem Fall mit Null - Zeichen (Binärwert Null):   Path = String(255, 0) ReturnLength = GetWindowsDirectory(Path, Len(Path)) Path = Left(Path, ReturnLength)16/32 bit – Anwendungen:Sehr wichtig bei der Betrachtung von 16-Bit- und 32-Bit-Versionen von Visual Basic 4.0 sind Fragen im Zusammenhang mit ANSI und UNICODE. Wenn DLLs geschrieben werden, verwenden ANSI-Zeichenfolgen ein Byte pro Zeichen und UNICODE - Zeichenfolgen zwei Byte pro Zeichen.   Die 16-Bit-Version von Visual Basic verwendet entweder ANSI- oder DBCS - Zeichenfolgen.

Die 32-Bit-Version von Visual Basic verwendet UNICODE - Zeichenfolgen. Deshalb sollte eine Reihe von Dingen berücksichtigt werden, wenn DLLs für die Verwendung mit Visual Basic 4.0 geschrieben werden.   Wenn eine 1-Byte-Variable benötigt wird, kann 'String * 1' in der 16-Bit-Version von Visual Basic verwendet werden. In der 32-Bit-Version von Visual Basic nimmt 'String * 1' jedoch tatsächlich zwei Bytes im Speicher ein. Darum wurde der Datentyp Byte eingeführt.

Dieser Datentyp nimmt 1-Byte im Speicher ein, unabhängig davon, ob er in der 16-Bit- oder in der 32-Bit-Version von Visual Basic verwendet wird. In Win32 (32bit Bsp.: Win95, WINNT) wird bei Namen von DLL – Prozeduren zwischen Groß- und Kleinschreibung unterschieden. In Win16 (16bit Bsp.: Windows 3.11) ist dies nicht der Fall.

GetSystemMetrics und GETSYSTEMMETRICS sind daher unterschiedliche Funktionen. Dennoch ist in diesem Fall nur der erste Name korrekt, so wie er in USER32.DLL existiert. Wenn also die normale DECLARE - Anweisung für diese Funktion:   Declare Function GetSystemMetrics Lib "User32" (ByVal n As Integer) As Integer   auch an anderer Stelle im Projekt existiert (z.B. wenn die FESTSTELL - TASTE bei der Eingabe des Funktionsnamens zufällig gedrückt wird), z.

B. als   Declare Function GetSystemMetrics Lib "User32" (ByVal n As Integer) As Integer   wird auch die vorherige Definition dementsprechend geändert.   In Win16 gibt es diesen Unterschied nicht, da bei Funktionsnamen nicht zwischen Groß- und Kleinschreibung unterschieden wird. In Win32 würde jedoch ein Laufzeitfehler auftreten, da GETSYSTEMMETRICS nicht in der DLL existiert. Dieses Problem kann dadurch umgangen werden, indem der Alias - Abschnitt wie folgt verwendet wird: Declare Function GetSystemMetrics Lib "User32" Alias GetSystemMetrics (ByVal n As Integer) As Integer So wird sichergestellt, daß der im Alias verwendete Name nicht von einer Umwandlung (falls sie vorkommt) betroffen ist. Unabhängig davon, wie der Name in anderen Teilen des Codes verwendet wird, bezieht sich die Deklaration somit weiterhin auf den korrekten Prozedurnamen in der DLL.

Bedingte Kompilierung:Die Befehle, die zur bedingten Kompilierung notwendig sind, gleichen den normalen Visual Basic Befehlen (If, ElseIf, Else, End If). Der einzig große Unterschied besteht darin, daß diese Befehle nur einmal ausgeführt werden, und zwar dann, wenn das Programm kompiliert wird. Um dies zu verdeutlichen muß ich an dieser Stelle ein Beispiel aufzeigen: Es ist möglich, daß ein Programm sowohl unter Windows 3.11 (o.ä.) als auch unter Windows95 ausgeführt werden soll.

Nun lauten aber die Aufrufe für die Win16 API anders als für die Win32 API. Hier schaltet sich nun die bedingte Kompilierung ein. Falls die Win32 API benötigt wird, werden die Anweisungen für diese geladen und die Anweisungen für die Win16 API übersprungen und umgekehrt. Geschwindigkeit vs. Sicherheit bei der Nutzung von API – Routinen – ZusammenfassungEs gibt eigentlich zwei überzeugende Gründe, um die Windows – API mit Visual Basic zu benutzen: gesteigerte Möglichkeiten und verbesserte Performance. Die gesteigerten Möglichkeiten kommen daher, da Visual Basic nur ein stark gekürztes Set der Windows – Möglichkeiten unterstützt.

Eben dieses Subset, also eine kleinere Einteilung bewirkt, daß die Programmierung mit Visual Basic sehr sicher ist – mindestens um vieles sicherer als eine andere Programmierumgebung. Kurz gesagt: Visual Basic verbessert die Sicherheit, indem es die verfügbaren Funktionen limitiert.   Sobald man nun beginnt, mit der Windows32 API zu arbeiten, ändert sich dies wieder: Die Sicherheit wird außer Acht gelassen, die Kapazität kommt voll zum Vorschein. Mit verschiedenen Tools wie z.B. denen der Firma Desaware (als Beispiel möchte ich an dieser Stelle die Desaware SpyWorks vermerken) kann ein Visual Basic Programmierer fast an die Möglichkeiten eines C/C++ Programmierers hinkommen.

Zusätzlich zu dem Umfang der API – Routinen kommt auch noch eine verbesserte Geschwindigkeit, da die meisten API – Routinen auf Geschwindigkeit hin optimiert wurden. Außerdem kann eine API – Funktion die Arbeit verschiedener Visual Basic Kommandos übernehmen, was sich wiederum positiv auf die Geschwindigkeit auswirkt. Als Beispiel hierfür möchte ich nur die Graphikfunktionen nennen. Zusammenfassend kann gesagt werden, daß es möglich ist, den Kampf Geschwindigkeit gegen Sicherheit zu kontrollieren. Man muß nur aufpassen, welche Funktionen man für welche Aufgaben benötigt.Vergleich: Visual Basic Code: Vorteile Nachteile Höchste Sicherheit Niedrigere Performance (langsamer) Einfach zu testen und Fehler sind leicht zu beheben Benötigt oft mehr Programmieraufwand als die Nutzung von Custom Controls Plattformunabhängig   Win32 API Code: Vorteile Nachteile Höchste Flexibilität Benötigt sowohl Win32 als auch Win16 Code Getestet und dokumentiert Benötigt gute Kenntnisse Bietet höhere Performance    Custom – Controls (Benutzerdefinierte Steuerelemente) und OLE – Server: Vorteile Nachteile Einfach zu benützen Benötigt die Auslieferung von zusätzlichen Software - Komponenten Möglicherweise hervorragende Performance     BeispielProgramm: Computer Informationen: Programmiert von Thomas Linder – 8c - 1998Über dieses Programm:Die Idee dieses Programms hatte ich bereits vor langer Zeit.

Ich wollte ein Programm entwerfen, das etwas leistet und das man herzeigen kann. Normalerweise habe ich als Schüler nicht soviel Zeit, um ein wirklich anspruchsvolles Programm zu entwerfen. Diese Fachbereichsarbeit gab mir die Gelegenheit dazu, ein Programm aus zwei Gründen zu entwerfen. Der erste Grund ist, wie bereits erwähnt, daß ich schon immer einmal ein leistungsfähiges Programm entwerfen wollte. Der zweite Grund ist, daß ich dies dann machen kann, wenn es mir wirklich etwas nützt. Aufgrund dieser Fachbereichsarbeit kann ich nun diese beiden Faktoren verknüpfen.

Natürlich kann sich dieses Programm nicht mit den Programmen von professionellen Programmierern messen. Es ist auch erst das zweite Projekt in dieser Größenordnung. Das Ziel dieses Programmes ist es, ein gutes Beispiel dafür zu sein, was mit einfachen Mitteln alles möglich ist. Zu Beginn sollte dieses Programm einfach die Möglichkeiten darstellen, was alles möglich ist. Ich dachte zuerst nicht daran, ein vollständiges Programm zu entwickeln. Im Laufe der Zeit allerdings, kam immer mehr der Wunsch nach einer “richtigen” Oberfläche.

Da zuerst die Laufwerksinformationen entwickelt wurden, war zunächst dies mein Hauptfenster. Als ich dann allerdings nicht mehr wußte, wie ich die verschiedenen Schaltflächen anordnen sollte, wurde mir klar, daß eine größere Oberfläche her mußte. Ein einfaches Fenster, das sich zu Beginn öffnet und mir zehn verschiedene Schaltflächen zeigte, war mir zu primitiv und unschön. Also beschloß ich, einen Explorer bzw. Dateimanager – Ersatz zu machen. Obwohl auch meine Version viele Funktionen für verschiedene Dateitypen beinhaltet, ist es kein vollwertiger Ersatz.

Die Programmierung schritt fort, und kurze Zeit später hatte ich die Systemspeicherinformationen, die Prozessorinformationen und Betriebssysteminformationen. Als Schlußpunkt suchte ich noch einige spielerische aber dennoch nützliche API – Funktionen, die mir ich unter die Rubrik “Verschiedene API – Funktionen” steckte. Vielleicht sind diese im Augenblick nicht nützlich, aber es ist einfacher an sie zu gelangen als sich in der Systemsteuerung von Windows95 herumzuquälen.Information bezüglich Sourcecode:Da ich nicht den ganzen Sourcecode abdrucken kann, der gute 34 Seiten umfaßt (+20 Seiten Programmformatierung), habe ich eine CD beigelegt, die sowohl diese Arbeit als auch den vollständigen Code des Programmes enthält. Ich habe mich dazu entschlossen, nur die wichtigsten Stellen abzudrucken. Damit sind die Stellen gemeint, die für die API – Routinen wirklich wichtig sind.

Da ich nur wenige, dafür teilweise recht komplizierte API – Routinen verwende, habe ich mich ebenfalls entschlossen alle davon mit dem richtigen Aufruf darzustellen. Diese stellvertretend für die gewaltige Menge an API - Aufrufen. Alle Aufrufe der restlichen Routinen, funktionieren mehr oder weniger nach demselben Prinzip.   Vor dem Programmcode befindet sich eine kurze Beschreibung der Form, die klarmachen soll, was diese Form darstellen bzw. auswerten soll und um was es sich in dem jeweiligen Teilbereich des Programmes handelt.   Der eigentliche Programmcode wird in Blau dargestellt.

Nach jedem Programmblock folgt eine kurze Erklärung, die die wichtigsten Schritte verdeutlicht. Der Sourcecode: Generelle Informationen:In diesem Programm kommen sehr viele benutzerdefinierte Datentypen vor. Diese werden, zusammen mit den API – Aufrufen in dem Modul Modul1.bas definiert.Die Hauptform:Diese Form ist eigentlich nicht sehr wichtig, denn sie ist nur die Sprungform zu den wichtigen Teilen.   Allerdings enthält sie eine API – Routine.

Bei Doppelklick auf eine Datei mit Endung “wav” innerhalb des Dateifensters, wird diese Sounddatei (wav = Sounddatei) automatisch abgespielt. Die der dazu gehörende Code:   Dim PathuDatei As String If Len(Dir1.Path) > 3 Then 'markierte Datei an Variable PathuDatei übergeben PathuDatei = Dir1.Path + "\" + File1.filename Else PathuDatei = Dir1.Path + File1.

filename End If endung = Trim$(Right$(PathuDatei, 3)) Select Case endung ... Case "wav" xxx& = sndPlaySound(PathuDatei, 1) 'API - Aufruf, um Sound Datei abzuspielen ...

Case Else ... End Select   Hier wird zuerst der Variable “PathuDatei” der Datentyp String zugewiesen. Der Variable PathuDatei wird darauf der Name und der Ort der Datei, auf die doppelgeklickt wurde, übergeben (Bsp.: “C:\WINDOWS\MEDIA\Der Microsoft Sound.

wav”. Hierauf werden die letzten drei Zeichen genommen (sie sind die endung), welche dann in der Variable “endung” gespeichert werden. Nun folgt eine Select Case – Anweisung, die je nach “endung” eine bestimmte Prozedur vollzieht. In diesem Fall geschieht dies, wenn die Endung auf “wav” lautet. Ist dies der Fall, so wird eine API – Routine aufgerufen, die den Namen sndPlaySound trägt. Ihr werden zwei Parameter übergeben.

Einer übergibt die Datei und wo diese gespeichert ist, der andere bezeichnet die Art, wie die Datei abgespielt wird. Dies ist die einzige API – Routine, die in dieser Form vorkommt.Die Form ProzInfo:Auch hier kommt nur eine API – Routine zum Einsatz. Diese liefert allerdings mehr als eine Information. Sie würde noch mehrere Informationen liefern, allerdings sind diese in diesem Programm nicht wichtig. Benötigt werden nur zwei Informationen: Die Anzahl der Prozessoren und den Typ der/des Prozessoren/Prozessors.

Diese Informationen werden in einer benutzerdefinierten Variable namens “SysInfo” gespeichert. Hier der Code:   'Deklaration der Variablen Dim SysInfo As SYSTEM_INFO 'Benutzerdefinierter Datentyp Dim m As String GetSystemInfo SysInfo 'API - Aufruf m$ = "Prozessortyp: " 'Prozessortyp Select Case SysInfo.dwProcessorType Case PROCESSOR_INTEL_386 m$ = m$ + "Intel 386" Case PROCESSOR_INTEL_486 m$ = m$ + "Intel 486" Case PROCESSOR_INTEL_PENTIUM m$ = m$ + "Intel Pentium" Case PROCESSOR_MIPS_R4000 m$ = m$ + "MIPS R4000" Case PROCESSOR_ALPHA_21064 m$ = m$ + "Alpha Workstation" ... m$ = m$ + vbCrLf m$ = m$ + "Anzahl der Prozessoren: " 'Anzahl der installierten Prozessoren Anz& = SysInfo.

dwNumberOrfProcessors m$ = m$ + Str$(Anz&)   Zu Beginn werden die verschiedenen Variablen initialisiert. “SysInfo” wird als benutzerdefinierte Variable SYSTEM_INFO und “m” als Zeichenkette initialisiert. Die API – Routine wird mit der Anweisung GetSystemInfo aufgerufen. Die verschiedenen Werte werden an die Variable SysInfo übergeben. In der Variable m steht, was später im Bezeichnungsfeld in der Form ausgegeben werden soll. Zuerst das Wort Prozessortyp, dann der dazugehörige Wert, eine Zeilenschaltung und dann die Zeichenfolge “Anzahl der Prozessoren” und deren Wert.

  Der Prozessortyp ist in einer Untervariable der Variable SysInfo gespeichert. Diese Untervariable lautet “dwProcessorType”. Die gesamte Variable lautet demzufolge “SysInfo.dwProcessorType”. Die zweite Untervariable betrifft die Anzahl der Prozessoren und lautet “dwNumberOrfProcessors”. Die zusammengesetzte lautet demzufolge “SysInfo.

dwNumberOrfProcessors”.   In dem Modul Modul.bas befinden sich die Konstanten, die benötigt werden, um den Prozessortyp zu bestimmen, da die Variable dwProcessorType nur einen Hexadezimalwert liefert. Der richtige Prozessor wird durch eine Case – Anweisung ausgewählt.Die Form OSInfo:Diese Form stellt Informationen, die das Betriebssystem betreffen, dar. Auch hier wird wieder ein benutzerdefinierter Datentyp verwendet.

 Dim Vi As OSVERSIONINFO 'Benutzerdefinierter Datentyp Dim MajorVersion As String 'Haupt Version Dim MinorVersion As String 'Unter Version GetVersionEx Vi 'API - Aufruf: Speichert Informationen in der Variable Vi Select Case Vi.dwMajorVersion ... Versio$ = Ma$ + "." + Mi$ + ".

" + m$ ... Info$ = Vi.szCSDVersion ..

. Label1.Caption = "Major Version: " + MajorVersion + vbCrLf Label1.Caption = Label1.Caption + "Minor Version: " + MinorVersion + vbCrLf Label1.Caption = Label1.

Caption + "Build: " + Str$(Vi.dwBuildNumber) + vbCrLf Label1.Caption = Label1.Caption + "Platform ID: " + Str$(Vi.dwPlatformId) + vbCrLf Label1.Caption = Label1.

Caption + "Version: " + Versio$ + vbCrLf Label1.Caption = Label1.Caption + "Zusatzinformationen " + Info$ + vbCrLf ... Hier wird die Variable “Vi” als benutzerdefinierter Datentyp dimensioniert.

Außerdem werden zwei weitere Variablen benötigt: Die Hauptversion und die Unterversion des Betriebssystem. Existiert kein zweites Betriebssystems, so soll eine Meldung im Bezeichnungsfeld auf der Form stehen. Die hier benötigte API – Routine lautet mit vollem Aufruf: “GetVersionEx Vi”. Durch diesen werden sämtliche Werte in der Variable Vi gespeichert.   Die Versionsnummer setzt sich aus mehreren Komponenten zusammen. Der Nummer der Hauptbetriebsystems, der Nummer des Unterbetriebsystems und aus der Build Number, die ebenfalls ein Teilbereich der Variable Vi ist.

  Eventuelle Zusatzinformationen werden noch in der Variable “szCSDVersion” gespeichert und schlußendlich wird die Information in das Bezeichnungsfeld der Form “OsInfo” eingetragen.Die Form RamInfo:Diese Form ist zwar etwas komplizierter aufgebaut, ist allerdings dasselbe wie die vorhergehenden Formen. Sie beinhaltet wiederum eine einzelne API – Routine, die sämtliche Werte in einer Variable abspeichert. Diese werden dann jeweils durch 1024 dividiert, um die nächst – größeren Einheiten zu erhalten (Kbyte, Mbyte, ...

). Dim memInfo As MEMORYSTATUS GlobalMemoryStatus memInfo Used& = memInfo.dwMemoryLoad 'Physikalischer Speicher (wirklich) Physical& = memInfo.dwTotalPhys / 1024 Avail& = memInfo.dwAvailPhys / 1024 Pip& = 100 * Avail& / Physical& 'Page File - Speicher PageFile& = memInfo.dwTotalPageFile / 1024 AvailPage& = memInfo.

dwAvailPageFile / 1024 Pfip& = 100 * AvailPage& / PageFile& 'Virtueller Speicher Virtual& = memInfo.dwTotalVirtual / 1024 AvailVirtual& = memInfo.dwAvailVirtual / 1024 Vip& = 100 * AvailVirtual& / Virtual& Die Variable memInfo wird hier, wie bei den anderen Formen, als ein benutzerdefinierter Datentyp dimensioniert. Nun wird der API Aufruf mit “GlobalMemoryStatus memInfo” vollzogen. Die Variable beinhaltet nun die verschiedenen Werte für den physikalischen Speicher, den Page File – Speicher und den Virtuellen Speicher in Byte. Sie beinhaltet sowohl den zur Zeit benutzten als auch den zur Zeit freien Systemspeicher.

Nun werden die einzelnen Angaben der Reihe nach in Kbyte und in Prozent umgewandelt, um besser lesbare Werte zu erhalten. Zum Schluß werden diese wieder in drei verschiedene Bezeichnungsfelder eingetragen.Die Form SysInfo:Diese Form stellt verschiedene Möglichkeiten zur Auswahl, wie Windows beendet werden soll. Dies sind genau die Funktionen, die man beim Abschalten des Computers erhält. Diese Funktionen sind ebenfalls API – Routinen. Genauer gesagt sie sind eine einzelne API – Routine, der als Parameter übergeben werden muß, wie Windows beendet werden soll.

Dieses Problem wurde mit vier Optionsknöpfen gelöst (Windows beenden, Windows neu starten, MS-DOS – Modus, Neu Anmelden). Außerdem enthält die Form zwei Schaltflächen, durch die die Auswahl bestätigt oder abgebrochen werden soll (OK, Abbrechen).   If Option1.Value = True Then R& = ExitWindowsEx(1, 0) If Option2.Value = True Then R& = ExitWindowsEx(2, 0) If Option3.Value = True Then R& = ExitWindowsEx(8, 0) If Option4.

Value = True Then R& = ExitWindowsEx(0, 0)   Dies ist der ganze Code, der für diese vier Möglichkeiten benötigt wird. Die API – Routine lautet “ExitWindowsEx”. Ihr wird ein Parameter übergeben, der bestimmt, auf welche Art dies geschieht. Der zweite Parameter ist nicht wichtig. Er wird daher auf 0 (Null) gesetzt. Um unterscheiden zu können, welches Optionsfeld aktiviert wurde, wird die If – Bedingung verwendet.

Die Form SmallDriveDirDiese Form beinhaltet eigentlich keinen richtigen API – Aufruf. Dennoch ist sie wichtig, um eine Datei auszuwählen, die dann einer anderen Form als globale Variable übergeben wird. Mit Hilfe einer API werden dann aus dieser Datei verschiedene Informationen genommen, die z.B.: bestimmen, ob es eine 32bit – EXE(cute) – Datei ist. Sie ist demzufolge nur ein kleiner Baustein, der in meinem Programm genutzt wird und beinhaltet keine API – Routinen.

Die Form GenInfo:Diese Datei beinhaltet verschiedene API – Routinen, die den Benutzernamen bzw. den Namen des Computers ermitteln, die Multimedia – Ausrüstung (Soundkarte) ermitteln, den Batteriestatus ermitteln (nur bei einem Notebook interessant), die Systempfade für das Windows – Systemverzeichnis bzw. das temporäre Verzeichnis ermitteln und auch die Sprungplattform zur Form SmallDriveDir ist (32bit – Programme). Diese Form ist sehr komplex und unterschiedet sich von den bisherigen Formen dadurch, daß nicht nur eine einzelne API – Routine, sondern gleich mehrere Funktionen vorkommen. Hier ein paar Bruchstücke aus dem Code dieser Form:  Private Sub Form_Load() X = vbCrLf ' Werte in Bezeichnngsfelder eintragen Label1.Caption = "ComputerName:" + X Label1.

Caption = Label1.Caption + "Benutzername:" + X Label5.Caption = "" 'Verschiedene Prozeduren ausführen GenInfosZeigen GetAkkuInf GetSystemDirs GetMMInfo End Sub Wird diese Form geladen, so werden als erstes die Beschriftungen in die Bezeichnungsfelder eingetragen. Danach werden verschiedene Prozeduren ausgeführt, von denen jede für einen bestimmten Teil der API – Routinen zuständig ist (GenInfosZeigen: Computer- und Benutzername; GetAkkuInf: Ladezustand des Akkus anzeigen; GetSystemDirs: Systemverzeichnisse ermitteln; GetMMInfo: Multimedia – Informationen ermitteln). Zuerst zur Prozedur GenInfosZeigen: Ausgabe = Space$(255) Length = Len(Ausgabe) verwerfen% = GetComputerName(Ausgabe, Length) Ausgabe = Left$(Ausgabe, Length) Label2.Caption = Ausgabe + X Ausgabe = Space$(255) Length = Len(Ausgabe) a% = GetUserName(Ausgabe, Length) Label2.

Caption = Label2.Caption + Left$(Ausgabe, Length) Hier wird zuerst die Variable Ausgabe auf 255 Zeichen dimensioniert, d.h. sie hat eine Länge von 255 Zeichen, egal ob nur 10 Zeichen in sie geschrieben werden. Die restlichen Zeichen werden der Einfachheit halber durch Nullen bzw. Leerzeichen ersetzt.

Hierauf wird die Länge auf die Länge der Variable Ausgabe gesetzt (in diesem Fall 255). Nun wird die API – Routine GetComputerName aufgerufen. Diese erhält als Übergabewerte zwei Argumente, nämlich den Text (Variable: Ausgabe) und die Länge des Textes (Variable: Length). Damit nun die restlichen Leerzeichen abgeschnitten werden, wird der Befehl “Left” verwendet. Dieser erhält nun ebenfalls zwei Argumente, genau dieselben, die zuvor der API – Routine entnommen wurden. Mit dem Befehl Left werden von der Variable “Ausgabe” soviel Zeichen behalten, wie in der Längenangabe “Length” enthalten sind.

Ist Length zum Beispiel 15, so werden 15 Zeichen genommen, der Rest wird abgeschnitten. Nun wird noch die Variable “Ausgabe”, die nun genauso viel Zeichen enthält, wie die Information wirklich hat, in das Bezeichnungsfeld eingetragen. Dasselbe geschieht nun mit der API – Routine GetUserName, nur mit dem Unterschied, daß diese Routine den Benutzernamen anstatt des Computer – Namens ausgibt.   Die zweite Prozedur gilt den Akku – Ladestatus – Informationen:   Dim pStatus As SYSTEM_POWER_STATUS If GetSystemPowerStatus(pStatus) Then Else MsgBox "Fehler beim Abfragen des Batteriestatus" End If Label3.Caption = "AC Power Status:" 'Batteriestatus Select Case pStatus.AcLineStatus Case 0 .

.... Hier wird zu Beginn die Variable pStatus (steht für Power Status) als benutzerdefinierter Datentyp deklariert. Nun folgt eine Überprüfung, ob der Computer Informationen über den Batteriestatus liefert.

Tut er dies nicht, so wird eine Fehlermeldung ausgegeben. Hier wurde die API – Routine in eine If – Schleife mit eingebaut. Auch auf diese Art erhält Visual Basic den Wert der API – Routine (bzw. die Werte). Der API – Routine wird nur ein Argument übergeben, nämlich die Variable, in der die Informationen gespeichert werden sollen. Nun wird je nach Wert mit Hilfe einer Case – Auswahlschleife die Information ermittelt und der dazu passende Text ausgegeben.

Nun folgen verschiedene Aufrufe, die verschiedene Werte (alle aus dem benutzerdefinierten Datentyp pStatus) ausgelesen. Diese werden dann in die verschiedenen Bezeichnungsfelder geschrieben. Die Prozedur GetSystemDirs:   'Windows Sys - Verzeichnis ermitteln Temp$ = Space$(255) Length& = GetSystemDirectory(Temp$, Len(Temp$)) Label6.Caption = "Windows Systemverzeichnis: " + Left(Temp$, Length&)   'Temporäres Verzeichnis ermitteln Temp$ = Space$(255) Length& = GetTempPath(Len(Temp$), Temp$) Label6.Caption = Label6.Caption + vbCrLf + "Windows Temp - Verzeichnis: " + Left(Temp$, Length&)   Dies ist wiederum eine kurze Prozedur, die nur zwei Aufrufe erfordert.

Genau wie bei dem Computernamen wird auch hier die Variable “Temp” (entspricht der Variable “Ausgabe” beim Computernamen) auf die Länge von 255 Zeichen gebracht. Der einzige Unterschied zum Computernamen besteht darin, daß die Länge nicht einzeln als Variable dimensioniert wird. Sie wurde bereits in die API – Funktion mit einbezogen. Ansonsten verläuft der gesamte Aufbau gleich wie bei der ersten Prozedur dieser Form.   Die letzte Prozedur liest aus verschiedenen API – Routinen Informationen zur Multimedia Ausstattung aus.   VersionofMM% = mmsystemGetVersion winod% = waveInGetNumDevs 'Anzahl der Wave - In Ger&a

Suchen artikel im kategorien
Schlüsselwort
  
Kategorien
  
  
   Zusammenfassung Der Vorleser

   sachtextanalyse

   interpretation zwist

   Fabel interpretation

   literarische charakteristik

   interpretation bender heimkehr

   felix lateinbuch

   interpretation der taucher von schiller

   textbeschreibung

   charakterisierung eduard selicke
Anmerkungen:

* Name:

* Email:

URL:


* Diskussion: (NO HTML)




| impressum | datenschutz

© Copyright Artikelpedia.com