<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [COM的功能](https://www.php.net/manual/zh/faq.com.php) [Windows API 參考手冊](http://www.office-cn.net/t/api/api_content.htm) COM是*組件對象模型*的縮寫;它是DCE RPC(開放標準)之上的面向對象的層(和相關服務),并定義了通用的調用約定,該約定使使用任何語言編寫的代碼可以調用并與使用任何其他語言編寫的代碼進行互操作(前提是這些語言是COM意識)。這些代碼不僅可以用任何語言編寫,甚至都不必成為同一可執行文件的一部分。可以從DLL加載代碼,在同一計算機上運行的另一個進程中找到代碼,或者使用DCOM(分布式COM)在遠程計算機上的另一個進程中找到代碼,而這些代碼甚至都不需要知道組件的位置居住。 有一個稱為OLE Automation的COM子集,它包含一組COM接口,這些接口允許松散地綁定到COM對象,因此可以在運行時對它們進行自省和調用,而無需在編譯時知道該對象的工作方式。PHP COM擴展利用OLE自動化接口允許您從腳本中創建和調用兼容對象。從技術上講,這實際上應稱為“*PHP的OLE自動化擴展*”,因為并非所有COM對象都是OLE兼容的。 現在,為什么或應該使用COM?COM是在Windows平臺上將應用程序和組件粘合在一起的主要方法之一。使用COM可以啟動Microsoft Word,填寫文檔模板并將結果另存為Word文檔,然后將其發送給您的網站的訪問者。您還可以使用COM來執行網絡的管理任務和配置IIS。這些只是最常見的用途;您可以使用COM做更多的事情。 此外,我們支持使用Microsoft提供的COM互操作性層實例化和創建.Net程序集 從PHP 5.3.15 / 5.4.5開始,這個擴展要求在PHP .ini中啟用 **`php_com_dotnet.dll`** ,以便使用這些函數。以前的PHP版本默認支持這些擴展。您負責安裝您打算使用的各種COM對象的支持(例如MS Word);我們不能把所有這些都和PHP捆綁在一起。 **php.ini啟用此擴展** ``` [com_dotnet] extension=php_com_dotnet.dll ;當它打開時,PHP 將被允許作為 D-COM(分布式 COM)客戶端運行,并允許 PHP 腳本在遠程服務器上實例化 COM 對象 com.allow_dcom=0 ;當此選項打開時(默認),在初始化 COM 對象時在自動加載的類型庫中找到的常量將區分大小寫注冊。 有關更多詳細信息,請參閱 com_load_typelib() com.autoregister_casesensitive=1 ;當它打開時,PHP 將嘗試從它實例化的 COM 對象的類型庫中注冊常量,如果這些對象實現了獲取該信息所需的接口。 它注冊的常量的大小寫敏感度由配置指令控制。 com.autoregister_typelib=0 ;啟用此選項后,將使用 PHP 錯誤機制報告在對象實例化期間加載類型庫的任何問題。 默認值為關閉,如果發現或加載類型庫時出錯,則不會發出任何指示。 com.autoregister_verbose=0 ;它控制默認字符集代碼頁,以便在傳遞字符串往返 COM 對象時使用。如果設置為空字符串,PHP 將假設您想要CP_ACP,這是默認系統 ANSI 代碼頁面。 ;如果使用默認情況下設置的不同編碼/字符對腳本中的文本進行編碼,則設置此指令將避免您將代碼頁面作為參數傳遞給com類構造器。請注意,使用此指令(與任何 PHP 配置指令一樣),您的 PHP 腳本變得不那么便攜;您應該盡可能使用 COM 構造參數 com.code_page="" ;設置后,這應保留包含應在啟動時加載的類型圖書館列表的文件的路徑。文件的每行將被視為類型庫名稱,并加載,仿佛你已經調用com_load_typelib()。常數將持續注冊,因此庫只需加載一次。如果一個類型的庫名稱以字符串結尾,或者,則該庫的常數將麻不仁地進行注冊。#cis#case_insensitive com.typelib_file="" ;用于點網對象的.NET 框架版本。設置的價值是框架版本編號的前三個部分,按點分離,并預設,例如。vv4.0.30319 com.dotnet_version="" ``` 示例: ``` $word?=?new?COM("C:\docs\word.doc"); $obj = new COM("ABC.MyObj"); //一般前邊是主文件名、后邊是類名,注冊表里找這個文件可以找到 ``` 調用vbscript的Wscript.Shell執行windows的ifconfig命令 ``` $cmd="ipconfig"; $phpwsh=new \COM("Wscript.Shell") or die("Create Wscript.Shell Failed!"); $phpexec=$phpwsh->exec("cmd.exe /c $cmd"); $execoutput=$phpexec->stdout(); $result=$execoutput->readall(); echo $result; 結果 Windows IP ???? ??????????? ?????: ????????? DNS ??? . . . . . . . : ctc ???????? IPv6 ???. . . . . . . . : fe83::a18b:99be:461c:7166%5 IPv4 ??? . . . . . . . . . . . . : 192.168.2.6 ???????? . . . . . . . . . . . . : 255.255.255.0 ???????. . . . . . . . . . . . . : 192.168.2.1 ??????????? VMware Network Adapter VMnet1: ????????? DNS ??? . . . . . . . : ???????? IPv6 ???. . . . . . . . : fe83::8c8a:e576:bed4:620f%7 IPv4 ??? . . . . . . . . . . . . : 192.168.148.1 ???????? . . . . . . . . . . . . : 255.255.255.0 ???????. . . . . . . . . . . . . : ??????????? VMware Network Adapter VMnet8: ????????? DNS ??? . . . . . . . : ???????? IPv6 ???. . . . . . . . : fe83::10cd:f9f7:4a1d:b8b5%16 IPv4 ??? . . . . . . . . . . . . : 192.168.159.1 ???????? . . . . . . . . . . . . : 255.255.255.0 ???????. . . . . . . . . . . . . : ``` WshShell提供對本地Windows外殼程序的訪問。可以通過Wshshell對象模擬鍵盤,向激活窗口發送鍵值實現選擇,彈出定時提示框,注冊表的讀寫,程序的啟動,系統等待,添加Event Log,創建快捷方式等下面我們介紹一下WshShell的幾個方法: **Wscript.shell是Wshshell的ProID** >[warning]Wshshell是一個對象,存放在windows系統中的wshom.ocx文件中,可供在windows上運行的程序調用。他可對windows的外殼程序進行訪問。 對象(object)是一些相關變量和方法的軟件集,或者說庫。當你需要這個對象里面的變量,方法,功能的時候,你就可以使用相關語言(代碼)來調用。 ProID是程序員給某個CLSID指定的一個易記名字。組成如.. CLSID是windows系統對于不同的應用程序,文件類型,OLE對象,特殊文件夾以及各種系統組件分配的一個唯一表示它的代碼。為Class ID的縮寫。 **Wscript : Windows Script Host object model (注意,前三個縮寫為Wsh )** 簡單的說,Wscript就是Windows腳本宿主對象模型(WSHOM) , 而Wscript就是windows內對象存放的一個根對象(官方語言:Wscript是一個基于windows系統腳本宿主對象的根對象), 利用它可以創造兩種COM對象:WshShell 與 WshNetwork(主要用于訪問局域網環境下的[資源](http://zy.anjian.com/?action-resource)共享). 注釋1:(八卦一下,不知道現在的諸如WshEnvironment, WshCollection, WshExec等對象是不是也存放在該根對象下,依照我的理解是的,因為他們都有前綴Wsh,但他們應該不是COM組件,故不再上面列出,應該是這樣吧。另需注意Wsh是Wscript對象內置的變量,故在你載入WshShell后,在沒有聲明的情況下不能使用Wsh作為變量,否則會出現錯誤) 注釋2:(COM對象即the Component Object Model,組件對象模型。COM組件是遵行COM規范編寫,以Win32動態鏈接庫(DLL)或可執行文件(EXE)形式發布的可執行二進制代碼,能夠滿足組建對框架的所有需求。簡單理解COM對象就是可執行二進制代碼存放的根對象)(貌似我搞不懂,如果真是這樣,他們為什么非要用model模型這個單詞呢,為什么不用Root根或family集合這類單詞呢) 對于WshShell對象,其中的Shell是外殼的意思,應該是此對象能夠調用windows的外殼程序,故取名shell,個人覺得那么Wscript.shell這個ProID堪稱完美。 ***** 例子3 ``` $obj = new COM("server.object")? 即可以使用COM對象的屬性和方法。? 下面以word為例? // 啟動 word? $word = new COM("word.application") or die("Unable to instanciate Word");? print "ioaded Word, version {$word->Version}\\n";? //將其置前? $word->Visible = 1;? //打開一個空文檔? $word->Documents->Add();? //隨便做些事情? $word->Selection->TypeText("This is a test...");? $word->Documents\[1\]->SaveAs("Useless test.doc");? //關閉 word? $word->Quit();? //釋放對象? $word->Release();? $word = null; ``` 例子4:PHP隱藏文件的方法 ``` $com=new COM('Scripting.FileSystemObject'); // FSO要使用絕對路徑的? $file=$com ->getfile(\_\_FILE\_\_); //絕對路徑? $file ->attributes='6'; //修改屬性為系統、隱藏? //常數 值 描述? //Normal 0 普通文件。不設置屬性。? //ReadOnly 1 只讀文件。屬性為讀/寫。? //Hidden 2 隱藏文件。屬性為讀/寫。? //System 4 系統文件。屬性為讀/寫。? //Volume 8 磁盤驅動器卷標。屬性為只讀。? //Directory 16 文件夾或目錄。屬性為只讀。? //Archive 32 文件在上次備份后已經修改。屬性為讀/寫。? //Alias 64 鏈接或者快捷方式。屬性為只讀。? //Compressed 128 壓縮文件。屬性為只讀。 ``` 例子5 ``` //這個就可以實現asp的XMLHTTP傳馬功能? $xmlhttp=new COM('Microsoft.XMLHTTP') or die("Create Microsoft.XMLHTTP Failed!");? $xmlhttp->open('GET','http://localhost/1.txt',false);? $xmlhttp->send();? echo $xmlhttp->responseText;//輸出1.txt的內容 /\*? XMLHTTP方法? Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)   ? bstrMethod: 數據傳送方式,即GET或POST。   ? bstrUrl: 服務網頁的URL。   ? varAsync: 是否同步執行。缺省為True,即異步執行。False,為同步執行。   ? bstrUser: 用戶名,可省略。   ? bstrPassword:用戶口令,可省略。   ? Send(varBody)   ? varBody:指令集。可以是XML格式數據,也可以是字符串,流,或者一個無符號整數數組。也可以省略,讓指令通過Open方法的URL參數代入。   ? setRequestHeader(bstrHeader, bstrvalue)   ? bstrHeader:HTTP 頭(header)   ? bstrvalue: HTTP 頭(header)的值   如果Open方法定義為POST,可以定義表單方式上傳:   ? xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")? XMLHTTP屬性? onreadystatechange:在同步執行方式下獲得返回結果的事件句柄。只能在DOM中調用。   ? responseBody: 結果返回為無符號整數數組。   ? responseStream: 結果返回為IStream流。   ? responseText : 結果返回為字符串。   ? responseXML: 結果返回為XML格式數據。? \*/ ``` 例子6 Windows Management Instrumentation(WMI)是Microsoft基于Web的企業管理(WBEM)的實現,WBEM是一項行業倡議,旨在開發用于在企業環境中訪問管理信息的標準技術 WMI提供了機器的全面知識,包括硬件和軟件。 它具有所謂的CIM([通用信息模型](http://msdn.microsoft.com/en-us/library/aa389234.aspx)),以面向對象的方式封裝信息。 它還提供了幾個編程接口來檢索所述信息。 在純Windows環境中,它們將是[PowerShell](http://technet.microsoft.com/en-us/library/bb978526.aspx),VB腳本和.NET語言。 但是在我們的例子中,它將是PHP 使用WMI進行編程時的基本問題之一是:哪些“信息”可用? 換句話說,哪些對象/類可用? 幸運的是,Microsoft提供了有關WMI提供的類及其屬性的完整列表。 請訪問[此處](http://msdn.microsoft.com/en-us/library/aa394554.aspx)以獲取完整參考。 在WMI編程中,大多數時候我們指的是[Win32類](http://msdn.microsoft.com/en-us/library/aa394084.aspx)。 ### 先決條件(Pre-requisites) 步驟1:計算機管理-服務中查看`Windows Management Instrumentation`服務是否啟動,這里需要啟動它 步驟2:啟動后WIN+R打開cli命令窗口輸入`wbemtest`打開標題為“`Windows Management Instrumentation Test`”的對話框該對話框中的許多按鈕當前都處于禁用狀態,但是我們可以單擊“`Connect...`”按鈕來調用一個類似于以下所示的新對話框: ![](https://img.kancloud.cn/d2/e4/d2e47c31417747096467e4300989c7bd_520x567.png) 通常,我們不需要更改任何東西。`root\cimv2`是WMI接口的系統內置名稱空間。 只需單擊此對話框中的“`Connect`”按鈕。 啟用所有按鈕后,它將帶我們回到上一個窗口。 能夠連接到機器的WMI接口只是前提條件之一。 我們還需要確保Windows防火墻將允許WMI呼叫通過。 在Windows防火墻中,選擇“`Advanced Settings`”,然后為WMI相關條目啟用入站和出站訪問規則。 請查看下面的屏幕截圖 ![](https://img.kancloud.cn/89/0e/890e84a4fbcdc2a646b51554ebfd53b4_1038x770.png) ![](https://img.kancloud.cn/56/50/56503330259b50765a83df259907ef4a_1031x740.png) 在遠程計算機上啟用WMI防火墻規則后,我們可以按照上面的步驟2中所示測試連接。 要連接到遠程計算機,我們需要在默認名稱空間(“`root\cimv2`”)`root\cimv2`加上我們需要連接的PC的IP或名稱(例如“`\\192.168.1.2\root\cimv2`”)并提供該遠程計算機的用戶名和密碼。 我們可以期望WMI提供有關BIOS,CPU,磁盤,內存使用情況等的信息。但是如何顯示這些信息? 步驟2WIN+R打開cli命令窗口輸入`wbemtest`打開`wbemtest`對話框并連接到我們的本地計算機。 在“`WMI Tester`對話框中,單擊“`Enum Classes...(枚舉類)`按鈕,并彈出以下對話框: ![](https://img.kancloud.cn/16/ee/16eebac296802e7298b37207178f13fa_527x493.png) 在此對話框中,不要在文本框中輸入任何內容,選擇“`Recursive(遞歸)`,然后單擊“`OK(確定)`。 它應該彈出另一個對話框,如下所示: ![](https://img.kancloud.cn/53/c3/53c320c645a1917cae20cbe773592cc2_555x396.png) 這是一個很長的列表(在Windows 8.1 PC中為1,110個對象)。 您的PC可能會給出不同的列表,但應該與此列表大致相同。 請花一些時間瀏覽它,并查看WMI提供的類的名稱。 例如,在上圖中,我們突出顯示了`Win32_LogicalDisk`類。 其中包含與計算機邏輯磁盤有關的所有信息。 要深入了解此類提供的內容,請雙擊該類,然后將出現另一個“`Object editor`對話框,如下圖: ![](https://img.kancloud.cn/30/74/3074e0d3607946f7acf73628bc753e7e_551x572.png) 仔細查看“屬性”面板。 此處列出的所有屬性都是我們可以檢索的屬性。 例如,`VolumeName`將是我們為邏輯磁盤分配的名稱。 WMI的Win32類有很多條目可供瀏覽。 一些最常用的是: * 計算機系統硬體類,包括冷卻設備,輸入設備(鍵盤,鼠標等),大容量存儲,主板,網絡設備,打印,視頻和監視器等。 * 已安裝的應用程序類,包括字體等。 * 操作系統類,包括驅動程序,內存,進程,注冊表,用戶等 * 性能計數器類,包括所有與性能相關的類。 * ... 下面的代碼段顯示了有關IP 192.168.1.4上的遠程計算機的邏輯磁盤的一些基本信息: ``` $pc = "192.168.1.4"; //IP of the PC to manage //首先,創建一個`WbemScripting.SWbemLocator`類型的COM對象實例。 $WbemLocator = new COM ("WbemScripting.SWbemLocator"); //然后,將通過`ConnectServer`方法建立與PC的連接。 此方法調用的四個參數不言自明。 最后,我們需要將安全模擬設置為適當的級別。 建議將級別3用于WMI腳本。 有關級別的詳細說明,請參見[此處](http://msdn.microsoft.com/en-us//library/system.security.principal.tokenimpersonationlevel.aspx)。 第3級的意思是“`Impersonation`”,這意味著我們引用:服務器進程可以在其本地系統上模擬客戶端的安全上下文。 服務器無法模擬遠程系統上的客戶端。 $WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', 'your account', 'your password'); $WbemServices->Security_->ImpersonationLevel = 3; $disks = $WbemServices->ExecQuery("Select * from Win32_LogicalDisk"); foreach ($disks as $d) { $str=sprintf("%s (%s) %s bytes, %4.1f%% free\n", $d->Name,$d->VolumeName,number_format($d->Size,0,'.',','), $d->FreeSpace/$d->Size*100.0); echo $str; } ``` 結果: ``` C: (System) 104,864,059,392 bytes, 60.4% free D: (Data) 209,719,963,648 bytes, 84.3% free E: (Misc) 185,521,188,864 bytes, 95.3% free ``` 請注意,上面的代碼是創建遠程COM連接以管理遠程PC的方法。 要管理本地PC,語法會稍有不同,但差別不大: ``` <?php $pc = "."; $obj = new COM ("winmgmts:\\\\".$pc."\\root\\cimv2"); $disks = $obj->ExecQuery("Select * from Win32_LogicalDisk"); // Rest of the code is the same as previous remote connection sample //其實本地的也可以這樣操作 $pc = "127.0.0.1"; //IP of the PC to manage $WbemLocator = new \COM ("WbemScripting.SWbemLocator"); $WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', '', '');//object(variant)#13 (0) { } $WbemServices->Security_->ImpersonationLevel = 3; ``` 這有點簡單,因為我們不需要提供憑據和模擬,但這是基于以下假設:運行此代碼段的用戶具有管理員權限 為了獲得類及其相關數據,我們使用了WQL(WMI查詢語言)語句。 它與我們發布給MySQL服務器SQL語句非常相似,但是在這種情況下,我們正在從WMI檢索數據。`Win32_LogicalDisk`是WMI中的一個“表”,用于存儲與邏輯磁盤有關的所有信息。 要訪問其他*表中的數據*,請使用“`Query Result`對話框中列出的名稱,如上所示。 這也使我們可以過濾結果。 例如,`Select * from Win32_LogicalDisk where size > 150000000000`將僅返回大小超過150G(大約)的那些邏輯設備 如果成功,則`ExecQuery`語句將返回`variant`類型的對象。 缺點是,如果我們嘗試`var_dump`該對象,PHP將只打印類似`object (variant) #3...`。 當我們嘗試`var_dump``$d`變量時,`var_dump`發生同樣的事情。 實際上,對于輸出中的進一步編程沒有任何用處。 實際上,我們只需要知道對象是可迭代的即可。 在這種情況下,當我們使用`foreach`循環時,每個`$d`實例將保存一個對邏輯磁盤的對象引用。 然后,我們可以使用熟悉的`->`符號訪問該邏輯磁盤實例中的屬性。 可以在該特定類的“`Object editor`對話框中找到屬性列表,如上所示。 確保正確拼寫類名(`Win32_LogicalDisk`)和屬性名(如`Size`,`Name`)。 Windows不區分大小寫,但是如果我們提供了錯誤的名稱,則會引發錯誤并返回錯誤。 正如我們前面提到的,WMI編程也可以使用其他語言(例如C#,VB Script等)來完成。但是,WMI COM接口是一種動態接口,我們不能依靠任何這些語言來提供代碼完成提示可輕松訪問所有屬性。 我們必須依靠上面顯示的對話。 幫助程序員的一種解決方案是使用必要的方法將每個WMI類進一步封裝到PHP類中。 這應該是一個非常簡單的任務,我將把它留給有興趣的人一起玩。 [PHP and WMI - Dig deep into Windows with PHP - SitePoint](https://www.sitepoint.com/php-wmi-dig-deep-windows-php/) ``` $obj = new COM ( 'winmgmts://localhost/root/CIMV2' ); $wmi_computersystem = $obj->ExecQuery("Select * from Win32_ComputerSystem"); $wmi_bios = $obj->ExecQuery("Select * from Win32_BIOS"); foreach ( $wmi_computersystem as $wmi_call ) { $model = $wmi_call->Model; } foreach ( $wmi_bios as $wmi_call ) { $serial = $wmi_call->SerialNumber; $bios_version = $wmi_call->SMBIOSBIOSVersion; } echo "Bios version : $bios_version\n". "Serial number : $serial\n". "Hardware Model : $model\n"; ``` * WbemScripting.SWbemLocator通過ConnectServer方法獲取[SWbemServices](https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/swbemservices)對象的引用 * SWbemServices 可以返回三個不同的 WMI 腳本庫對象之一 (SWbemObjectSet、SWbemObject或 SWbemEventSource) ,具體取決于調用下面的方法 * 例如,如果返回 SWbemObjectSet,則必須枚舉集合以訪問集合中的每個 SWbemObject。 如果返回 SWbemObject,可以立即訪問對象方法和屬性,而無需先枚舉集合 * SWbemServices 對象具有這些方法。 方法 說明 AssociatorsOf 通過一個或多個關聯類檢索與指定資源關聯的托管資源的實例。 為原始終結點提供對象路徑, 而 AssociatorsOf 返回位于相反終結點的托管資源。 AssociatorsOf 方法執行與"ASSOCIATORS OF"WQL 查詢執行的相同函數。如果調用成功,則返回 SWbemObjectSet 對象。 AssociatorsOfAsync 異步返回與指定對象 (類或) 對象的集合。 delete 從 CIM 存儲庫中刪除托管資源 (或類定義) 。 DeleteAsync 異步刪除對象路徑中指定的類或實例。 ExecMethod 提供一種替代方法,用于執行由托管資源類定義定義的方法。 主要用于腳本語言不支持 out 參數的情況。 例如,JScript不支持 out 參數。 ExecMethodAsync 異步執行方法提供程序導出的方法。 ExecNotificationQuery 執行事件訂閱查詢以接收事件。 事件訂閱查詢是定義要監視的托管環境更改的查詢。 發生更改時,WMI 基礎結構會向調用腳本傳遞描述更改的事件。 ExecNotificationQueryAsync 異步執行查詢以接收事件。 ExecQuery 執行查詢以檢索 WMI 托管資源的實例集合, (或類定義) 。 ExecQuery 可用于檢索與傳遞給 ExecQuery 的查詢中定義的條件匹配的實例的篩選集合。 ExecQueryAsync 異步執行查詢以檢索對象。 get 根據對象路徑檢索托管資源 (或類) 實例。 GetAsync 基于對象路徑異步檢索作為類定義或實例的對象。 InstancesOf 根據類名檢索托管資源的所有實例。 默認情況下 ,InstancesOf 執行深層檢索。 也就是說 ,InstancesOf 檢索由傳遞給方法的類名標識的資源的實例,并檢索所有資源的所有實例,這些子類 (在目標類的) 下定義。 InstancesOfAsync 根據用戶指定的選擇條件異步返回指定類的實例。 ReferencesTo 返回引用指定資源的所有關聯。 了解 ReferencesTo 的最佳方法是 將其與 AssociatorsOf 方法進行比較。 AssociationorsOf 返回位于關聯相反端的動態資源。 ReferencesTo 返回關聯本身。 ReferencesTo 方法執行與"REFERENCES OF"WQL 查詢執行的相同函數。 ReferencesToAsync 異步返回引用特定類或實例的所有關聯類或實例的集合。 SubclassesOf 從 CIM 存儲庫中檢索指定類的所有子類。 SubclassesOfAsync 異步返回指定類的子類的集合。 * SWbemServices 支持三種操作模式:同步、異步和半同步,除了 Delete、 ExecMethod、 Get和9個異步方法,半同步是默認的和建議的操作模式 [Win32\_Processor class - Win32 apps | Microsoft Docs](https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-processor) ``` function GetWMI($wmi,$strClass, $strValue = array()) { $arrData = array(); $objWEBM = $wmi->Get($strClass); //$arrProp = $objWEBM->Properties_; //$arrWEBMCol = $objWEBM->Instances_(); if( PHP_VERSION < 5 ) { $objProp = $objWEBM->Properties_; $arrProp = $objProp->Next($objProp->Count); $objWEBMCol = $objWEBM->Instances_(); $arrWEBMCol = $objWEBMCol->Next($objWEBMCol->Count); } else { $arrProp = $objWEBM->Properties_; $arrWEBMCol = $objWEBM->Instances_(); } foreach($arrWEBMCol as $objItem) { //reset($arrProp); $arrInstance = array(); foreach($arrProp as $propItem) { eval("\$value = \$objItem->" . $propItem->Name . ";"); echo "<br>"; var_dump($propItem->Name.'<=>'.$value); echo "<br>"; if (empty($strValue)) { $arrInstance[$propItem->Name] = trim($value); } else { if (in_array($propItem->Name, $strValue)) { $arrInstance[$propItem->Name] = trim($value); } } } $arrData[] = $arrInstance; } return $arrData; } if('/'==DIRECTORY_SEPARATOR){ $ip=$_SERVER['SERVER_ADDR']; }else{ $ip= @gethostbyname($_SERVER['SERVER_NAME']); } if ($ip=="127.0.0.1"||$ip=="::1") { $pc = "127.0.0.1"; //IP of the PC to manage $WbemLocator = new \COM ("WbemScripting.SWbemLocator"); $WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', '', '');//object(variant)#13 (0) { } $WbemServices->Security_->ImpersonationLevel = 3; }else{ $objLocator = new COM("WbemScripting.SWbemLocator"); $WbemServices = $objLocator->ConnectServer(); $WbemServices->Security_->ImpersonationLevel = 3; //$prop = $wmi->get("Win32_PnPEntity"); } $cpuinfo =GetWMI($WbemServices,"Win32_Processor"); //$cpuinfo =GetWMI($WbemServices,"Win32_Processor", array("Name","L2CacheSize","NumberOfCores")); ``` 打印結果 ``` AddressWidth<=>64 Architecture<=>9 AssetTag<=>To Be Filled By O.E.M. Availability<=>3 Caption<=>Intel64 Family 6 Model 94 Stepping 3 Characteristics<=>236 ConfigManagerErrorCode<=> ConfigManagerUserConfig<=> CpuStatus<=>1 CreationClassName<=>Win32_Processor CurrentClockSpeed<=>3201 CurrentVoltage<=>11 DataWidth<=>64 Description<=>Intel64 Family 6 Model 94 Stepping 3 DeviceID<=>CPU0 ErrorCleared<=> ErrorDescription<=> ExtClock<=>100 Family<=>205 InstallDate<=> L2CacheSize<=>1024 L2CacheSpeed<=> L3CacheSize<=>6144 L3CacheSpeed<=>0 LastErrorCode<=> Level<=>6 LoadPercentage<=>41 Manufacturer<=>GenuineIntel MaxClockSpeed<=>3201 Name<=>Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz NumberOfCores<=>4 NumberOfEnabledCore<=>4 NumberOfLogicalProcessors<=>4 OtherFamilyDescription<=> PartNumber<=>To Be Filled By O.E.M. PNPDeviceID<=> PowerManagementCapabilities<=> PowerManagementSupported<=> ProcessorId<=>BFEBFBFF000506E3 ProcessorType<=>3 Revision<=>24067 Role<=>CPU SecondLevelAddressTranslationExtensions<=>1 SerialNumber<=>To Be Filled By O.E.M. SocketDesignation<=>LGA1151 Status<=>OK StatusInfo<=>3 Stepping<=> SystemCreationClassName<=>Win32_ComputerSystem SystemName<=>DESKTOP-MTE1PF3 ThreadCount<=>4 UniqueId<=> UpgradeMethod<=>1 Version<=> VirtualizationFirmwareEnabled<=>1 VMMonitorModeExtensions<=>1 VoltageCaps<=> AddressWidth<=>64 Architecture<=>9 AssetTag<=>To Be Filled By O.E.M. Availability<=>3 Caption<=>Intel64 Family 6 Model 94 Stepping 3 Characteristics<=>236 ConfigManagerErrorCode<=> ConfigManagerUserConfig<=> CpuStatus<=>1 CreationClassName<=>Win32_Processor CurrentClockSpeed<=>3201 CurrentVoltage<=>11 DataWidth<=>64 Description<=>Intel64 Family 6 Model 94 Stepping 3 DeviceID<=>CPU0 ErrorCleared<=> ErrorDescription<=> ExtClock<=>100 Family<=>205 InstallDate<=> L2CacheSize<=>1024 L2CacheSpeed<=> L3CacheSize<=>6144 L3CacheSpeed<=>0 LastErrorCode<=> Level<=>6 LoadPercentage<=>23 Manufacturer<=>GenuineIntel MaxClockSpeed<=>3201 Name<=>Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz NumberOfCores<=>4 NumberOfEnabledCore<=>4 NumberOfLogicalProcessors<=>4 OtherFamilyDescription<=> PartNumber<=>To Be Filled By O.E.M. PNPDeviceID<=> PowerManagementCapabilities<=> PowerManagementSupported<=> ProcessorId<=>BFEBFBFF000506E3 ProcessorType<=>3 Revision<=>24067 Role<=>CPU SecondLevelAddressTranslationExtensions<=>1 SerialNumber<=>To Be Filled By O.E.M. SocketDesignation<=>LGA1151 Status<=>OK StatusInfo<=>3 Stepping<=> SystemCreationClassName<=>Win32_ComputerSystem SystemName<=>DESKTOP-MTE1PF3 ThreadCount<=>4 UniqueId<=> UpgradeMethod<=>1 Version<=> VirtualizationFirmwareEnabled<=>1 VMMonitorModeExtensions<=>1 VoltageCaps<=> ``` >[info]AddressWidth --在32位操作系統,該值是32,在64位操作系統是64。 Architecture --所使用的平臺的處理器架構。 AssetTag --代表該處理器的資產標簽。 Availability --設備的狀態。 Caption --設備的簡短描述 Characteristics --處理器支持定義的功能 ConfigManagerErrorCode --Windows API的配置管理器錯誤代碼 ConfigManagerUserConfig --如果為TRUE,該裝置是使用用戶定義的配置 CpuStatus --處理器的當前狀態 CreationClassName --出現在用來創建一個實例繼承鏈的第一個具體類的名稱 CurrentClockSpeed --處理器的當前速度,以MHz為單位 CurrentVoltage --處理器的電壓。如果第八位被設置,位0-6包含電壓乘以10,如果第八位沒有置位,則位在VoltageCaps設定表示的電壓值。 CurrentVoltage時SMBIOS指定的電壓值只設置 DataWidth --在32位處理器,該值是32,在64位處理器是64 Description --描述 DeviceID --在系統上的處理器的唯一標識符 ErrorCleared --如果為真,報上一個錯誤代碼的被清除 ErrorDescription --錯誤的代碼描述 ExtClock --外部時鐘頻率,以MHz為單位 Family --處理器系列類型 InstallDate --安裝日期 L2CacheSize --二級緩存大小 L2CacheSpeed --二級緩存處理器的時鐘速度 L3CacheSize --三級緩存的大小 L3CacheSpeed --三級緩存處理器的時鐘速度 LastErrorCode --報告的邏輯設備上一個錯誤代碼 Level --處理器類型的定義。該值取決于處理器的體系結構 LoadPercentage --每個處理器的負載能力,平均到最后一秒 Manufacturer --處理器的制造商 MaxClockSpeed --處理器的最大速度,以MHz為單位 Name --處理器的名稱 NumberOfCores --芯為處理器的當前實例的數目。核心是在集成電路上的物理處理器 NumberOfEnabledCore --每個處理器插槽啟用的內核數 NumberOfLogicalProcessors --用于處理器的當前實例邏輯處理器的數量 OtherFamilyDescription --處理器系列類型 PartNumber --這款處理器的產品編號制造商所設置 PNPDeviceID --即插即用邏輯設備的播放設備標識符 PowerManagementCapabilities --邏輯設備的特定功率相關的能力陣列 PowerManagementSupported --如果為TRUE,該裝置的功率可以被管理,這意味著它可以被放入掛起模式 ProcessorId --描述處理器功能的處理器的信息 ProcessorType --處理器的主要功能 Revision --系統修訂級別取決于體系結構 Role --所述處理器的作用 SecondLevelAddressTranslationExtensions --如果為True,該處理器支持用于虛擬地址轉換擴展 SerialNumber --處理器的序列號 SocketDesignation --芯片插座的線路上使用的類型 Status --對象的當前狀態 StatusInfo --對象的當前狀態信息 Stepping --在處理器家族處理器的版本 SystemCreationClassName --創建類名屬性的作用域計算機的價值 SystemName --系統的名稱 ThreadCount --每個處理器插槽的線程數 UniqueId --全局唯一標識符的處理器 UpgradeMethod --CPU插槽的信息 Version --依賴于架構處理器的版本號 VirtualizationFirmwareEnabled --如果真,固件可以虛擬化擴展 VMMonitorModeExtensions --如果為True,該處理器支持Intel或AMD虛擬機監控器擴展。 VoltageCaps --該處理器的電壓的能力 ***** * [預定義常量](https://www.php.net/manual/en/com.constants.php) * [錯誤和錯誤處理](https://www.php.net/manual/en/com.error-handling.php) * [例子](https://www.php.net/manual/en/com.examples.php) * [對于每個](https://www.php.net/manual/en/com.examples.foreach.php) * [數組和數組樣式的COM屬性](https://www.php.net/manual/en/com.examples.arrays.php) * [com](https://www.php.net/manual/en/class.com.php)— com類 * [com :: \_\_ construct](https://www.php.net/manual/en/com.construct.php)— com類的構造函數 * [dotnet](https://www.php.net/manual/en/class.dotnet.php)— dotnet類 * [dotnet :: \_\_ construct](https://www.php.net/manual/en/dotnet.construct.php)— dotnet類的構造函數 * [變體](https://www.php.net/manual/en/class.variant.php)—變體類 * [variant :: \_\_construct](https://www.php.net/manual/en/variant.construct.php)—變體類構造函數 * [COMPersistHelper](https://www.php.net/manual/en/class.compersisthelper.php)— COMPersistHelper類 * [COMPersistHelper :: \_\_ construct](https://www.php.net/manual/en/compersisthelper.construct.php)—構造一個COMPersistHelper對象 * [COMPersistHelper :: GetCurFileName](https://www.php.net/manual/en/compersisthelper.getcurfilename.php)—獲取當前文件名 * [COMPersistHelper :: GetMaxStreamSize](https://www.php.net/manual/en/compersisthelper.getmaxstreamsize.php)—獲取最大流大小 * [COMPersistHelper :: InitNew](https://www.php.net/manual/en/compersisthelper.initnew.php)—將對象初始化為默認狀態 * [COMPersistHelper :: LoadFromFile](https://www.php.net/manual/en/compersisthelper.loadfromfile.php)—從文件加載對象 * [COMPersistHelper :: LoadFromStream](https://www.php.net/manual/en/compersisthelper.loadfromstream.php)—從流中加載對象 * [COMPersistHelper :: SaveToFile](https://www.php.net/manual/en/compersisthelper.savetofile.php)—將對象保存到文件 * [COMPersistHelper :: SaveToStream](https://www.php.net/manual/en/compersisthelper.savetostream.php)—將對象保存到流 * [com\_exception](https://www.php.net/manual/en/class.com-exception.php)— com\_exception類 * [COM功能](https://www.php.net/manual/en/ref.com.php) * [com\_create\_guid](https://www.php.net/manual/en/function.com-create-guid.php)—生成全局唯一標識符(GUID) * [com\_event\_sink](https://www.php.net/manual/en/function.com-event-sink.php)—將事件從COM對象連接到PHP對象 * [com\_get\_active\_object](https://www.php.net/manual/en/function.com-get-active-object.php)—返回對已運行的COM對象實例的句柄 * [com\_load\_typelib](https://www.php.net/manual/en/function.com-load-typelib.php)—加載[Typelib](https://www.php.net/manual/en/function.com-load-typelib.php) * [com\_message\_pump](https://www.php.net/manual/en/function.com-message-pump.php)—處理COM消息,休眠時間長達ms * [com\_print\_typeinfo](https://www.php.net/manual/en/function.com-print-typeinfo.php)—打印出可調度接口的PHP類定義 * [variant\_abs](https://www.php.net/manual/en/function.variant-abs.php)—返回變量的絕對值 * [variant\_add](https://www.php.net/manual/en/function.variant-add.php)—將兩個變量值“相加”并返回結果 * [variant\_and](https://www.php.net/manual/en/function.variant-and.php)—在兩個變量之間執行按位與運算 * [variant\_cast](https://www.php.net/manual/en/function.variant-cast.php)—將變量轉換為另一種類型的新變量對象 * [variant\_cat](https://www.php.net/manual/en/function.variant-cat.php)—將兩個變量值連接在一起并返回結果 * [variant\_cmp](https://www.php.net/manual/en/function.variant-cmp.php)—比較兩個變體 * [variant\_date\_from\_timestamp](https://www.php.net/manual/en/function.variant-date-from-timestamp.php)—返回Unix時間戳的變體日期表示形式 * [variant\_date\_to\_timestamp](https://www.php.net/manual/en/function.variant-date-to-timestamp.php)—將變體日期/時間值轉換為Unix時間戳 * [variant\_div](https://www.php.net/manual/en/function.variant-div.php)—返回將兩個變量相除的結果 * [variant\_eqv](https://www.php.net/manual/en/function.variant-eqv.php)—對兩個變量執行按位等效 * [variant\_fix](https://www.php.net/manual/en/function.variant-fix.php)—返回變量的整數部分 * [variant\_get\_type](https://www.php.net/manual/en/function.variant-get-type.php)—返回變量對象的類型 * [variant\_idiv](https://www.php.net/manual/en/function.variant-idiv.php)—將變體轉換為整數,然后返回除以它們的結果 * [variant\_imp](https://www.php.net/manual/en/function.variant-imp.php)—對兩個變量執行按位含義 * [variant\_int](https://www.php.net/manual/en/function.variant-int.php)—返回變量的整數部分 * [variant\_mod](https://www.php.net/manual/en/function.variant-mod.php)—劃分兩個變量,僅返回其余變量 * [variant\_mul](https://www.php.net/manual/en/function.variant-mul.php)—將兩個變量的值相乘 * [variant\_neg](https://www.php.net/manual/en/function.variant-neg.php)—對一個變體執行邏輯取反 * [variant\_not](https://www.php.net/manual/en/function.variant-not.php)—對一個變體執行按位非[求](https://www.php.net/manual/en/function.variant-not.php)反 * [variant\_or](https://www.php.net/manual/en/function.variant-or.php)—對兩個變體執行邏輯分離 * [variant\_pow](https://www.php.net/manual/en/function.variant-pow.php)—返回執行具有兩個變體的冪函數的結果 * [variant\_round](https://www.php.net/manual/en/function.variant-round.php)—將變體四舍五入到指定的小數位數 * [variant\_set\_type](https://www.php.net/manual/en/function.variant-set-type.php)—將變量轉換為“就地”另一種類型 * [variant\_set](https://www.php.net/manual/en/function.variant-set.php)—為變量對象分配新值 * [variant\_sub-](https://www.php.net/manual/en/function.variant-sub.php)從左側變量值中減去右側變量的值 * [variant\_xor](https://www.php.net/manual/en/function.variant-xor.php)—對兩個變體執行邏輯排除
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看