我正在使用Ruby製作我的第一個應用程序。 事情是,我打開Outlook使用shell.ShellExecute('outlook.exe',... 但我需要知道,如果outllok已經打開或沒有(該腳本做一個Outlook實例,每次我打電話給它...這是對我不好:p)如何使用Ruby檢測打開的應用程序
第二個問題。當我打開與ShellExecute的應用程序,是否有可能開放後,它最大限度地減少
THX
我正在使用Ruby製作我的第一個應用程序。 事情是,我打開Outlook使用shell.ShellExecute('outlook.exe',... 但我需要知道,如果outllok已經打開或沒有(該腳本做一個Outlook實例,每次我打電話給它...這是對我不好:p)如何使用Ruby檢測打開的應用程序
第二個問題。當我打開與ShellExecute的應用程序,是否有可能開放後,它最大限度地減少
THX
所有可以做!?!使用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"
完美答案非常感謝您的鏈接和您的代碼! – Zuhn
@ user1838902很高興聽到我至少幫助你。 –
要檢查外觀是否正在運行,先安裝sys-proctable:
gem install sys-proctable
然後你可以這樣做:
require 'sys/proctable'
puts Sys::ProcTable.ps.select{ |pe| pe.caption == "OUTLOOK.EXE" }.any?
如果存在名爲「OUTLOOK.EXE」的進程,則返回true。這應該足夠了。
無論如何,好的問題,我今天從這個問題了解很多。 * + 1 * –