Вернуть код выхода экземпляра HIDE CMD, открытого модулем win32ole? - PullRequest
0 голосов
/ 04 марта 2012

Я знаю, чтобы открыть экземпляр CMD в Windows и получить код возврата

puts %x[Tasklist /v | Find "%tmp:~0,30%" >NUL]
response = $?.exitstatus

, который работает.

Но теперь мне нужно открыть экземпляр CMD скрытия, яЯ знаю, что делать это только с модулем Win32ole, а функция exitstatus отправляет мне ошибку.Я не знаю, почему ...

Пожалуйста, помогите получить код выхода этого экземпляра или другой способ открыть (и получить код выхода) экземпляра скрытия.

require 'win32ole'
shell = WIN32OLE.new('Shell.Application')

shell.ShellExecute('CMD', '/K Tasklist /v | Find "%tmp:~0,30%" >NUL',
'', '', 0)
response = $?.exitstatus
    if response == 0
        puts "hola"
        end

неопределенный метод `exitstatus 'для nil: NilClass
NoMethodError

1 Ответ

0 голосов
/ 07 марта 2012

спасибо 2

Я решил эту проблему, попробовав другой более эффективный метод:

require 'win32/api'
include Win32

# Callback example - Enumerate windows
EnumWindows     = API.new('EnumWindows', 'KP', 'L', 'user32')
GetWindowText   = API.new('GetWindowText', 'LPI', 'I', 'user32')
EnumWindowsProc = API::Callback.new('LP', 'I'){ |handle, param|
  buf = "\0" * 200
  GetWindowText.call(handle, buf, 200);

  if (!buf.index(param).nil?)
    puts "window was found: handle #{handle}"
    0 # stop looking after we find it
  else
    1
  end
}

EnumWindows.call (EnumWindowsProc, «название здесь»)

прощай

...