Win32的FindWindow()
可以找到一個標題爲「無標題 - 記事本」的窗口,但如果我只想查找記事本窗口但不知道它是否是「try.bat - 記事本」或其他文件名標題欄?Win32的FindWindow()可以找到確切標題的特定窗口,但「try.bat - 記事本」又如何?
看來,如果標題傳入NULL值,那麼將返回任何窗口,但只返回一個窗口,因此無法使用正則表達式爲標題grep
。
(我這樣做使用Ruby的Win32API的)
Win32的FindWindow()
可以找到一個標題爲「無標題 - 記事本」的窗口,但如果我只想查找記事本窗口但不知道它是否是「try.bat - 記事本」或其他文件名標題欄?Win32的FindWindow()可以找到確切標題的特定窗口,但「try.bat - 記事本」又如何?
看來,如果標題傳入NULL值,那麼將返回任何窗口,但只返回一個窗口,因此無法使用正則表達式爲標題grep
。
(我這樣做使用Ruby的Win32API的)
我會按照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')
你幾乎肯定要使用EnumWindows功能;此功能會用窗口句柄回叫您,然後您可以使用GetWindowText檢查窗口標題並找到您想要的窗口標題。
現在,我不知道如何在Ruby中編寫回調函數,因此您需要一些幫助。
是啊,我也在想...... Win32回調函數可能是一個C函數,所以它怎麼能調用一個Ruby函數 – 2010-07-25 03:52:06
類名的FindWindow
搜索的第一個參數,如果你爲這個使用"Notepad"
(記事本的主窗口類名)和一個空標題你會無論其標題如何,都可以獲得第一個匹配的句柄。
它工作的很完美!我一直使用'require'Win32API'',看起來'win32/api'和'WIN32API'是不同的。有沒有人知道文件和例子的地方?主站點似乎是http://rubyforge.org/frs/?group_id=85 – 2010-07-26 02:11:23