1

Ruby を使用して最初のアプリケーションを作成しています。問題は、shell.ShellExecute('outlook.exe',...) を使用して Outlook を開くことですが、outllok が既に開いているかどうかを知る必要があります (スクリプトは、呼び出すたびに Outlook インスタンスを作成します... 悪いです私にとっては:p!)

2 番目の質問です。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


2 番目の質問です。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"
于 2013-06-25T11:17:21.563 に答える