0

我想检索特定窗口的文本。使用

twapi::get_window_text $handle 

我得到了窗口的标题。但是我怎样才能得到实际的内容呢?在 C++ 中我正在使用

EM_GETLINE

如何使用 TCL 的这些原始 Windows API 函数?例如,对于 EM_GETLINE,我必须定义要获取的行数以及存储它们的缓冲区。

有人可以告诉我如何使用来自 TCL 的原始 Windows API 函数或指向我可以找到示例的站点吗?谢谢

4

1 回答 1

0

您可以使用 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 的源代码。

于 2013-09-23T08:24:12.907 回答