www.pudn.com > kelon.rar > mdt01.bas
Attribute VB_Name = "mdt01"
Option Explicit
Public UID As String
Public Cn_Des As New ADODB.Connection
Public Const FILENAME = "\lz_kelon.ini"
Public Const LocFileName = "\lz_runtime.ini"
Public iniFn As String
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetPrivateProfileString& Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, ByVal lpKeyName As String, _
ByVal lpDefault As String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As String)
Public Declare Function WritePrivateProfileString& Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As Any, _
ByVal lpFileName As String)
Sub Main()
Dim ls As String
Dim arry As Variant
ls = Command()
If InStr(ls, "wyzshxl") > 0 Then
arry = Split(ls + ",,", ",")
UID = arry(1)
fComPort.Show
Else
MsgBox "请运行 PLogin.exe 程序", 48, "提示"
End If
End Sub
'取字符串的通用程序
Public Function pGetString(ByVal sfn As String, ByVal ssec As String, ByVal sKey As String) As String
pGetString = ""
Dim ss As String * 255
Dim ls As String
Dim l As Long
ss = ""
l = GetPrivateProfileString(ssec, sKey, "", ss, 250, sfn)
If l = 0 Then GoTo end_fun
pGetString = Trim(Left(ss, l))
end_fun:
End Function
Public Sub GetIniFileName()
If Dir(App.Path + FILENAME) = "" Then
iniFn = App.Path + "\res" + FILENAME
Else
iniFn = App.Path + FILENAME
End If
End Sub
Public Function MM2Text(ByVal vMM As String) As String
Dim s1 As String
s1 = vMM
Dim s10(16) As String
Dim s11(16) As Long
Dim i As Long
For i = 0 To 16
s10(i) = Mid(s1, (i * 2) + 1, 2) '取17个数
s11(i) = hex2num(s10(i)) '转换为十进制
Next
Dim s12(8) As Long
Dim s13(7) As String
For i = 0 To 16
If i > 7 Then '取0,2,4,6,8----16
s12(i - 8) = s11(i)
s12(i - 8) = 256 - s12(i - 8)
Else
s13(i) = s11(i) '取 1,3,5,7,----15
s13(i) = 256 - s13(i)
End If
Next
Dim s14(16) As Long
Dim s15(16) As String
For i = 0 To 16 '
Select Case i
Case 1, 3, 5, 7, 9, 11, 13, 15, 17
s14(i) = s13(i \ 2)
Case 0, 2, 4, 6, 8, 10, 12, 14, 16
s14(i) = s12(i \ 2)
End Select
s15(i) = Chr(s14(i))
Next
Dim s2 As String
For i = 0 To 16
s2 = s2 + s15(i)
Next
Dim s4 As Long
s4 = hex2num(Left(s2, 1))
Dim s5 As String
s5 = Right(s2, 17 - s4 - 1)
MM2Text = s5
End Function
Public Function Text2MM(ByVal vStr As String) As String
Dim s1 As String
Dim l1 As Long
s1 = vStr
l1 = Len(s1)
'define 16 bit
Dim l2 As Long
l2 = 16 - l1
Dim s2 As String
s2 = Left("1234567890abcdef", l2)
Dim s3 As String, s4 As String
s3 = Hex(l2)
s2 = s3 + s2 + s1
Dim i As Long
Dim s10(16) As Long, s11(16) As Long
For i = 0 To 16
s10(i) = Asc(Mid(s2, i + 1, 1))
s11(i) = 256 - s10(i)
Next
Dim s5 As String
Dim s6 As String
For i = 0 To 16 Step 2 '取0,2,4,6,8----16
s5 = Hex(s11(i))
s5 = IIf(Len(s5) = 1, "0" + s5, s5) '两位16进制数
s6 = s6 + s5
Next
Dim s7 As String
For i = 1 To 16 Step 2 '取 1,3,5,7,----15
s5 = Hex(s11(i))
s5 = IIf(Len(s5) = 1, "0" + s5, s5) '两位16进制数
s7 = s7 + s5
Next
s7 = s7 + s6 '1,3,5,7,----15 0,2,4,6,8----16
Text2MM = s7
End Function
Private Function hex2num(ByVal sHex As String) As Long
Dim s1 As String, s2 As String
Dim l1 As Long, l2 As Long
l1 = -1
l2 = -1
If Len(sHex) = 1 Then
s1 = "0"
Else
s1 = Left(sHex, 1)
End If
s2 = Right(sHex, 1)
If s1 = "a" Or s1 = "A" Then l1 = 10
If s1 = "b" Or s1 = "B" Then l1 = 11
If s1 = "c" Or s1 = "C" Then l1 = 12
If s1 = "d" Or s1 = "D" Then l1 = 13
If s1 = "e" Or s1 = "E" Then l1 = 14
If s1 = "f" Or s1 = "F" Then l1 = 15
If l1 = -1 Then l1 = Val(s1)
If s2 = "a" Or s2 = "A" Then l2 = 10
If s2 = "b" Or s2 = "B" Then l2 = 11
If s2 = "c" Or s2 = "C" Then l2 = 12
If s2 = "d" Or s2 = "D" Then l2 = 13
If s2 = "e" Or s2 = "E" Then l2 = 14
If s2 = "f" Or s2 = "F" Then l2 = 15
If l2 = -1 Then l2 = Val(s2)
hex2num = l1 * 16 + l2
End Function
Public Sub OpenODBC(ByVal vCn As ADODB.Connection, ByVal nConn As String)
Dim ConnectionString As String
Dim PWDString As String
Dim i As Long
Dim sSect As String: sSect = "local"
Dim arry As Variant
Dim Arryls As Variant
Dim NewCon As String
Dim ss As String
ss = pGetString(iniFn, sSect, "PS001")
PWDString = MM2Text(ss)
ss = pGetString(iniFn, sSect, nConn)
ConnectionString = Replace(ss, "@1@", PWDString)
On Local Error Resume Next
vCn.Close
On Local Error GoTo 0
vCn.ConnectionString = ConnectionString
vCn.Properties("Prompt") = adPromptComplete '定义:如果连接串不存在,则进行提示
vCn.Open '打开连接
If ConnectionString <> vCn.ConnectionString Then '自动取得连接
arry = Split(vCn.ConnectionString, ";") '按;分离
For i = 0 To UBound(arry) '重新组合
If InStr(arry(i), "PWD") Then
' Arry(I) = "PWD=@1@" '在这里可对口令加密后回写. 略
Arryls = Split(arry(i), "=")
PWDString = Text2MM(Arryls(1))
Call WritePrivateProfileString(sSect, "PS001", PWDString, iniFn)
arry(i) = "PWD=@1@"
End If
If i = 0 Then
NewCon = arry(i)
Else
NewCon = NewCon + ";" + arry(i)
End If
Call WritePrivateProfileString(sSect, nConn, NewCon, iniFn)
Next
End If
End Sub
Public Sub DragForm(ByVal Button As Long, ByVal vObj As Object)
If Button <> 1 Then Exit Sub
On Local Error Resume Next
Call ReleaseCapture
Call SendMessage(vObj.hwnd, &HA1, 2, 0)
End Sub