我想检索特定窗口的文本。使用
twapi::get_window_text $handle
我得到了窗口的标题。但是我怎样才能得到实际的内容呢?在 C++ 中我正在使用
EM_GETLINE
如何使用 TCL 的这些原始 Windows API 函数?例如,对于 EM_GETLINE,我必须定义要获取的行数以及存储它们的缓冲区。
有人可以告诉我如何使用来自 TCL 的原始 Windows API 函数或指向我可以找到示例的站点吗?谢谢
您可以使用 Twapi 的原始 API 发送消息。我不熟悉此消息如何工作的确切细节,但您可能比我更清楚:
package require twapi
proc get_richedit_text {hwnd line} {
set MAX_LEN 0x0100
# You have to lookup this value in the header.
set EM_GETLINE 0x00C4
set bufsize [expr {2 * ($MAX_LEN + 1)}]
# yes, twapi has malloc.
set szbuf [twapi::malloc $bufsize]
# catch everything, so we can free the buffer.
catch {
# set the first word to the size. Whatever a word is.
# I assume it is an int (type 1), but if it is a int64, use type 5, wchar is 3.
# arguments to Twapi_WriteMemory: type pointer(void*) offset bufferlen value
twapi::Twapi_WriteMemory 1 $szbuf 0 $bufsize $MAX_LEN
# send the message. You don't have SendMessage, only SendMessageTimeout
set ressize [twapi::SendMessageTimeout $hwnd $EM_GETLINE $line [twapi::pointer_to_address $szbuf] 0x0008 1000]
return [twapi::Twapi_ReadMemory 3 $szbuf 0 [expr {$ressize * 2}]]
} res opt
# free the buffer.
twapi::free $szbuf
return -options $opt $res
}
我使用了一些内部/未记录的 twapi API,唯一的文档是 twapi 的源代码。