Option Strict Off Option Explicit On Module Matrix '****************************************************************** '* MATRIX.VB '* Example for VisualBasic.NET '* '* Copyright (C) TDi GmbH '****************************************************************** Structure DNGINFO Dim LPT_Nr As Short Dim LPT_Adr As Short Dim DNG_Cnt As Short End Structure Dim RetCode As Short Dim xBuffer(3) As DNGINFO Dim DataIn(256) As Integer Dim DataOut(256) As Integer Dim KeyData(4) As Integer Dim DataBlock(2) As Integer Dim DNG_LPTADR As Short Dim DNG_Count As Short Dim DNG_Nummer As Short Dim DNG_Mem As Short Dim DNG_MaxVar As Short Dim DNG_Version As Integer Dim DNG_SerNr As Integer Dim VerMajor As Short Dim VerMinor As Short Dim AppSlot As Short Const Shift16 As Integer = 2 ^ 16 '*********************************************************** '* In this example we use the demo UserCode 1234 and the * '* LPT-Port 1. * '* - Set DNG_Port = 85, if you like to test the USB dongle * '*********************************************************** Const UserCode As Short = 1234 Dim DNG_Port As Short Declare Function Init_MatrixAPI Lib "matrix32.dll" () As Short Declare Function Release_MatrixAPI Lib "matrix32.dll" () As Short Declare Function GetVersionAPI Lib "matrix32.dll" () As Integer Declare Function GetVersionDRV Lib "matrix32.dll" () As Integer Declare Function GetVersionDRV_USB Lib "matrix32.dll" () As Integer Declare Function PausePrinterActivity Lib "matrix32.dll" () As Short Declare Function ResumePrinterActivity Lib "matrix32.dll" () As Short Declare Function GetPortAdr Lib "matrix32.dll" (ByVal DNG_Port As Short) As Short Declare Function Dongle_Find Lib "matrix32.dll" () As Short 'UPGRADE_WARNING: FE die Struktur DNGINFO mEsen Marshalling-Attribute möglicherweise als ein Argument in dieser Declare-Anweisung weitergegeben werden. Klicken Sie hier fE weitere Informationen: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"' Declare Function Dongle_FindEx Lib "matrix32.dll" (ByRef xBuffer As DNGINFO) As Short Declare Function Dongle_Count Lib "matrix32.dll" (ByVal DNG_Port As Short) As Short Declare Function Dongle_Version Lib "matrix32.dll" (ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Integer Declare Function Dongle_Model Lib "matrix32.dll" (ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_MemSize Lib "matrix32.dll" (ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_ReadData Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataIn As Integer, ByVal MaxVar As Short, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_ReadDataEx Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataIn As Integer, ByVal Fpos As Short, ByVal MaxVar As Short, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_WriteData Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataOut As Integer, ByVal MaxVar As Short, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_WriteDataEx Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataOut As Integer, ByVal Fpos As Short, ByVal MaxVar As Short, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_WriteKey Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef KeyData As Integer, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_ReadSerNr Lib "matrix32.dll" (ByVal UserCode As Integer, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Integer Declare Function Dongle_EncryptData Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataBlock As Integer, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function Dongle_DecryptData Lib "matrix32.dll" (ByVal UserCode As Integer, ByRef DataBlock As Integer, ByVal DNG_Nummer As Short, ByVal DNG_Port As Short) As Short Declare Function SetConfig_MatrixNet Lib "matrix32.dll" (ByVal nAccess As Short, ByVal nFile As String) As Short Declare Function LogIn_MatrixNet Lib "matrix32.dll" (ByVal UserCode As Integer, ByVal AppSlot As Short, ByVal DNG_Nr As Short) As Short Declare Function LogOut_MatrixNet Lib "matrix32.dll" (ByVal UserCode As Integer, ByVal AppSlot As Short, ByVal DNG_Nr As Short) As Short Public Sub SetActivePort(ByRef Port As Object) DNG_Port = 0 Select Case Port Case "LPT1" DNG_Port = 1 Case "LPT2" DNG_Port = 2 Case "LPT3" DNG_Port = 3 Case "USB" DNG_Port = 85 End Select End Sub Public Sub LPT_Port_Exists() If DNG_Port = 85 Then '* USB * MsgBox("DNG_Port=85 (USB)" & Chr(13) & "This function works only with LPT-Ports!") Exit Sub End If RetCode = Init_MatrixAPI() '*********************************************************** '* Check whether the LPT port DNG_Port is available * '*********************************************************** DNG_LPTADR = GetPortAdr(DNG_Port) If DNG_LPTADR = 0 Then MsgBox("LPT" & DNG_Port & " not available!") Else MsgBox("The Address of LPT" & DNG_Port & " is: " & "0x" & Hex(DNG_LPTADR)) End If RetCode = Release_MatrixAPI() End Sub Public Sub Number_of_Dongles() RetCode = Init_MatrixAPI() '*********************************************************** '* Search for number of Dongles at DNG_Port * '*********************************************************** DNG_Count = Dongle_Count(DNG_Port) If DNG_Count <= 0 Then MsgBox("There is no Dongle at Port " & DNG_Port & " available!") Else MsgBox("Found: " & DNG_Count & " Dongles at Port " & DNG_Port) End If RetCode = Release_MatrixAPI() End Sub Public Sub Dongle_Find_Ex() Dim i As Object Dim MessageString As String RetCode = Init_MatrixAPI() '*********************************************************** '* Search all LPT-Dongles * '*********************************************************** RetCode = Dongle_FindEx(xBuffer(0)) If RetCode <= 0 Then MsgBox("No LPT Ports available!") RetCode = Release_MatrixAPI() Exit Sub Else MessageString = "Found: " & RetCode & " LPT-Ports" & Chr(13) & Chr(13) For i = 1 To RetCode 'UPGRADE_WARNING: Die Standardeigenschaft des Objekts i konnte nicht aufgelöst werden. Klicken Sie hier fE weitere Informationen: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"' MessageString = MessageString & "Address of LPT" & i & ": " & "0x" & Hex(xBuffer(i - 1).LPT_Adr) & Chr(13) & "Dongles at LPT" & i & " : " & xBuffer(i - 1).DNG_Cnt & Chr(13) & Chr(13) Next i End If MsgBox(MessageString) RetCode = Release_MatrixAPI() End Sub Public Sub Memory_of_Dongle() RetCode = Init_MatrixAPI() '*********************************************************** '* Read memory size of last Dongle at DNG_Port and * '* calculate the maximum number of data fields * '*********************************************************** DNG_Nummer = Dongle_Count(DNG_Port) DNG_Mem = Dongle_MemSize(DNG_Nummer, DNG_Port) If DNG_Mem <= 0 Then MsgBox("Error while determining Dongle memory!") Exit Sub End If DNG_MaxVar = DNG_Mem / 4 MsgBox("Number of variables of this Dongle: " & DNG_MaxVar) RetCode = Release_MatrixAPI() End Sub Public Sub Version_of_Dongle() RetCode = Init_MatrixAPI() '*********************************************************** '* Read Dongle version from last Dongle at DNG_Port * '*********************************************************** DNG_Nummer = Dongle_Count(DNG_Port) DNG_Version = Dongle_Version(DNG_Nummer, DNG_Port) If DNG_Version <= 0 Then MsgBox("Error while reading Dongle version!") Else VerMinor = CShort(DNG_Version And 65535) VerMajor = CShort(DNG_Version \ Shift16) MsgBox("This Dongle has the version number: " & VerMajor & "." & VerMinor) End If RetCode = Release_MatrixAPI() End Sub Public Sub Read_Dongle_SerNr() RetCode = Init_MatrixAPI() '*********************************************************** '* Read the SerialNo. of last Dongle at DNG_Port via * '* UserCode and display. * '*********************************************************** DNG_Nummer = Dongle_Count(DNG_Port) DNG_SerNr = Dongle_ReadSerNr(UserCode, DNG_Nummer, DNG_Port) If DNG_SerNr < 0 Then MsgBox("Error " & DNG_SerNr & " while reading the Dongle SerialNo.!") RetCode = Release_MatrixAPI() Exit Sub End If MsgBox("SerialNo. of the Dongle: (dec) " & DNG_SerNr & " (hex) " & Hex(DNG_SerNr)) RetCode = Release_MatrixAPI() End Sub Public Sub Read_Dongle_Data() Dim i As Object Dim MessageString As String RetCode = Init_MatrixAPI() '*********************************************************** '* Read 3 data fields from last Dongle at DNG_Port via * '* UserCode and display. * '*********************************************************** DNG_Nummer = Dongle_Count(DNG_Port) RetCode = Dongle_ReadData(UserCode, DataIn(0), 3, DNG_Nummer, DNG_Port) If RetCode < 0 Then MsgBox("Error " & RetCode & " while reading the Dongle data!") RetCode = Release_MatrixAPI() Exit Sub End If MessageString = "Content of dongle variables: " & Chr(13) & Chr(13) For i = 0 To 2 'UPGRADE_WARNING: Die Standardeigenschaft des Objekts i konnte nicht aufgelöst werden. Klicken Sie hier fE weitere Informationen: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"' MessageString = MessageString & "Var" & VB6.Format(i + 1, "0000") & ": " & DataIn(i) & Chr(13) Next i MsgBox(MessageString) RetCode = Release_MatrixAPI() End Sub Public Sub Write_Dongle_Data() Dim i As Object RetCode = Init_MatrixAPI() '*********************************************************** '* Save 3 data fields in last Dongle at DNG_Port via * '* UserCode. The values 101,102,103 are saved as example * '*********************************************************** DNG_Nummer = Dongle_Count(DNG_Port) For i = 0 To 2 'UPGRADE_WARNING: Die Standardeigenschaft des Objekts i konnte nicht aufgelöst werden. Klicken Sie hier fE weitere Informationen: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"' DataOut(i) = 101 + i Next i RetCode = Dongle_WriteData(UserCode, DataOut(0), 3, DNG_Nummer, DNG_Port) If RetCode < 0 Then MsgBox("Error " & RetCode & " while writing Dongle data!") Else MsgBox("The Dongle data have been written successfully!") End If RetCode = Release_MatrixAPI() End Sub Public Sub Dongle_Encrypt_Decrypt() Dim MessageString As String RetCode = Init_MatrixAPI() DataBlock(0) = 1234567890 '* Clear Data * DataBlock(1) = 1234567890 '* Clear Data * MessageString = "Clear Data: " & vbTab & "(dec) " & DataBlock(0) & vbTab & " " & DataBlock(1) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(DataBlock(0)) & vbTab & " " & Hex(DataBlock(1)) & Chr(13) & Chr(13) DNG_Nummer = Dongle_Count(DNG_Port) '*********************************************************** '* Encrypt DataBlock over the Dongle * '*********************************************************** RetCode = Dongle_EncryptData(UserCode, DataBlock(0), DNG_Nummer, DNG_Port) If RetCode < 0 Then MsgBox("Error " & RetCode) RetCode = Release_MatrixAPI() Exit Sub End If MessageString = MessageString & "Encrypted Data: " & vbTab & "(dec) " & DataBlock(0) & vbTab & " " & DataBlock(1) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(DataBlock(0)) & vbTab & " " & Hex(DataBlock(1)) & Chr(13) & Chr(13) '*********************************************************** '* Decrypt DataBlock over the Dongle * '*********************************************************** RetCode = Dongle_DecryptData(UserCode, DataBlock(0), DNG_Nummer, DNG_Port) If RetCode < 0 Then MsgBox("Error " & RetCode) RetCode = Release_MatrixAPI() Exit Sub End If MsgBox(MessageString & "Decrypted Data: " & vbTab & "(dec) " & DataBlock(0) & vbTab & " " & DataBlock(1) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(DataBlock(0)) & vbTab & " " & Hex(DataBlock(1)) & Chr(13) & Chr(13)) RetCode = Release_MatrixAPI() End Sub Public Sub Version_of_API() Dim RetVer As Integer RetCode = Init_MatrixAPI() '*********************************************************** '* Read the version of the Matrix-API * '*********************************************************** RetVer = GetVersionAPI() If RetVer = 0 Then MsgBox("Error while reading API version!") Else VerMinor = CShort(RetVer And 65535) VerMajor = CShort(RetVer \ Shift16) MsgBox("The Matrix-API have the version: " & VerMajor & "." & VerMinor) End If RetCode = Release_MatrixAPI() End Sub Public Sub Dongle_Network() '************************************************************* '* Network * '* Example: the dongle is prepared with the value 7 in * '* Var0002, meaning AppSlot=2 and max. Users = 7 * '* (AppSlot2 = max. 7 Users) * '************************************************************* RetCode = Init_MatrixAPI() '************************************************************* '* Max. Users stored in AppSlot 2 (Var0002 of the dongle) * '************************************************************* AppSlot = 2 '************************************************************* '* Activate Network access into the Matrix-API * '************************************************************* Dim MxNetFile As String MxNetFile = "D:\TEMP\MXNET2.DAT" RetCode = SetConfig_MatrixNet(1, MxNetFile) '************************************************************* '* Read the Dongle count from MxNetFile * '* !! DNG_Port will be ignored in the Network mode !! * '************************************************************* DNG_Nummer = Dongle_Count(DNG_Port) '************************************************************* '* LogIn will lock one User-Slot and the returned value is * '* the remaining free User-Slots (for our Example RetCode=6) * '************************************************************* RetCode = LogIn_MatrixNet(UserCode, AppSlot, DNG_Nummer) If RetCode < 0 Then If RetCode = -31 Then MsgBox("All Users are active!" & Chr(13) & "No more User-Slots free") Else MsgBox("LogIn failed ! " & RetCode) End If Else MsgBox("LogIn successfull ! Free User-Slots: " & RetCode & Chr(13) & Chr(13) & "Now you can check the Active Users List in MxNet-Server." & Chr(13) & "After clicking the OK button, the User will be Logged Out and" & Chr(13) & "removed from the Active Users List in MxNet-Server.") End If '************************************************************* '* LogOut will free the User-Slot and the returned value is * '* the remaining free User-Slots (for our Example RetCode=7) * '************************************************************* RetCode = LogOut_MatrixNet(UserCode, AppSlot, DNG_Nummer) If RetCode < 0 Then MsgBox("LogOut failed ! " & RetCode) Else MsgBox("LogOut successfull ! Free User-Slots: " & RetCode) End If '************************************************************* '* Deactivate Network access into the Matrix-API * '************************************************************* RetCode = SetConfig_MatrixNet(0, vbNullString) RetCode = Release_MatrixAPI() End Sub Public Sub App_Encrypt() Dim MessageString As String Dim Key(4) As Integer Dim Data(2) As Integer Data(0) = &H499602D2 Data(1) = &H499602D2 Key(0) = &H423A612E Key(1) = &H423A8C95 Key(2) = &H8474C25C Key(3) = &H8474EDC3 MessageString = "Clear Data: " & vbTab & "(dec) " & Data(0) & vbTab & " " & Data(1) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(Data(0)) & vbTab & " " & Hex(Data(1)) & Chr(13) & Chr(13) & "Key: " & vbTab & "(dec) " & Key(0) & vbTab & " " & Key(1) & vbTab & " " & Key(2) & vbTab & Key(3) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(Key(0)) & vbTab & " " & Hex(Key(1)) & vbTab & " " & Hex(Key(2)) & vbTab & Hex(Key(3)) & Chr(13) & Chr(13) Call MxApp_Encrypt(Data, Key) '*** Display Data(0)/Data(1) as Long *** MsgBox(MessageString & "Encrypted Data: " & vbTab & "(dec) " & Data(0) & vbTab & " " & Data(1) & Chr(13) & vbTab & vbTab & "(hex) " & Hex(Data(0)) & vbTab & " " & Hex(Data(1)) & Chr(13) & Chr(13)) End Sub End Module