2013-06-25 55 views
1

我正在使用Ruby製作我的第一個應用程序。 事情是,我打開Outlook使用shell.ShellExecute('outlook.exe',... 但我需要知道,如果outllok已經打開或沒有(該腳本做一個Outlook實例,每次我打電話給它...這是對我不好:p)如何使用Ruby檢測打開的應用程序

第二個問題。當我打開與ShellExecute的應用程序,是否有可能開放後,它最大限度地減少

THX

+1

無論如何,好的問題,我今天從這個問題了解很多。 * + 1 * –

回答

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" 
+0

完美答案非常感謝您的鏈接和您的代碼! – Zuhn

+1

@ user1838902很高興聽到我至少幫助你。 –

1

要檢查外觀是否正在運行,先安裝sys-proctable:

gem install sys-proctable 

然後你可以這樣做:

require 'sys/proctable' 

puts Sys::ProcTable.ps.select{ |pe| pe.caption == "OUTLOOK.EXE" }.any? 

如果存在名爲「OUTLOOK.EXE」的進程,則返回true。這應該足夠了。

相關問題