Ruby win32ole 查看系统信息(windows)

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

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值