VBFunctionBas/System.bas

238 lines
9.2 KiB
QBasic
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Attribute VB_Name = "System"
'#######################################用户控件说明#########################################
'名称:系统控件
'功能:获取系统信息
'最后更新日期:2014年12月8日
'创建人:蒋天蓓
'单位:上海市定海水电工程安装有限公司
''====================================用户控件使用说明=======================================
Option Explicit
''================================API调用打开文件窗口=========================================
'调用“打开”窗体
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 'API调用打开
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long 'API调用打开
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 'API调用打开
Private Const MAX_PATH As Long = 260
''================================获得进程最高权限=========================================
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS = &H1F0FFF '全权打开进程
''================================删除文件=========================================
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Private Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAborted As Boolean
hNameMaps As Long
sProgress As String
End Type
Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40 ' 移入回收站
Private Const FOF_CONFIRMMOUSE = &H2 ' 删除。不放入回收站
Private Const FOF_NOCONFIRMATION = &H10 ' 没有提示
''#####################################################模块代码#####################################################
'#############################################控件函数模块#################################################
'**********************************************************************************************************
'***过程名DeleteFolder
'***功 能 :删除一个文件或文件夹。该过程可以删除非空的文件夹
'***输入值:(文件夹或文件名称 As String)
'***输出值NULL
'***说 明NULL
'**********************************************************************************************************
Public Sub DeleteFolder(sObject As String)
Dim SHFileOp As SHFILEOPSTRUCT
With SHFileOp
.wFunc = FO_DELETE
.pFrom = sObject
.fFlags = FOF_CONFIRMMOUSE Or FOF_NOCONFIRMATION
End With
SHFileOperation SHFileOp
End Sub
'**********************************************************************************************************
'***过程名GetFilePath
'***功 能 API调用打开窗口
'***输入值:(PID As Long)
'***输出值String
'***说 明NULL
'**********************************************************************************************************
Public Function GetFilePath(ByVal hWnd As Long, _
Optional ByVal DefaultFile As String, _
Optional ByVal DefaultFilterStr As String, _
Optional ByVal DefaultFilter As String, _
Optional ByVal DefaultTitle As String, Optional ByVal DefaultPath As String) As String
Dim ofn As OPENFILENAME
Dim rtn As Long
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = hWnd
ofn.hInstance = App.hInstance
If DefaultFilter & DefaultFilterStr <> "" Then
ofn.lpstrFilter = DefaultFilterStr & "(" & DefaultFilter & ")" + Chr$(0) + DefaultFilter + Chr$(0) + _
"所有文件 (*.*)" + Chr$(0) + "*.*" + Chr$(0) + Chr$(0)
Else
ofn.lpstrFilter = "所有文件 (*.*)" + Chr$(0) + "*.*" + Chr$(0) + Chr$(0)
End If
ofn.lpstrFile = DefaultFile + Space(255 - Len(DefaultFile)) '这里可以改一个默认的文件名
ofn.nMaxFile = MAX_PATH
ofn.lpstrFileTitle = Space(255)
ofn.nMaxFileTitle = MAX_PATH
ofn.lpstrInitialDir = DefaultPath
ofn.lpstrTitle = DefaultTitle
ofn.Flags = 6148
rtn = GetOpenFileName(ofn)
If rtn >= 1 Then GetFilePath = ofn.lpstrFile Else GetFilePath = ""
End Function
'**********************************************************************************************************
'***过程名CheckPid
'***功 能 检查PID是否存活
'***输入值:(PID As Long)
'***输出值Boolean
'***说 明NULL
'**********************************************************************************************************
Public Function CheckPid(ByVal PID As Long) As Boolean
Dim info As Long
info = OpenProcess(PROCESS_ALL_ACCESS, &O0, PID)
If info = 0 Then
CheckPid = False
Else
CloseHandle CheckPid
CloseHandle PID
CheckPid = True
End If
End Function
Public Function GetSystemPath() As String
Dim aa$, jj%
aa = Environ("ComSpec")
jj = InStrRev(aa, "\")
GetSystemPath = Mid(aa, 1, jj - 1)
End Function
Public Function IsX86() As Boolean
'If Environ("PROCESSOR_ARCHITECTURE") = "x86" Then IsX86 = True: Exit Function
If Dir(Left(Environ("ComSpec"), 1) & ":\Windows\SysWOW64", vbDirectory) = "" Then
IsX86 = True
Else
IsX86 = False
End If
End Function
Public Function FileCheck(ByVal FileName As String, Optional ByVal Reg As Boolean) As Boolean
Dim FileData() As Byte
Dim FileInfo() As String
Dim SystemPath As String
SystemPath = GetSystemPath
If Dir(SystemPath & "\" & FileName) = "" Then
FileInfo = Split(FileName, ".")
If UBound(FileInfo) < 1 Then MsgBox "文件" & FileName & "名称错误!", vbCritical
FileData = LoadResData(UCase(FileInfo(0)), UCase(FileInfo(1)))
Open SystemPath & "\" & FileName For Binary As #1 '以二进制方式写生成控件kjmc.kjlx到主程序所在的目录
Put #1, , FileData
Close #1
If Reg Then Shell "regsvr32 \s " & SystemPath & "\" & FileName, vbHide
End If
End Function
Public Sub MkMulDirs(ByVal Path As String)
Dim FilePath As String
Dim Index As Long
Index = InStr(1, Path, "\")
Debug.Print Index
Do While Index > 0
FilePath = Left(Path, Index)
If Dir(FilePath, vbDirectory) = "" Then _
MkDir FilePath
Index = InStr(Index + 1, Path, "\")
Loop
Debug.Print "创建文件夹: " & Path
End Sub
Public Function FindPath(ByVal AppName As String) As String
On Error Resume Next
Dim PathDir As String
Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
' 注册表写入
' WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" & App.EXEName, App.Path & "\" & App.EXEName & ".exe"
' 注册表删除
' WshShell.RegDelete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" & App.EXEName
' 注册表读取
FindPath = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" & AppName & "\Path")
Set WshShell = Nothing
' PathDir = Left(Environ("ComSpec"), 1)
' If Dir(PathDir & ":\Program Files\Java\jre6\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files\Java\jre6\bin\java.exe"
' ElseIf Dir(PathDir & ":\Program Files (x86)\Java\jre6\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files (x86)\Java\jre6\bin\java.exe"
' ElseIf Dir(PathDir & ":\Program Files\Java\jre7\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files\Java\jre7\bin\java.exe"
' ElseIf Dir(PathDir & ":\Program Files (x86)\Java\jre7\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files (x86)\Java\jre7\bin\java.exe"
' ElseIf Dir(PathDir & ":\Program Files\Java\jre8\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files\Java\jre8\bin\java.exe"
' ElseIf Dir(PathDir & ":\Program Files (x86)\Java\jre8\bin\java.exe") <> "" Then
' FindJava = PathDir & ":\Program Files (x86)\Java\jre8\bin\java.exe"
' Else
' FindJava = ""
' End If
End Function
Public Function FindJar() As String
If Dir(App.Path & "/*.jar") <> "" Then
FindJar = Dir(App.Path & "/*.jar")
End If
End Function
Public Function GetMaxMem() As String
Dim strComputer
Dim strNameSpace
Dim strClass
Dim objSWbemObject
Dim objSWbemServices
Dim objSWbemObjectSet
Dim MaxMemN
MaxMemN = 0
Set objSWbemServices = GetObject("winmgmts:")
Set objSWbemObjectSet = objSWbemServices.ExecQuery("select Capacity from Win32_PhysicalMemory where CreationClassName='Win32_PhysicalMemory'")
For Each objSWbemObject In objSWbemObjectSet
MaxMemN = objSWbemObject.Capacity + MaxMemN
Next
GetMaxMem = Int(MaxMemN / 1024 / 1024)
GetMaxMem = Trim(Str(GetMaxMem))
Set objSWbemObject = Nothing
Set objSWbemServices = Nothing
Set objSWbemObjectSet = Nothing
End Function