4

現在のウィンドウのテキストを取得する方法を見つけようとしています。したがって、win32-api gemを使用して、このページのヘルプを使用してこのコードを記述しました。

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である理由がわかりません。

4

1 に答える 1

1

以前にコメントしGetActiveWindowたように、呼び出し元のスレッドのメッセージキューに接続されているウィンドウのみを取得します。実行中のプロセスに関係なく、ユーザーが現在実行しているウィンドウへのハンドルを取得する場合は、ではなくGetForegroundWindowGetActiveWindowを呼び出してみてください。

フォアグラウンドウィンドウ(ユーザーが現在作業しているウィンドウ)へのハンドルを取得します。

于 2013-01-08T19:15:52.120 に答える