2010-07-25 85 views
0

Win32的FindWindow()可以找到一個標題爲「無標題 - 記事本」的窗口,但如果我只想查找記事本窗口但不知道它是否是「try.bat - 記事本」或其他文件名標題欄?Win32的FindWindow()可以找到確切標題的特定窗口,但「try.bat - 記事本」又如何?

看來,如果標題傳入NULL值,那麼將返回任何窗口,但只返回一個窗口,因此無法使用正則表達式爲標題grep

(我這樣做使用Ruby的Win32API的)

回答

4

我會按照Eric的建議來使用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') 
+0

它工作的很完美!我一直使用'require'Win32API'',看起來'win32/api'和'WIN32API'是不同的。有沒有人知道文件和例子的地方?主站點似乎是http://rubyforge.org/frs/?group_id=85 – 2010-07-26 02:11:23

1

你幾乎肯定要使用EnumWindows功能;此功能會用窗口句柄回叫您,然後您可以使用GetWindowText檢查窗口標題並找到您想要的窗口標題。

現在,我不知道如何在Ruby中編寫回調函數,因此您需要一些幫助。

+0

是啊,我也在想...... Win32回調函數可能是一個C函數,所以它怎麼能調用一個Ruby函數 – 2010-07-25 03:52:06

2

類名的FindWindow搜索的第一個參數,如果你爲這個使用"Notepad"(記事本的主窗口類名)和一個空標題你會無論其標題如何,都可以獲得第一個匹配的句柄。

相關問題