require 'win32ole'
class winManage
def initialize
@winobj = WIN32OLE.connect("winmgmts://")
end
# 說明:獲取系統總物理內存,空閒內存方法
# TotalVisibleMemorySize : 系統有效內存大小; FreePhysicalMemroy:系統未佔用內存大小
# 結果:返回hash數組
# sysFreeMemory: 系統空閒內存
#
sysUseMemory :系統已使用內存
#
sysTotalMemory: 系統總物理內存
#
sysUseRateMemory: 內存使用率
def getSysMemoryInfo()
memoryObj = @winobj.ExecQuery("select * from Win32_OperatingSystem")
memoryObj.each do |item|
return { :sysFreeMemory =>item.FreePhysicalMemory.to_i/1024,
:sysUseMemory => (item.TotalVisibleMemorySize.to_i - item.FreePhysicalMemory.to_i)/1024,
:sysTotalMemory => item.TotalVisibleMemorySize.to_i/1024,
:sysUseRateMemory => (((item.TotalVisibleMemorySize.to_i - item.FreePhysicalMemory.to_i).to_f/item.TotalVisibleMemorySize.to_i).to_f * 100).to_i
}
end
end
# 獲取系統CPU使用率
def getCpuUseRate
cpuObj = @winobj.ExecuQuery("select * from Win32_Processor")
cpuObj.each do |item|
retrun {:sysCpuUseRate => item.LoadPercentage}
end
end
# 說明:根據指定key和value查找進程,key爲findProcessName表示查詢線程名爲其對應的值
# 參數:args,hash數組,特別說明::findProcessName => 對應得值爲想查詢線程得名稱
# 原理說明: 每個進程可以通過CommandLine 及 Name等查詢值確定
# 結果:返回傳入條件查詢到的進程ID數組
def getProcessByKeys(args={})
queryCondition = ""
queryNameCondition = ""
args.each do |key, value|
if key.to_s != "findProcessName"
(queryCondition == "")? (queryCondition += "where CommandLine like '%value%'"):(queryCondition += " and CommandLine like '%value%'")
else
queryNameCondition += " and Name like '%value%'"
end
end
processes = @winobj.ExecQuery("select * from Win32_process" + queryCondition + queryNameCondition)
processIds = []
processes.each do |process|
processIds << process.processID
end
return processIds
end
# 說明:監聽進程方法,當指定監聽的相關進程掛掉或超時情況時,分別對應做不同處理
# 參數:engineProcessId,int整數,待監聽進程ID整數,timeOut:監聽超時時間
# 結果:execFlag:0 進程超時,1 進程正常結束
def processMonitor(engineProcessId, timeOut)
sleep 5 #休眠5秒,防止被監聽進程還未啓動
execFlag = 0
timeCount = 1
while true
timeCount += 2
if timeCount >= timeOut
execFlag = 0
break
end
processes = @winobj.ExecQuery("select * from win32_process where ProcessID = #{engineProcessID}")
processIsExist = false
processes.each do |process|
processIsExist = true
end
if processIsExist
sleep 2
else
execFlag = 1
break
end
end
return execFlag
end
# 說明:根據傳入得進程ID殺死進程
# 參數:processId : 待kill進程ID,int,必選
# 結果:無返回結果
def killProcessById(processId)
processes = @winobj.ExecQuery("select * from win32_process where ProcessID = #{processId}")
processes.each do |process|
process.terminate()
end
end
end
Ruby win32ole 查看系統信息(windows)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
發現netbeans6.5.1關於rspec的一個bug
netbeans對rspec的支持沒有理想中的好,比如你生成一個rspec測試類,理想方式應該是,在文件導航窗口中選中一個被測試類文件,然後右擊打開快
iteye_321
2020-06-23 11:35:50
respond_to和redirect_to之間的區別
snipercc
2018-11-04 01:07:46
windows使用Tiny_tds連接SQLEXPRESS 數據庫
chrissata
2018-09-03 14:02:25
Ruby way --- 日期和時間類
iteye_3964
2018-08-31 01:39:28
Ruby way --- 符號和範圍類
iteye_3964
2018-08-31 01:39:28
ruby正則表達式學習
iteye_3964
2018-08-31 01:39:27
豬的安家
iteye_16569
2018-08-30 02:39:55
Ruby Tips
iteye_16569
2018-08-30 02:22:12
死亡迷宮
iteye_16569
2018-08-30 02:22:01
Rails page cache & will_pagination
iteye_16569
2018-08-30 02:22:01
Ubuntu lighttpd 1.5 spawn-fcgi 進程死亡
iteye_16569
2018-08-30 02:22:01
Rich online editor for Ruby on Rails - tinyMCE
iteye_16569
2018-08-30 02:22:01
豬的安家
iteye_16569
2018-08-30 02:22:01
4張撲克牌24點Ruby算法
iteye_16569
2018-08-30 02:21:34
Rails 2.1 map.namespace 運用實例
iteye_16569
2018-08-30 02:21:34