Win32 FindWindow () может найти конкретное окно с точным заголовком, но как насчет try.bat - Notepad? - PullRequest
1 голос
/ 25 июля 2010

Win32 FindWindow() может найти окно с названием «Untitled - Notepad», но что если я просто хочу найти окно Notepad, но не знаю, является ли оно «try.bat - Notepad» или другим имя файла в строке заголовка?

Похоже, что если заголовок передан в NULL-значении, то будет возвращено любое окно, но будет возвращено только одно окно, поэтому для заголовка, использующего регулярное выражение, grep не существует

(я делаю это с помощью Ruby's Win32API)

Ответы [ 3 ]

4 голосов
/ 25 июля 2010

Я бы последовал совету Эрика, чтобы использовать EnumWindows. Вы можете предоставлять обратные вызовы Ruby для функций Windows API через win32-api. Вот пример, который был тривиально изменен из образца в README win32-api :

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, 'Firefox')
2 голосов
/ 25 июля 2010

1-й аргумент FindWindow выполняет поиск по имени класса, если вы используете для этого "Notepad" (имя класса главного окна Notepad) и нулевой заголовок, вы получите 1-й соответствующий дескриптор независимо от его заголовка.

1 голос
/ 25 июля 2010

Вы почти наверняка хотите использовать функцию EnumWindows ;эта функция перезвонит вам с дескриптором окна, а затем вы можете использовать GetWindowText , чтобы просмотреть заголовок окна и найти нужный вам.

Теперь я понятия не имею, как написать функцию обратного вызова в Ruby, поэтому вам понадобится некоторая помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...