smartsuitefaq.martinholz.de

Einsatz von Windows API Funktionen

API = Application Programmer Interface
Diese Schnittstelle stellt recht umfangreiche Funktionen der Windowswelt zur Verfügung. Eine gute Übersicht der Vielfalt mit vielen Erklärungen fand ich auf AllAPI Network .
Die Anwendung der Schnittstelle soll hier an zwei kleinen Beispielen dargestellt werden.
Es werden keine Änderungen an der Registery vorgenommen, jedoch ist eine Datensicherung sehr zu empfehlen , bevor Sie damit "herumspielen".

1. User Namen
Die Datei Advapi32.dll stellt unter anderem eine Funktion mit der Bezeichnung GetUserNameA zur Verfügung. Damit LotusScript diese Funktion in der dll Datei auch aufrufen kann, muss diese vorher deklariert werden. Im Script Editor "Object: (Globals" und "Script (Declarations)" wird folgende Zeile hierzu eingetragen.

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (Byval lpBuffer As String, nSize As Long) As Long

Hier wird eine Funktion benannt, die mit "GetUserName" aufgerufen wird. Lotus Script findet den Programmcode hierzu in advapi32.dll unter Alias GetUserNameA. Es werden Parameter erwartet, einen Buffer in fixer Länger zur Aufnahme des Usernamens und die Länge des Buffers. Die Parameterübergabe ist etwas "ausführlicher" als in LotusScript. Das kommt daher, dass viele Funktionen in C geschrieben sind. Ein String oder Array wird hier anders übergeben. Vor allem ist Vorsicht mit dem Buffer geboten. Danach steht dem Einsatz aber nichts mehr im Wege.
Sub UserID
Dim lngRet As Long
Dim strUser As String *25
lngRet = GetUserName( strUser , Len(strUser) )
Print = strUser
End Function

2. Serien Nummer
Ein weiteres Beispiel wird in der Approach Datei aufgezeigt . Hier werden drei Funktionen und mehrere Konstanten im Deklarationsabschnitt festgelegt.
Unsere programmierte Funktion GetRegistery nutzt diese, um die Registery von Windows zu öffnen, einen Wert zu lesen und die Registery anschließend zu schließen. Das Ergebnis ist die Seriennummer der Lotus SmartSuite Installation.
Function GetRegistery As String
On Error Goto Errortrap
Dim lngHappkey As Long
Dim lngKey_Read As Long
Dim lngValueType As Long
Dim lngReadbytes As Long
lngReadBytes = 255
Dim lngRet As Long
Dim strValue As String
Dim strKeyName As String
Dim strValueName As String
Dim strReturnedKeyContents As String * 255
strReturnedKeycontents$=String$(255,Chr$(32))
strKeyName$="SOFTWARE\Lotus"
strValueName="SN"
lngRet = RegOpenKeyExA( HKEY_LOCAL_MACHINE, strKeyName$, 0, KEY_READ, lngHappkey)

lngRet = RegQueryValueExA( lngHappkey, strValueName, 0, lngValueType, strReturnedKeyContents, ngReadBytes )
RegCloseKey( lngHappkey)
strValue = Left$ ( strReturnedKeyContents$, lngReadBytes-1 )
strValue = Trim$( strValue )
If Len( strValue) <= 0 Then
strValue = "unbekannt"
End If
GetRegistery = strValue
Exit Function
Errortrap:
Messagebox "Fehler Nr.: " & Format$(Err, "#0") & " - Fehler Meldung: " & Error$, 16,"Fehlermeldung"
Resume Next
End Function

Die hier gezeigten Beispiele sind in allen Programmteilen von Lotus SmartSuite und Lotus Script einsetzbar. Man könnte den Windows User mit einem Datensatz speichern oder die Seriennummer abfragen und die Anwendung sperren, falls es sich um eine andere Lotus SmartSuite Installation handelt. Die Funktion GetRegistery könnte um einen Übergabeparameter erweitert werden um weitere Schlüssel der Registery abzufragen.
In der Beispielanwendung habe ich zwei Funktionen verwendet, anders als hier im Text "nur" eine Sub. Funktionen haben einen Rückgabewert und können deshalb nicht im Editor mit F5 gestartet werden. Daher wird im Event Sub Click der Schaltfläche "Eintragung" folgendes Script eingesetzt.

Sub Click(Source As Button, X As Long, Y As Long, Flags As Long)
CurrentView.Body.SerienNr.Text = GetRegistery()
CurrentView.Body.WinUser.Text = UserID
()End Sub

GetRegistery und UserID sind die erstellten Funktionen. Deren Rückgabewert wird direkt in das Datenfeld SerienNr und WinUser eingetragen.

In der Beispielanwendung aus Approach Registery.zip sehen Sie die Einsatzmöglichkeiten. Für Fragen und Anregungen stehe ich Ihnen zur Verfügung.

Über diesen ArtikelArtikelbewertung
Stand: 30.06.2004
Autor(en): Cornelius Kömpel
Durchschnittsnote: 2
1 2 3 4 5 6