Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196154
  • 博文数量: 106
  • 博客积分: 3810
  • 博客等级: 中校
  • 技术积分: 1007
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 13:35
文章分类

全部博文(106)

文章存档

2014年(17)

2011年(5)

2010年(75)

2009年(9)

我的朋友

分类:

2010-04-29 22:57:39

Option Explicit
'*****************************************************************
'
*              通用模块,建立于2005年11月10日                   *
'
*                                                               *
'
* wstar *
'
*****************************************************************

'打开、另存文件对话框
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Declare
Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Type OPENFILENAME
     lStructSize
As Long
     hwndOwner
As Long
     hInstance
As Long
     lpstrFilter
As String
     lpstrCustomFilter
As String
     nMaxCustFilter
As Long
     nFilterIndex
As Long
     lpstrFile
As String
     nMaxFile
As Long
     lpstrFileTitle
As String
     nMaxFileTitle
As Long
     lpstrInitialDir
As String
     lpstrTitle
As String
     flags
As Long
     nFileOffset
As Integer
     nFileExtension
As Integer
     lpstrDefExt
As String
     lCustData
As Long
     lpfnHook
As Long
     lpTemplateName
As String
End Type

'打开目录对话框
Public Declare Function SHGetPathFromIDList Lib "Shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Declare Function SHBrowseForFolder Lib "Shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Type BROWSEINFO
   hOwner          
As Long
   pidlRoot        
As Long
   pszDisplayName  
As String
   lpszTitle       
As String
   ulFlags         
As Long
   lpfn            
As Long
   lParam          
As Long
   iImage          
As Long
End Type
Public Const BIF_RETURNONLYFSDIRS = &H1
Public pidl As Long

'读取INI文件
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

'移动、复制、删除目录
Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Type SHFILEOPSTRUCT
hwnd
As Long '窗口句柄
wFunc As Long '执行的操作
pFrom As String '原地点
pTo As String '目标地点
fFlags As Long '操作执行方式
fAnyOperationsAborted As Long '错误代码返回
hNameMappings As Long
lpszProgressTitle
As String
End Type
Public Const FO_MOVE As Long = &H1
Public Const FO_COPY As Long = &H2
Public Const FO_DELETE As Long = &H3
Public Const FO_RENAME As Long = &H4
Public Const FOF_MULTIDESTFILES As Long = &H1
Public Const FOF_CONFIRMMOUSE As Long = &H2
Public Const FOF_SILENT As Long = &H4
Public Const FOF_RENAMEONCOLLISION As Long = &H8
Public Const FOF_NOCONFIRMATION As Long = &H10
Public Const FOF_WANTMAPPINGHANDLE As Long = &H20
Public Const FOF_CREATEPROGRESSDLG As Long = &H0
Public Const FOF_ALLOWUNDO As Long = &H40
Public Const FOF_FILESONLY As Long = &H80
Public Const FOF_SIMPLEPROGRESS As Long = &H100
Public Const FOF_NOCONFIRMMKDIR As Long = &H200

'读写注册表
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002

Function wReadIni(wAppName As String, wKeyName As String, wIniFilePath As String) As String
  
Dim RetStr As String
   RetStr
= String(255, Chr(0))
   wReadIni
= Left(RetStr, GetPrivateProfileString(wAppName, ByVal wKeyName, "", RetStr, Len(RetStr), wIniFilePath))
End Function

Function wWriteIni(wAppName As String, wKeyName As String, wText As String, wIniFilePath As String) As Long
   wWriteIni
= WritePrivateProfileString(wAppName, wKeyName, wText, wIniFilePath)
End Function

Function wCutFolder(wSource As String, wDestination As String, wHwnd As Long) As Long
   
Dim DelFileOp As SHFILEOPSTRUCT
   
   
With DelFileOp
        .hwnd
= wHwnd
       
        .wFunc
= FO_MOVE '(这三行代码完成移动)
        .pFrom = wSource & vbNullChar & vbNullChar
        .pTo
