ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 18776|回复: 35

WMI Windows Management Instrumentation

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-10 16:56 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:WMI应用
http://cat14051.mysinablog.com/
奇怪 SiteMaster 沒有中國 visit
轉載 Windows Management Instrumentation

請參閱:
Windows Hardware Instrumentation Implementation Guidelines (WHIIG)

在企業網路中個人電腦與伺服器系統的有效管理益處來自於電腦軟體與硬體的良好監控,也就是讓本機或遠端的系統元件可被監控。Microsoft 承諾簡化 Microsoft Windows 作業系統的硬體與軟體監控方式。Microsoft 同時承諾了要提供用於監控方式的可靠的存取方法於 Windows 基礎的管理系統與支援於其它環境之傳統的管理系統。

在 Windows XP/Windows 2000 與 Windows Millennium Edition/Windows 98 中管理能力的基礎是為 Windows Management Instrumentation (WMI; 原來為 WBEM) 與 Windows Driver Model (WDM) 的 WMI 延伸。

以網路為主的企業管理 (WBEM) 是由 BMC Software Inc.、Cisco Systems Inc.、Compaq Computer Corporation、Intel Corporation 與 Microsoft Corporation 架構的。早在六月的時候 Distributed Management Task Force (DMTF) 公佈承認 WBEM 方針的轉變所以 DMTF 將提供組成架構予廣大的企業參與 WBEM/WMI 相關技術與標準的開發。

WMI 的目的是要定義非專有的一組與環境無關的規格。這些規格允許執行於類似或不相似作業系統環境的管理應用程式之間共用管理資訊。WMI 訂定企業管理標準與相關的技術可與現有的管理標準像是桌面管理介面 (Desktop Management Interface; DMI) 與 SNMP 一同使用。WMI 經由提供制式模型來補充這些其它的標準。此模型象徵管理環境讓來自任何來源的管理資料可利用相同的方式取存。

WMI 使用 Common Information Model (CIM) 與網際網路通訊協定提供管理資訊。DMTF 將使用目前的 WMI 技術並繼續強化它的標準,包含 CIM 事件模型的開發、用於 CIM 搜尋機制以及 CIM 物件的 XML 編碼方式。

WMI 與 Microsoft 作業系統。WMI 提供完整的整合包含制式系統的作業系統支援與應用程式管理,基於 Common Information Model (CIM) 己由 DMTF 採用。WMI 提供可靠且充分的組態描述性模型、狀態與 Windows 作業系統的操作形式、於建立降低維護與生命週期中的 Windows 管理成本方案中協助管理應用程式。

用於結合其它的 Windows 2000 中提供的管理服務,像是 Microsoft Management Console (MMC),WMI 幫助簡化開發較佳的整合管理應用程式的工作,讓廠商可提供 Windows 客戶最佳的訓練,企業彈性管理方案。本機與遠端事件與資訊模型的豐富搜尋語言相結合意謂著建立了結合管理問題的方法。就能夠於 Visual Basic 或 Windows Scripting Host (WSH) 新增一個經常需要的Dimension 至 Windows Management 輕易處理這些案例。

WMI 與 Windows Driver Model (WDM) 的 WMI 延伸。WMI 是為 Windows 核心層級的監控技術。WDM 的 WMI 延伸與服務開發以符合 WMI 規範兩者是相關的用以簡化監控與提供一致化,來開放管理資料的存取。

WDM 的 WMI 延伸可促進這些功能:

發佈 kernel 監控

設定裝置設定值

提供 kernel 端的事件通知

發佈客戶資料

允許系統管理員設定資料安全性

經由 WMI 的方式存取監控

WMI 與 WDM 的 WMI 延伸共用一個統一的配置,讓資料可經由 WMI 的方式管理應用程式。可經由 WDM 的 WMI 延伸的裝置監控方式提供監控的硬體資料。WDM 的 WMI 延伸提供監控資料的一組 Windows DDIs 在原有的 Windows 驅動程式模組之內,所以 OEM 與 IHV 可很容易的擴展監控資料設定。

Windows DDK 內包含了 WDM 的 WMI 延伸的文章與範例程式碼。WMI SDK是為 MSDN Platform SDK 的一部份。

WMI 與 WBEM 的名稱變更

Distributed Management Task Force (DMTF) 取得以網路為主的企業管理 (WBEM) 的擁有權與相關的行銷政策。此文章闡明了 WBEM 與 WMI 兩者在 Windows 作業系統平台的使用。

