我正在使用Ruby创建我的第一个应用程序。 问题是我使用shell.ShellExecute('outlook.exe',...打开outlook。 但是我需要知道outllok是否已经开放。 (每当我调用它时,脚本会生成一个outlook实例......这对我来说很糟糕:p!)
第二个问题。当我用shellExecute打开一个应用程序时,是否可以在打开后将其最小化?
谢谢!答案 0 :(得分:1)
所有可以使用Ruby标准库
win32ole
完成。
第二个问题。当我用shellExecute打开一个应用程序时,是否可以在打开后将其最小化?
是的,这样做有一个选项(取自rubyonwindows
):
shell.ShellExecute(FILE, ARGUMENTS, DIRECTORY, OPERATION, SHOW)
现在看下面:
SHOW:建议最初如何显示属于执行操作的应用程序的窗口(0 =隐藏,1 =正常, 2 =最小化 ,3 =最大化)。应用程序可以忽略此建议。如果未指定此参数,则应用程序将使用其默认值。
但我需要知道展望是否已经开放。
是的,这样做有一个选项(取自Windows Management Instrumentation (WMI)
)
require 'win32ole'
shell = WIN32OLE.new('Shell.Application')
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")
processes.each{|i| p "already opened" if i.name == "OUTLOOK.EXE"}
# => nil
shell.ShellExecute('OUTLOOK.EXE')
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")
processes.each{|i| p "already opened" if i.name == "OUTLOOK.EXE"}
# => "already opened"
答案 1 :(得分:1)
要检查Outlook是否正在运行,请先安装sys-proctable:
gem install sys-proctable
然后你可以这样做:
require 'sys/proctable'
puts Sys::ProcTable.ps.select{ |pe| pe.caption == "OUTLOOK.EXE" }.any?
如果存在名为" OUTLOOK.EXE"的进程,则返回true。这应该足够了。