zoukankan      html  css  js  c++  java
  • VB6-AppendToLog 通过API写入日志

    工作中免不了需要为自己的程序添加日志,我也从网上扒拉了一个老外写的模块,修改修改了下,凑合用吧。

     1 Option Explicit
     2 '**************************************
     3 ' 模块名称: AppendToLog 通过API写入日志
     4 '**************************************
     5 'API 声明
     6 Private Const GENERIC_WRITE = &H40000000
     7 Private Const FILE_SHARE_READ = &H1
     8 Private Const Create_NEW = 1
     9 Private Const OPEN_EXISTING = 3
    10 Private Const FILE_ATTRIBUTE_NORMAL = &H80
    11 Private Const FILE_BEGIN = 0
    12 Private Const INVALID_HANDLE_VALUE = -1
    13 Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    14 Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
    15 Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
    16 Private Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
    17 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    18 
    19 '调用:Call AppendToLog("测试模块名","测试日志内容")
    20 '**************************************
    21 ' 方法名称: AppendToLog
    22 ' 输入参数:sMdl 模块名称 sMessage 日志内容
    23 '**************************************
    24 Public Sub AppendToLog(sMdl As String, sMessage As String)
    25 
    26 On Error GoTo Err:
    27 
    28     '获取计算机名、用户名、本机ip
    29     Dim LocalInfo As String
    30     Dim strLocalIP As String
    31     Dim winIP As Object
    32     LocalInfo = LocalInfo & "  Computer:" & Environ("computername")
    33     LocalInfo = LocalInfo & "  User:" & Environ("username")
    34     Set winIP = CreateObject("MSWinsock.Winsock")
    35     strLocalIP = winIP.LocalIP
    36     LocalInfo = LocalInfo & "  IP:" & strLocalIP
    37 
    38     Dim lpFileName As String
    39     lpFileName = App.Path + "Log"
    40     If Dir(lpFileName, vbDirectory) = "" Then
    41         MkDir (lpFileName)
    42     End If
    43     
    44     lpFileName = lpFileName + "" + Format(Now, "yyyymmdd") + ".log"
    45     
    46     sMessage = "--" + Format(Now, "yyyy-mm-dd hh:mm:ss") + "  模块:" + sMdl + LocalInfo + vbNewLine + sMessage + vbNewLine
    47     'appends a string to a text file.
    48     'it's up to the coder to add a CR/LF at the end
    49     'of the string if (s)he so desires.
    50     'assume failure
    51     'AppendToLog = False
    52     'exit if the string cannot be written to disk
    53     If Len(sMessage) < 1 Then Exit Sub
    54     'get the size of the file (if it exists)
    55     Dim fLen As Long: fLen = 0
    56     If (Len(Dir(lpFileName))) Then: fLen = FileLen(lpFileName)
    57     'open the log file, create as necessary
    58     Dim hLogFile As Long
    59     hLogFile = CreateFile(lpFileName, GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, _
    60         IIf(Len(Dir(lpFileName)), OPEN_EXISTING, Create_NEW), _
    61         FILE_ATTRIBUTE_NORMAL, 0&)
    62     'ensure the log file was opened properly
    63     If (hLogFile = INVALID_HANDLE_VALUE) Then Exit Sub
    64     'move file pointer to end of file if file was not created
    65     If (fLen <> 0) Then
    66         If (SetFilePointer(hLogFile, fLen, ByVal 0&, FILE_BEGIN) = &HFFFFFFFF) Then
    67             'exit sub if the pointer did not set correctly
    68             CloseHandle (hLogFile)
    69             Exit Sub
    70         End If
    71     End If
    72     'convert the source string to a byte array for use with WriteFile
    73     Dim lTemp As Long
    74     ReDim TempArray(0 To Len(sMessage) - 1) As Byte
    75     TempArray = StrConv(sMessage, vbFromUnicode)
    76     lTemp = UBound(TempArray) + 1
    77     'write the string to the log file
    78     If (WriteFile(hLogFile, TempArray(0), lTemp, lTemp, ByVal 0&) <> 0) Then
    79         'the data was written correctly
    80         'AppendToLog = True
    81     End If
    82     'flush buffers and close the file
    83     FlushFileBuffers (hLogFile)
    84     CloseHandle (hLogFile)
    85     Exit Sub
    86 Err:
    87     MsgBox "日志写入出错,原因是" + Err.Description, vbExclamation, "提示信息"
    88     
    89 End Sub
  • 相关阅读:
    主线程等待子线程结束再做响应
    前端开发注意细节
    XSS攻击前端需注意
    移动端开发碰到一个坑
    连续改变Chrome浏览器窗口大小,可以导致内存泄漏
    js中使用使用原型(prototype)定义方法的好处
    父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效
    CSS 中的 em单位
    观察者模式和发布/订阅模式的区别
    搜索练习4
  • 原文地址:https://www.cnblogs.com/yhsc/p/3874332.html
Copyright © 2011-2022 走看看