Win32的FindWindow()可以找到一个具有确切标题的特定窗口,但是“try.bat – Notepad”呢?

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

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

(我使用Ruby的Win32API这样做)

我会按照Eric的建议使用EnumWindows。 您可以通过win32-api为Windows API函数提供Ruby回调。 这是一个从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') 

FindWindow的第一个参数按类名搜索,如果您使用"Notepad" (记事本的主窗口类名称)和空标题,您将获得第一个匹配句柄,无论其标题如何。

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

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