- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 136
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-6-5
               
|
取得系統資訊/使用者資訊
« 於: 2005-06-08, 21:20:24 »
--------------------------------------------------------------------------------
1. Excel 版本(代號)
Application.Version
2. Windows 版本
Application.OperatingSystem
3. 剩餘可用的記憶體
Application.MemoryFree (單位為bytes)
另外 Application 有關記憶體的屬性就是
MemoryUsed 和 MemoryTotal,可自行應用。
4. 顯示器的螢幕解析度
'32-bit API declaration
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1
Sub ScreenResolution()
VidWidth = GetSystemMetrics(SM_CXSCREEN)
VidHeight = GetSystemMetrics(SM_CYSCREEN)
MsgBox "噫~ 目前螢幕解析度是: " & VidWidth & " X " & VidHeight
End Sub
--------------------------------------------------------------------------------
以下來自 John Walkenbach
For Excel tips, macros, & downloads...
http://j-walk.com/ss
1. 取得電腦名稱
Private Declare Function w32_GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public Function GetComputerName()
Dim sComputerName As String
Dim lComputerNameLen As Long
Dim lResult As Long
lComputerNameLen = 256
sComputerName = Space(lComputerNameLen)
lResult = w32_GetComputerName(sComputerName, lComputerNameLen)
If lResult <> 0 Then
GetComputerName = Left(sComputerName, lComputerNameLen)
Else
GetComputerName = "Unknown"
End If
End Function
2. 取得電腦目前登入使用者名稱
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Function UserName() As String
Dim Buffer As String * 100
Dim BuffLen As Long
BuffLen = 100
GetUserName Buffer, BuffLen
UserName = Left(Buffer, BuffLen - 1)
End Function
--------------------------------------------------------------------------------
補充:
其實有些系統/使用者資訊可以由環境變數取得。
參考 用 Environ 取得環境變數~ 不是非要API 啦
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
leonchou
論壇維護群
離線
文章: 1214
取得本機資訊補充 - Environ / WshNetwork
« 回覆文章 #1 於: 2005-09-23, 00:49:13 »
--------------------------------------------------------------------------------
Environ 方式列示如下,以求完整:
Sub client_info()
MsgBox "使用者網域" & vbTab & "= " & Environ("UserDomain") & vbLf & _
"使用者姓名" & vbTab & "= " & Environ("UserName") & vbLf & _
"電腦名稱 " & vbTab & "= " & Environ("ComputerName")
'PS. Win 9x 不適用
End Sub
另有 WshNetwork 方式:
Sub client_info()
Dim wsh As Object
Set wsh = CreateObject("WScript.Network")
MsgBox "使用者網域" & vbTab & "= " & wsh.UserDomain & vbLf & _
"使用者姓名" & vbTab & "= " & wsh.UserName & vbLf & _
"電腦名稱 " & vbTab & "= " & wsh.ComputerName
Set wsh = Nothing
End Sub
主要優缺點比較 --
使用 Environ 的優點是方便,缺點則是 Win9x 不適用;
所以要用哪一種寫法就看各人需求和喜好了。
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
leonchou
論壇維護群
離線
文章: 1214
利用WMI 物件取得系統資訊
« 回覆文章 #2 於: 2005-09-23, 01:01:19 »
--------------------------------------------------------------------------------
WMI (Windows Management Instrumentation) 技術是微軟提供的Windows系統管理工具。透過此工具可在本地或管理用戶端系統中取得幾乎一切的資訊。很多專業的網路管理工具都是基於WMI開發的。WMI在Win2000/NT下是標準工具,在Win9x下是選擇性安裝選項。
先來看一個利用WMI取得系統資訊的簡單範例,這個範例透過WMI物件獲得系統中運行的的進程:
Sub wmi_client_info()
Dim system, itm
Dim i As Integer
i = 1
Set system = GetObject("winmgmts:").InstancesOf("Win32_ComputerSystem")
For Each itm In system
Cells(1, i) = "電腦名稱: " & itm.Name
Cells(2, i) = "狀態: " & itm.Status
Cells(3, i) = "類型: " & itm.SystemType
Cells(4, i) = "生產廠家: " & itm.Manufacturer
Cells(5, i) = "型號: " & itm.Model
Cells(6, i) = "記憶體: ~" & itm.totalPhysicalMemory \ 1024000 & "mb"
Cells(7, i) = "域(工作群組): " & itm.domain
'Cells(7, i) = "工作組" & itm.Workgroup '不支援Workgroup屬性
Cells(8, i) = "當前用戶: " & itm.UserName
Cells(9, i) = "啟動狀態: " & itm.BootupState
Cells(10, i) = "電腦屬於: " & itm.PrimaryOwnerName
Cells(11, i) = "系統類型: " & itm.CreationClassName
Cells(12, i) = "電腦類型: " & itm.Description
'這裏假設安裝了兩個作業系統
Cells(13, i) = "啟動選項1 :" & itm.SystemStartupOptions(0)
Cells(14, i) = "啟動選項2 :" & itm.SystemStartupOptions(1)
i = i + 1
Next
End Sub
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
leonchou
論壇維護群
離線
文章: 1214
利用WMI 物件取得網路卡資訊
« 回覆文章 #3 於: 2005-09-23, 01:14:20 »
--------------------------------------------------------------------------------
現在的電腦以及網路組成十分複雜。例如系統硬體方面就有主板、硬碟、網卡... 等等組件。
軟體方面有作業系統、系統中安裝的軟體、正在運行的進程等等。網路方面有域、工作群組等等。利用WMI可以取得上面的全部資訊,但是如果像上面一樣利用分項來取得的話會很麻煩。因此,WMI提供了一種類似SQL語句的查詢語句,可以藉此獲得WMI物件下的子項。
下面範例是搜索系統中安裝的網卡並返回網卡 IP 及 MAC 位址:
取得本機網卡 IP 位址 --
Sub Get_IP()
Dim objWMI As Object
Dim colIP As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colIP = objWMI.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IP In colIP
If Not IsNull(IP.IPAddress) Then
For i = LBound(IP.IPAddress) To UBound(IP.IPAddress)
MsgBox IP.IPAddress(i), vbInformation, IP.Description(i)
Next
End If
Next
End Sub
取得本機網卡 MAC Address (實體位址) --
Sub Get_Mac_Addr()
Dim objWMI As Object
Dim colItems As Object
strComputer = "."
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", _
"WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
MsgBox "MAC Address: " & objItem.MACAddress
Next
End Sub
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
jerrystone
小學生
離線
文章: 1
Re: 取得系統資訊/使用者資訊
« 回覆文章 #4 於: 2008-05-29, 12:35:32 »
--------------------------------------------------------------------------------
這篇文章真的超棒的,但請問一下在WMI取得系統資訊的簡單範例那一篇文章,我將程式co到vb底下去run,在Cells的地方它會出現"沒有定義這個sub或function",請問我該如何解決呢?謝謝!!!
向板主檢舉 220.130.36.18 (?)
d8726228
中學生
離線
文章: 11
Re: 取得系統資訊/使用者資訊
« 回覆文章 #5 於: 2008-06-02, 13:59:52 »
--------------------------------------------------------------------------------
實作兩種抓取電腦名稱的方法皆成功
十分感謝樓主提供這些超實用資訊
向板主檢舉 59.125.238.166 (?)
leonchou
論壇維護群
離線
文章: 1214
取得Excel系統資訊 - 補充
« 回覆文章 #6 於: 2008-11-22, 20:23:12 »
--------------------------------------------------------------------------------
Application.Version 回傳值與通用名稱的對照表 --
版本名稱 Version回傳值
Excel 2007 12.0
Excel 2003 11.0
Excel 2002 10.0
Excel 2000 9.0
Excel 97 8.0
Excel 95 7.0
Excel 5.0 5.0
Application.Version 回傳值為"字串", 請留意.
若需進一步判斷時, 應視為字串.
例如以下將Excel版本代號轉為通用的名稱 --
程式碼:
Select Case Application.Version
Case "5.0": verName = "Excel 5.0"
Case "7.0": verName = "Excel 95"
Case "8.0": verName = "Excel 97"
Case "9.0": verName = "Excel 2000"
Case "10.0": verName = "Excel 2002"
Case "11.0": verName = "Excel 2003"
Case "12.0": verName = "Excel 2007"
End Select
--------------------------------------------------------------------------------
取得活頁簿的形式 (以Excel2000為例)
程式碼:
Select Case ThisWorkbook.FileFormat
Case XlFileFormat.xlExcel5
MsgBox "這個活頁簿是: Excel95活頁簿"
Case XlFileFormat.xlExcel7
MsgBox "這個活頁簿是: Excel97活頁簿"
Case XlFileFormat.xlWorkbookNormal
MsgBox "這個活頁簿是: Excel2000活頁簿"
Case Else
MsgBox "這個活頁簿是: Excel95/97/2000以外活頁簿"
End Select
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
leonchou
論壇維護群
離線
文章: 1214
取得VBA版本/作業系統版本 by WMI
« 回覆文章 #7 於: 2008-11-22, 20:29:29 »
--------------------------------------------------------------------------------
取得VBA版本 by WMI
參考網址 - Microsoft技術文件
程式碼:
Dim WMIServ As Object, objList As Object
basePath = Environ("ProgramFiles") & "\Common Files\Microsoft Shared\VBA"
filePath = Array(basePath, basePath & "\VBA6")
Filename = Array("vbe.dll", "vbe6.dll")
Set WMIServ = GetObject("winmgmts:\\.\root\cimv2")
For i = LBound(filePath) To UBound(filePath)
Set objList = WMIServ.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='" & filePath(i) & _
"'} Where " & "ResultClass = CIM_DataFile")
On Error Resume Next
For Each f In objList
'If f.Extension = "dll" Then
If Mid(f.Name, InStrRev(f.Name, "\") + 1) = Filename(i) Then
MsgBox "您的VBA版本是: " & f.Version
Exit For
End If
Next
Next
Set objList = Nothing: Set WMIServ = Nothing
--------------------------------------------------------------------------------
取得完整的作業系統版本名稱 by WMI
輸出範例: Windows 2000 Professional (5.0.2195)
程式碼:
Dim Locator, Service, objList, msg As String
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set objList = Service.ExecQuery("Select * From Win32_OperatingSystem")
For Each os In objList
msg = msg & os.Caption & vbCrLf
msg = msg & os.Version
Next os
MsgBox "您的OS版本是: " & msg, vbInformation
Set Service = Nothing
Set objList = Nothing
Set Locator = Nothing
« 最後編輯時間: 2008-11-22, 20:33:02 由 leonchou » 向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...
xmi
中學生
離線
文章: 42
Re: 利用WMI 物件取得系統資訊
« 回覆文章 #8 於: 2008-11-23, 19:14:54 »
--------------------------------------------------------------------------------
引用自: leonchou 於 2005-09-23, 01:01:19
WMI (Windows Management Instrumentation) 技術是微軟提供的Windows系統管理工具。透過此工具可在本地或管理用戶端系統中取得幾乎一切的資訊。很多專業的網路管理工具都是基於WMI開發的。WMI在Win2000/NT下是標準工具,在Win9x下是選擇性安裝選項。
先來看一個利用WMI取得系統資訊的簡單範例,這個範例透過WMI物件獲得系統中運行的的進程:
Sub wmi_client_info()
Dim system, itm
Dim i As Integer
i = 1
Set system = GetObject("winmgmts:").InstancesOf("Win32_ComputerSystem")
For Each itm In system
Cells(1, i) = "電腦名稱: " & itm.Name
Cells(2, i) = "狀態: " & itm.Status
Cells(3, i) = "類型: " & itm.SystemType
Cells(4, i) = "生產廠家: " & itm.Manufacturer
Cells(5, i) = "型號: " & itm.Model
Cells(6, i) = "記憶體: ~" & itm.totalPhysicalMemory \ 1024000 & "mb"
Cells(7, i) = "域(工作群組): " & itm.domain
'Cells(7, i) = "工作組" & itm.Workgroup '不支援Workgroup屬性
Cells(8, i) = "當前用戶: " & itm.UserName
Cells(9, i) = "啟動狀態: " & itm.BootupState
Cells(10, i) = "電腦屬於: " & itm.PrimaryOwnerName
Cells(11, i) = "系統類型: " & itm.CreationClassName
Cells(12, i) = "電腦類型: " & itm.Description
'這裏假設安裝了兩個作業系統
Cells(13, i) = "啟動選項1 :" & itm.SystemStartupOptions(0)
Cells(14, i) = "啟動選項2 :" & itm.SystemStartupOptions(1)
i = i + 1
Next
End Sub
為什麼我會停在 --> Cells(6, i) = "記憶體: ~" & itm.totalPhysicalMemory \ 1024000 & "mb"
我是用office2007的
向板主檢舉 221.127.110.228 (?)
leonchou
論壇維護群
離線
文章: 1214
Re: 利用WMI 物件取得系統資訊
« 回覆文章 #9 於: 2008-11-24, 00:22:56 »
--------------------------------------------------------------------------------
引用自: xmi 於 2008-11-23, 19:14:54
為什麼我會停在 --> Cells(6, i) = "記憶體: ~" & itm.totalPhysicalMemory \ 1024000 & "mb"
我是用office2007的
在Excel2000+Windows2000 sp2測試正常。
你的錯誤訊息是啥?作業系統的版本?
我想可能是VBA或OS不同,WMI物件屬性也不盡相同的關係...
請和你相同環境的朋友試一下。
向板主檢舉 203.79.168.37 (?)
--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW... |
|