代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

win32的find window()可以找到具有确切标题的特定窗口,但是“try.bat-notepad”呢?

  •  1
  • nonopolarity  · 技术社区  · 14 年前

    Win32的 FindWindow() 可以找到一个标题为“无标题-记事本”的窗口,但是如果我只是想找到一个记事本窗口,但不知道它是“try.bat-记事本”还是标题栏上的其他文件名呢?

    如果以空值传递标题,那么将返回任何窗口,但只返回一个窗口,因此无法 grep 用于使用正则表达式的标题。

    (我使用Ruby的win32api进行此操作)

    3 回复  |  直到 14 年前
        1
  •  4
  •   Steven    14 年前

    我会按照埃里克的建议使用EnumWindows。你 可以 通过Win32 API向Windows API函数提供Ruby回调。下面是一个例子,它从 win32-api README :

    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
  •  2
  •   Alex K.    14 年前

    第1个论点 FindWindow 如果使用 "Notepad" (记事本的主窗口类名)对于这个和一个空标题,不管标题是什么,您都会得到第一个匹配的句柄。

        3
  •  1
  •   Eric Brown    14 年前

    你几乎肯定想用 EnumWindows 函数;此函数将用窗口句柄回调您,然后您可以使用 GetWindowText 检查窗口标题并找到所需的标题。

    现在,我不知道如何用Ruby编写回调函数,所以您需要一些帮助。