= wDestination
       
        .fFlags
= FOF_NOCONFIRMATION
   
End With
    wCutFolder
= SHFileOperation(DelFileOp)
End Function

Function wCopyFolder(wSource As String, wDestination As String, wHwnd As Long) As Long
   
Dim DelFileOp As SHFILEOPSTRUCT
   
   
With DelFileOp
        .hwnd
= wHwnd
       
        .wFunc
= FO_COPY '(这三行代码完成拷贝)
        .pFrom = wSource & vbNullChar & vbNullChar
        .pTo
= wDestination
       
        .fFlags
= FOF_NOCONFIRMATION
   
End With
    wCopyFolder
= SHFileOperation(DelFileOp)
End Function
Function wDelFolder(wFoldPath As String, wHwnd As Long) As Long
   
Dim DelFileOp As SHFILEOPSTRUCT
   
   
With DelFileOp
        .hwnd
= wHwnd
       
        .wFunc
= FO_DELETE '(这两行代码完成删除)
        .pFrom = wFoldPath & vbNullChar & vbNullChar
       
        .fFlags
= FOF_NOCONFIRMATION
   
End With
    wDelFolder
= SHFileOperation(DelFileOp)
End Function

Function wSelectFolder(wCaption As String, wHwnd As Long) As String
   
Dim bi As BROWSEINFO
   
Dim r As Long
   
Dim pidl As Long
   
Dim path As String
   
Dim pos As Integer
   
'句柄
    bi.hOwner = wHwnd
   
'展开根目录
    bi.pidlRoot = 0&
   
'列表框标题
    bi.lpszTitle = wCaption
   
'规定只能选择文件夹,其他无效
    bi.ulFlags = BIF_RETURNONLYFSDIRS
   
'调用API函数显示列表框
    pidl = SHBrowseForFolder(bi)
   
'利用API函数获取返回的路径
    path = Space$(512)
    r
= SHGetPathFromIDList(ByVal pidl&, ByVal path)
   
If r Then
          pos
= InStr(path, Chr$(0))
          wSelectFolder
= Left(path, pos - 1)
   
Else
          wSelectFolder
= ""
   
End If
End Function

Function wOpenFile(wCaption As String, wFilter As String, wHwnd As Long) As String
   
Dim ofn As OPENFILENAME
   
Dim rtn As String

    ofn.lStructSize
= Len(ofn)
    ofn.hwndOwner
= wHwnd
    ofn.hInstance
= App.hInstance
    ofn.lpstrFilter
= wFilter
   
'"文本文件 (*.TXT)" + Chr$(0) + "*.TXT" + Chr$(0) + "所有文件 (*.*)" + Chr$(0) + "*.*" + Chr$(0)
    ofn.lpstrFile = Space(254)
    ofn.nMaxFile
= 255
    ofn.lpstrFileTitle
= Space(254)
    ofn.nMaxFileTitle
= 255
    ofn.lpstrInitialDir
= App.path
    ofn.lpstrTitle
= wCaption
    ofn.flags
= 6148

    rtn
= GetOpenFileName(ofn)

   
If rtn >= 1 Then
        wOpenFile
= ofn.lpstrFile
   
Else
        wOpenFile
= ""
   
End If
End Function
 
Function wSaveFile(wCaption As String, wFilter As String, wHwnd As Long) As String
   
Dim i As Integer
   
Dim ofn As OPENFILENAME
   
Dim filename As String
ofn.lStructSize = Len(ofn)
    ofn.hwndOwner
= wHwnd ofn.hInstance = App.hInstance
    ofn.lpstrFile
= Space(254)
    ofn.nMaxFile
= 255
    ofn.lpstrFileTitle
= Space(254)
    ofn.nMaxFileTitle
= 255
    ofn.lpstrInitialDir
= App.path
    ofn.flags
= 6148
   
