2013-06-25 3 views
1

Ruby를 사용하여 첫 번째 응용 프로그램을 만들고 있습니다. 문제는 제가 shell.ShellExecute ('outlook.exe', ...를 사용하여 Outlook을 여는 것입니다. 하지만 outllok이 이미 열려 있는지 여부를 알아야합니다. (스크립트는 매번 Outlook 인스턴스를 호출합니다 ... 나를 위해 나쁜 : P)Ruby로 열린 응용 프로그램을 감지하는 방법

는 는

는 두 번째 질문 난에서 ShellExecute를 사용하여 응용 프로그램을 열 때, 개봉 후를 최소화 할 수있다

들으

+1

어쨌든 좋은 질문입니다. 오늘이 질문에서 많은 것을 배웠습니다. * + 1 * –

답변

1

모두 수행 할 수 있습니다!.?! Ruby 표준 라이브러리를 사용하여win32ole.


두 번째 질문

. shellExecute로 응용 프로그램을 열면 여는 후 최소화 할 수 있습니까?

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

지금 아래 봐 :

SHOW를 :

예 (rubyonwindows에서 촬영) 그렇게있는 옵션이 권장하는 방법을 응용 프로그램에 속한 창 (0 = 숨김, 1 = 정상, ) 2 = 최소화, 3 = 최대화). 응용 프로그램은이 권장 사항을 무시할 수 있습니다. 이 매개 변수를 지정하지 않으면 응용 프로그램이 기본값을 사용합니다.


그러나 나는 전망이 이미 열려 아닌지 알 필요가있다. 그런 다음

gem install sys-proctable 

을 :

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

, Outlook이 실행되고 있는지 여부를 먼저 확인 SYS-proctable 설치하려면 (Windows Management Instrumentation (WMI)에서 촬영) 그렇게에서 옵션이 있습니다 이것을 할 수 있습니다 :

require 'sys/proctable' 

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

이름이 "OUTLOOK.EXE"인 프로세스가 있으면 true를 리턴합니다. 이것은 충분해야합니다.