Ruby win32-api GetFocus和GetWindowText

时间:2013-01-08 17:09:55

标签: ruby winapi

我正在尝试找到获取当前窗口文本的方法。 所以使用win32-api gem我使用this page

的一些帮助编写了这段代码
require 'win32/api'
include Win32
hWnd = GetActiveWindow = API.new('GetActiveWindow', 'V', 'L', 'user32').call
GetWindowText       = API.new('GetWindowText', 'LPI', 'I', 'user32')
GetWindowTextLength = API.new('GetWindowTextLength', 'L', 'I', 'user32')
buf_len = GetWindowTextLength.call(hwnd)
str = ' ' * (buf_len + 1)
# Retreive the text.
result = GetWindowText.call(hwnd, str, str.length)
puts str.strip

输出只是一个空字符串,因为由于hwnd设置为0,buf_len总是计算为0。 我无法弄清楚为什么返回的hwnd总是只有0.

1 个答案:

答案 0 :(得分:1)

如前所述,GetActiveWindow仅检索附加到调用线程的消息队列的窗口。如果您想要获取用户当前窗口的句柄,无论其正在运行什么过程,请尝试调用GetForegroundWindow而不是GetActiveWindow

  

检索前台窗口的句柄(用户当前正在使用的窗口)。