API-Benutzung unter VB by SnakeByte www.kryptocrew.de/snakebyte/ Ok, auch ich will hiermit meinen Beitrag zu diesem Zine leisten.. ;) Viele meckern darüber, das man mit VB nicht allzuviel machen kann, hiermit will ich das Gegenteil beweisen, und auch ein paar VB-Codern die Angst vor den Windows-API's nehmen. Wiso sollte man API's benutzen ? Der Vorteil liegt ganz klar auf der Hand, man kann vieles berwerkstelligen wozu die Befehle von VB oder die OCX's nicht ausreichen. Auch sind API's schneller als normale VB Befehle und der Code wird kleiner. Was brauchen wir um mit API's zu coden ? - Visual Basic .. ;) - Windows API-Referenz ( von microsoft.com oder coderz.net downloaden ) - API-Text Viewer ( ist bei VB dabei ) Ok, los gehts... fangen wir mit etwas einfachem an, das typische "Hello World" *g* Ok, der Msgebox-Befehl ist einfacher aber als Beispiel ist das hier auch Ok.. ;) Kucken wir zuerst mal in unsrere API-Referenz nach dem Befehl MessageBox Da finden wir folgendes: int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box ); Dies sind also die Parameter die wir übergeben müssen. Weiter unten stehen dann auch genauere Beschreibungen der einzelnen Parameter. In dem API-Text Viewer finden wir bei Declarations / MessageBox folgendes: [Normalerweise in einer Zeile,.. ] Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long Diese Deklaration kopieren wir in ein Modul. Dann können wir überall in unserem Programm diesen API verwenden. Wie geht das nun ? Dim x As Long x = MessageBox(0, "Hello World", "WoW", &H0&) Wir setzen hWnd = 0, die Messagebox hat kein Owner, dann kommt unser Text, die Fensterüberschrift und zuletzt das Aussehen des Fensters, hier nur ein OK-Button. Was steht nun in x ? X ist der Wiedergabewert des Fensters. Wenn X = 0 ist, war nicht genug Speicher vorhanden um das Fenster zu öffnen. Ansonsten steht in x der Wert des Buttons den der Anwender gedrückt hat. Die möglichen Werte, die uType annehmen kann stehen in der API-Referenz: Specify one of the following flags to indicate the buttons contained in the message box: Flag Meaning MB_ABORTRETRYIGNORE The message box contains three push buttons: Abort, Retry, and Ignore. MB_OK The message box contains one push button: OK. This is the default. MB_OKCANCEL The message box contains two push buttons: OK and Cancel. MB_RETRYCANCEL The message box contains two push buttons: Retry and Cancel. MB_YESNO The message box contains two push buttons: Yes and No. MB_YESNOCANCEL The message box contains three push buttons: Yes, No, and Cancel. Specify one of the following flags to display an icon in the message box: Flag Meaning MB_ICONEXCLAMATION, MB_ICONWARNING An exclamation-point icon appears in the message box. MB_ICONINFORMATION, MB_ICONASTERISK An icon consisting of a lowercase letter i in a circle appears in the message box. MB_ICONQUESTION A question-mark icon appears in the message box. MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND A stop-sign icon appears in the message box. Um nun den Wert dieser Konstanten rauszufinden müssen wir wieder in den API Viewer kucken, diesmal unter Constants. Dort bekommen wir dann den entsprechenden Wert gesagt. Einfach oder ?? Was ihr noch beachten solltet, ist das ihr wenn ihr die zu übergebenden Werte nicht direkt in die Anweisung schreibt, ihr alle Variablen definiert, ansonsten kann es öfters zu SEH-Fenstern kommen, die euch Fehler anzeigen.