Microsoft 使用 Windows Management Instrumentation (WMI) 闡明 Microsoft 如何為 Windows 建置 WBEM。它是完全符合 DMTF Common Information Model (CIM) 與 WBEM 規格。WMI 是為 Microsoft 在目前所使用的而 "WBEM" 與 "Windows 的 WBEM" 則為之前所使用的,且 WMI 將保持與未來的 DMTF WBEM 規格相符。

Kernel 端/WBEM 裝置驅動程式介面,之前稱為 WMI,現在稱為 WDM 的 WMI 延伸。相同地,Provider 是為此裝置驅動程式表層用來管理基礎結構者現在稱為 WDM provider 以前稱為 WMI provider

MSDN Windows Management Instrumentation

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/about_wmi.asp 

Windows Management Instrumentation Tutorial

http://www.microsoft.com/downloads/details.aspx?FamilyId=720F0CAE-64A7-457F-BB95-E4F33E0CBC55&displaylang=en#AffinityDownloads

 

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:00 | 显示全部楼层

WMI Example: Memory & Processor Speed

WMI Example: Memory & Processor Speed

Sub WMIMemoryInfo()

    Set wmiObjSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
                    instancesOf("Win32_PhysicalMemory")
    For Each objItem In wmiObjSet
        Debug.Print "BankLabel: " & objItem.BankLabel
        Debug.Print "Capacity: " & objItem.Capacity
        Debug.Print "Caption: " & objItem.Caption
        Debug.Print "DeviceLocator: " & objItem.DeviceLocator
        Debug.Print "Tag: " & objItem.Tag
    
Next
End Sub

Sub ProcessorSpeed()
    Dim MyOBJ As Object
    Dim cpu As Object
    Set MyOBJ = GetObject("WinMgmts:").instancesOf("Win32_Processor")
    For Each cpu In MyOBJ
        MsgBox cpu.Name & " " & cpu.CurrentClockSpeed & " Mhz", vbInformation
 
   Next
End Sub

Function TranslateDomainRole(ByVal roleID)
    Dim a

    Select Case roleID
        Case 0
            a = "Standalone Workstation"
        Case 1
            a = "Member Workstation"
        Case 2
            a = "Standalone Server"
        Case 3
            a = "Member Server"
        Case 4
            a = "Backup Domain Controller"
        Case 5
            a = "Primary Domain Controller"
    End Select
    TranslateDomainRole = a
End Function

Sub Test()

Dim s, System, item
Set System = GetObject("winmgmts:").instancesOf("Win32_ComputerSystem")
For Each item In System
    s = "Computer Info" & vbCrLf
    s = s & "***********************" & vbCrLf
    s = s & "Name: " & item.Name & vbCrLf
    s = s & "Status: " & item.Status & vbCrLf
    s = s & "Type: " & item.SystemType & vbCrLf
    s = s & "Mfg: " & item.Manufacturer & vbCrLf
    s = s & "Model: " & item.Model & vbCrLf
    s = s & "RAM: ~" & item.TotalPhysicalMemory \ 1024000 & "mb" & vbCrLf
    s = s & "Domain: " & item.Domain & vbCrLf
    s = s & "Role: " & TranslateDomainRole(item.DomainRole) & vbCrLf
    s = s & "Current User: " & item.UserName & vbCrLf
    MsgBox s
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:01 | 显示全部楼层

WMI Example: Win32_ScheduledJob

WMI Example: Win32_ScheduledJob

All Windows Platforms

Sub ScheduledJob()

strServer = "."
Set objWMI = GetObject("winmgmts://" & strServer & "\root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_ScheduledJob", 48)
On Error Resume Next
For Each objInstance In objInstances
   Debug.Print objInstance.getObjectText_
Next
End Sub
'---- 
 
Sub ScheduledJob2()
strServer = "."
Set objWMI = GetObject("winmgmts://" & strServer & "\root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_ScheduledJob", 48)
On Error Resume Next
For Each objInstance In objInstances
    With objInstance
        Debug.Print .Caption
        Debug.Print .Command
        Debug.Print .DaysOfMonth
        Debug.Print .DaysOfWeek
        Debug.Print .Description
        Debug.Print .ElapsedTime
        Debug.Print .InstallDate
        Debug.Print .InteractWithDesktop
        Debug.Print .JobId
        Debug.Print .JobStatus
        Debug.Print .Name
        Debug.Print .Notify
        Debug.Print .Owner
        Debug.Print .Priority
        Debug.Print .RunRepeatedly
        Debug.Print .StartTime
        Debug.Print .Status
        Debug.Print .TimeSubmitted
        Debug.Print .UntilTime
    End With
