1

我正在使用 Ruby 制作我的第一个应用程序。问题是我使用 shell.ShellExecute('outlook.exe',... 打开 Outlook对我来说:p!)

第二个问题。当我使用 shellExecute 打开应用程序时,是否可以在打开后将其最小化?

谢谢 !

4

2 回答 2

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。这应该足够了。

于 2013-06-25T11:23:39.717 回答
1

一切都可以使用 Ruby 标准库来完成 win32ole


第二个问题。当我使用 shellExecute 打开应用程序时,是否可以在打开后将其最小化?

是的,这样做有一个选项(取自rubyonwindows):

shell.ShellExecute(FILE, ARGUMENTS, DIRECTORY, OPERATION, SHOW)

现在看下面:

SHOW:建议最初应如何显示属于执行操作的应用程序的窗口(0 = 隐藏,1 = 正常,2 = 最小化,3 = 最大化)。应用程序可以忽略此建议。如果未指定此参数,则应用程序使用其默认值。


但我需要知道 Outlook 是否已经打开。

是的,可以选择这样做(取自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"
于 2013-06-25T11:17:21.563 回答