'过虑对话框文件类型
    ofn.lpstrFilter = wFilter
   
'"文本文件 (*.TXT)" + Chr$(0) + "*.TXT" + Chr$(0) + "所有文件 (*.*)" + Chr$(0) + "*.*" + Chr$(0)
   
   
'对话框标题栏文字
    ofn.lpstrTitle = wCaption
    i
= GetSaveFileName(ofn) '显示保存文件对话框
    If i >= 1 Then '取得对话中用户选择输入的文件名及路径
        filename = ofn.lpstrFile
        wSaveFile
= Left(filename, InStr(filename, Chr(0)) - 1)
   
End If
End Function

Function wReadReg(wMainKey As Long, wKeySubPath As String, wSubKey As String) As Variant '参数顺序为:根键,子路径主键,键名
    Dim rqveValue, apiFunHandle, apiFunData, apiFunType As Long
   
Dim srqvStr As String
   
If RegOpenKeyEx(wMainKey, wKeySubPath, 0&, &H20019, apiFunHandle) <> 0& Then Exit Function
   
    rqveValue
= RegQueryValueEx(apiFunHandle, wSubKey, 0&, apiFunType, ByVal srqvStr, apiFunData)
    srqvStr
= Space(apiFunData)
    rqveValue
= RegQueryValueEx(apiFunHandle, wSubKey, 0&, apiFunType, ByVal srqvStr, apiFunData)
   
   
If RegCloseKey(apiFunHandle) <> 0& Then apiFunType = -1&
    wReadReg
= srqvStr
End Function

Function wWriteReg(wMainKey As Long, wKeySubPath As String, ParamArray SKnKV()) As Boolean '参数顺序为:根键、子路径主键、要建立的键名,键值列表,(可以一次调用本函数来建立多个同路径的键名,但键值只能为字符串,一只调用最多是16383个),如果写入正确,则函数返回true
    Dim KeyLong As Long
   
Dim Revalue As Long
   
Dim Keyvalue As String
   
Dim Sk() As String, Kv() As String
   
Dim SkKvNum As Integer
   
Dim i As Integer, Scl As Integer
    SkKvNum
= (UBound(SKnKV) + 1) / 2
   
ReDim Sk(SkKvNum)
   
ReDim Kv(SkKvNum)
   
For i = 1 To SkKvNum
        Sk(i)
= SKnKV(Scl)
        Scl
= Scl + 1
        Kv(i)
= SKnKV(Scl)
        Scl
= Scl + 1
   
Next
    Revalue
= RegCreateKey(wMainKey, wKeySubPath, KeyLong)
   
For i = 1 To SkKvNum
        Revalue
= RegSetValueEx(KeyLong, Sk(i), 0&, 1, ByVal Kv(i), Len(Kv(i)) + 1)
   
Next
    wWriteReg
= True
   
If Err <> 0 Then
        Err
= 0
        wWriteReg
= False
   
End If
End Function

Function wProgress(wPictureBox As Control, ByVal wPercent)
   
Dim Num As String
   
Dim BarString As String
   
If Not wPictureBox.AutoRedraw Then
        wPictureBox.AutoRedraw
= -1
   
End If
    wPictureBox.Cls
    wPictureBox.ScaleWidth
= 100
    wPictureBox.DrawMode
= 10
    Num
= BarString & Format$(wPercent, "###") + "%"
    wPictureBox.CurrentX
= 50 - wPictureBox.TextWidth(Num) / 2
    wPictureBox.CurrentY
= (wPictureBox.ScaleHeight - wPictureBox.TextHeight(Num)) / 2
    wPictureBox.Print Num
    wPictureBox.Line (
0, 0)-(wPercent, wPictureBox.ScaleHeight), RGB(22, 17, 238), BF
    wPictureBox.Refresh
End Function

阅读(520) | 评论(0) | 转发(0) |
0

上一篇:进制转换

下一篇:遍历目录中的所有文件

给主人留下些什么吧!~~