On Error GoTo 0
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:03 | 显示全部楼层

WMI Example: Ping (NetDiagnostics)

WMI Example: Ping (NetDiagnostics)

Supported on Windows XP

Sub Ping_Test()

    MsgBox Ping("emily") ' Ping 電腦 名稱

    MsgBox Ping("211.155.231.151") ' Ping IP

    MsgBox Ping("hk.yahoo.com") ' Ping 網站 ( 回傳成功 )

    MsgBox Ping("cat14051.mysinablog.com") ' Ping 網站 ( 回傳失敗 )

End Sub

Function Ping(strAddr As String) As String

   Dim blnOK As Boolean

    blnOK = GetObject("winmgmts:").Get("NetDiagnostics=@").Ping(strAddr, Ping)

    ' blnOK = True 為 Ping 成功 , 反之則為失敗

    Ping = Replace(Ping, "
", vbCrLf, 1, , 1) ' Ping 的結果

End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:05 | 显示全部楼层

WMI Example: Win32_Process

WMI Example: Win32_Process

All Windows Platforms

 

Sub Ex1()
For Each Process In GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_process")
     Debug.Print Process.Name
Next
End Sub

Sub Ex2()

strServer = "."
Set objWMI = GetObject("winmgmts://" & strServer & "\root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_Process", 48)

For Each objInstance In objInstances
   Debug.Print objInstance.getObjectText_
Next
End Sub

 

Sub Ex3()
strServer = "."
Set objWMI = GetObject("winmgmts://" & strServer & "\root\cimv2")
Set objInstances = objWMI.InstancesOf("Win32_Process", 48)

On Error Resume Next
For Each
objInstance In objInstances
    With objInstance
        Debug.Print .Caption
        Debug.Print .CommandLine
        Debug.Print .CreationClassName
        Debug.Print .CreationDate
        Debug.Print .CSCreationClassName
        Debug.Print .CSName
        Debug.Print .Description
        Debug.Print .ExecutablePath
        Debug.Print .ExecutionState
        Debug.Print .Handle
        Debug.Print .HandleCount
        Debug.Print .InstallDate
        Debug.Print .KernelModeTime
        Debug.Print .MaximumWorkingSetSize
        Debug.Print .MinimumWorkingSetSize
        Debug.Print .Name
        Debug.Print .OSCreationClassName
        Debug.Print .OSName
        Debug.Print .OtherOperationCount
        Debug.Print .OtherTransferCount
        Debug.Print .PageFaults
        Debug.Print .PageFileUsage
        Debug.Print .ParentProcessId
        Debug.Print .PeakPageFileUsage
        Debug.Print .PeakVirtualSize
        Debug.Print .PeakWorkingSetSize
        Debug.Print .Priority
        Debug.Print .PrivatePageCount
        Debug.Print .ProcessId
        Debug.Print .QuotaNonPagedPoolUsage
        Debug.Print .QuotaPagedPoolUsage
        Debug.Print .QuotaPeakNonPagedPoolUsage
        Debug.Print .QuotaPeakPagedPoolUsage
        Debug.Print .ReadOperationCount
        Debug.Print .ReadTransferCount
        Debug.Print .SessionId
        Debug.Print .Status
        Debug.Print .TerminationDate
        Debug.Print .ThreadCount
        Debug.Print .UserModeTime
        Debug.Print .VirtualSize
        Debug.Print .WindowsVersion
        Debug.Print .WorkingSetSize
        Debug.Print .WriteOperationCount
        Debug.Print .WriteTransferCount
    End With
On Error GoTo
0
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

WMI Example: Win32_DisplayConfiguration

WMI Example: Win32_DisplayConfiguration

All Windows Platforms

 
Sub WMI_ScreenResolution()
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_DisplayConfiguration")
For Each objItem In colItems
    Msg = "Name: " & objItem.DeviceName
    Msg = Msg & vbLf & "Color Depth: " & objItem.BitsPerPel
    Msg = Msg & vbLf & "Horizontal Resolution: " & objItem.PelsWidth
    Msg = Msg & vbLf & "Vertical Resolution: " & objItem.PelsHeight
    MsgBox Msg
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:07 | 显示全部楼层

WMI Example: Win32_Process (2)

WMI Example: Win32_Process  (2)

 All Windows Platforms

 

' Number of Excel instances 

Sub TotalExcelProcessesRunning()
Dim strComputer As String
Dim objWMIService As Object
Dim colProcessList As Object
Dim objProcess As Object
Dim x As Double
Const XL As String = "EXCEL.EXE"

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")

Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process")

Set colProcessList = objWMIService.ExecQuery _
                         ("Select * from Win32_Process Where Name = '" & XL & "'")
     MsgBox XL & " instances = " & colProcessList.Count

Set objWMIService = Nothing
Set colProcessList = Nothing

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:08 | 显示全部楼层

WMI Example: Win32_Process (3)

WMI Example: Win32_Process (3)

Excellent Example: List All Running Processes

 

Sub List_All_Processes_Running()

' Set Reference to Microsoft Forms 2.0 Object Library

'Prepare destination
Cells.Clear
[A1].Select

'Dimension arrays
Dim aProcessName()
Dim aBelongsTo()
Dim aProcessID()

'Create object variables
Set xWMIService = GetObject("WINMGMTS:{IMPERSONATIONLEVEL=IMPERSONATE}!//./ROOT/CIMV2")

'Run query against WMI
Set xProcesses = xWMIService.ExecQuery("SELECT * FROM WIN32_PROCESS ")

'Initialize loop for each item in xProcesses
For Each xProcess In xProcesses
    'Determine if the owner of the process can be identified
    If xProcess.GetOwner(User, Domain) = 0 Then
        'Able to identify process owner
        x = x + 1
        ReDim Preserve aProcessName(x)
        ReDim Preserve aBelongsTo(x)
        ReDim Preserve aProcessID(x)
        aProcessName(x) = xProcess.Caption
        aBelongsTo(x) = Domain & "\" & User
        aProcessID(x) = xProcess.ProcessID
    Else
        'Unable to identify process owner
        x = x + 1
        ReDim Preserve aProcessName(x)
        ReDim Preserve aBelongsTo(x)
        ReDim Preserve aProcessID(x)
        aProcessName(x) = xProcess.Caption
        aBelongsTo(x) = "Owner Unknown " & Domain & "\" & User
        aProcessID(x) = xProcess.ProcessID
    End If
Next

'Write results
For x = 1 To UBound(aProcessName)
    ActiveCell.Offset(x, 0).FormulaR1C1 = aProcessName(x)
    ActiveCell.Offset(x, 1).FormulaR1C1 = aBelongsTo(x)
    ActiveCell.Offset(x, 2).FormulaR1C1 = aProcessID(x)
    ActiveCell.Offset(x, 3).FormulaR1C1 = UCase(aProcessName(x))
Next x

'Format results
Range("A1:D1").Value = Array("PROCESS", "BELONGS TO", "PROCESSID", "NAME")
Rows(1).Font.Bold = True
Rows(1).HorizontalAlignment = xlCenter
ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True
Cells.Columns.AutoFit
For Each xCol In ActiveSheet.Columns
    If xCol.ColumnWidth > 50 Then xCol.ColumnWidth = 50
Next xCol

'Clear objects from memory
Set xWMIService = Nothing
Set xProcesses = Nothing

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-10 17:09 | 显示全部楼层

WMI Example: Win32_LogicalDisk

WMI Example: Win32_LogicalDisk

All Windows Platforms

 Public Sub ListDriveInfo(strComputer As String)
    On Error Resume Next
    
    Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk", "WQL", _
        wbemFlagReturnImmediately + wbemFlagForwardOnly)
    
    For Each objItem In colItems
        Debug.Print "============================================="
        Debug.Print " " & objItem.Caption
        Debug.Print "============================================="
        Debug.Print "Access: " & objItem.Access
        Debug.Print "Availability: " & objItem.Availability
        Debug.Print "BlockSize: " & objItem.BlockSize
        Debug.Print "Caption: " & objItem.Caption
        Debug.Print "Compressed: " & objItem.Compressed
        Debug.Print "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
        Debug.Print "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
        Debug.Print "CreationClassName: " & objItem.CreationClassName
        Debug.Print "Description: " & objItem.Description
        Debug.Print "DeviceID: " & objItem.DeviceID
        Debug.Print "DriveType: " & objItem.DriveType
        Debug.Print "ErrorCleared: " & objItem.ErrorCleared
        Debug.Print "ErrorDescription: " & objItem.ErrorDescription
        Debug.Print "ErrorMethodology: " & objItem.ErrorMethodology
        Debug.Print "FileSystem: " & objItem.FileSystem
        Debug.Print "FreeSpace: " & objItem.FreeSpace
        Debug.Print "LastErrorCode: " & objItem.LastErrorCode
        Debug.Print "MaximumComponentLength: " & objItem.MaximumComponentLength
        Debug.Print "MediaType: " & objItem.MediaType
        Debug.Print "Name: " & objItem.Name
        Debug.Print "NumberOfBlocks: " & objItem.NumberOfBlocks
        Debug.Print "PNPDeviceID: " & objItem.PNPDeviceID
        strPowerManagementCapabilities = Join(objItem.PowerManagementCapabilities, ",")
        Debug.Print "PowerManagementCapabilities: " & strPowerManagementCapabilities
        Debug.Print "PowerManagementSupported: " & objItem.PowerManagementSupported
        Debug.Print "ProviderName: " & objItem.ProviderName
        Debug.Print "Purpose: " & objItem.Purpose
        Debug.Print "QuotasDisabled: " & objItem.QuotasDisabled
        Debug.Print "QuotasIncomplete: " & objItem.QuotasIncomplete
        Debug.Print "QuotasRebuilding: " & objItem.QuotasRebuilding
        Debug.Print "Size: " & objItem.Size
        Debug.Print "Status: " & objItem.Status
        Debug.Print "StatusInfo: " & objItem.StatusInfo
        Debug.Print "SupportsDiskQuotas: " & objItem.SupportsDiskQuotas
        Debug.Print "SupportsFileBasedCompression: " & objItem.SupportsFileBasedCompression
        Debug.Print "SystemCreationClassName: " & objItem.SystemCreationClassName
        Debug.Print "SystemName: " & objItem.SystemName
        Debug.Print "VolumeDirty: " & objItem.VolumeDirty
        Debug.Print "VolumeName: " & objItem.VolumeName
        Debug.Print "VolumeSerialNumber: " & objItem.VolumeSerialNumber
        Debug.Print
    Next
End Sub
 

Public Sub Test()
    Call ListDriveInfo("Emily")  ' Computer Name
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-16 12:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

  1. </p><p><font size="2">' Save File Name as Disk.vbs and run directly<br/>' Sample VBScript to interrogate a disk through WMI<br/>' Author Guy Thomas<br/>' Version 1.5 - November 2005<br/>' --------------------------------------------------------------' <br/>Option Explicit<br/>Dim objWMIService, objItem, colItems, strComputer, intDrive</font></p><p><font size="2">' On Error Resume Next<br/>strComputer = "."<br/>intDrive = 0</font></p><p><font size="2">' WMI connection to Root CIM<br/>Set objWMIService = GetObject("winmgmts:\" _<br/>&amp; strComputer &amp; "\root\cimv2")<br/>Set colItems = objWMIService.ExecQuery(_<br/>"Select * from Win32_DiskDrive")</font></p><p><font size="2">' Classic For Next Loop<br/>For Each objItem in colItems<br/>intDrive = intDrive + 1<br/>Wscript.Echo "DiskDrive " &amp; intDrive &amp; vbCr &amp; _ <br/>"Caption: " &amp; objItem.Caption &amp; VbCr &amp; _ <br/>"Description: " &amp; objItem.Description &amp; VbCr &amp; _ <br/>"Manufacturer: " &amp; objItem.Manufacturer &amp; VbCr &amp; _ <br/>"Model: " &amp; objItem.Model &amp; VbCr &amp; _ <br/>"Name: " &amp; objItem.Name &amp; VbCr &amp; _ <br/>"Partitions: " &amp; objItem.Partitions &amp; VbCr &amp; _ <br/>"Size: " &amp; objItem.Size &amp; VbCr &amp; _ <br/>"Status: " &amp; objItem.Status &amp; VbCr &amp; _ <br/>"SystemName: " &amp; objItem.SystemName &amp; VbCr &amp; _ <br/>"TotalCylinders: " &amp; objItem.TotalCylinders &amp; VbCr &amp; _ <br/>"TotalHeads: " &amp; objItem.TotalHeads &amp; VbCr &amp; _ <br/>"TotalSectors: " &amp; objItem.TotalSectors &amp; VbCr &amp; _ <br/>"TotalTracks: " &amp; objItem.TotalTracks &amp; VbCr &amp; _ <br/>"TracksPerCylinder: " &amp; objItem.TracksPerCylinder <br/>Next<br/>WSCript.Quit</font></p><p><font size="2">' End of Sample Disk VBScript</font></p><p>
复制代码

[此贴子已经被作者于2007-1-21 21:51:45编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-16 19:12 , Processed in 0.050023 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表