如何从另一个线程获取 "EDIT" 控件的文本?
How to get the text of an "EDIT" control from another thread?
我读到我应该只使用 PostMessage()
告诉 UI 线程访问 UI 控件。
例如,如果我要设置 "EDIT"
控件的文本,则遵循此方法没有问题。但是,如果我想获取 "EDIT"
控件的文本,如果我使用 PostMessage()
向 UI 线程发送消息,那么 PostMessage()
将 return 在文本被设置到缓冲区之前,我应该如何解决这个问题?
出于您确定的原因,您不能将 PostMessage
用于此目的。 WM_GETTEXT
是一条同步消息。你应该做的是:
- 如果 window 在您的进程中,那么您应该使用
GetWindowText
。
- 如果 window 在不同的进程中,那么你应该调用
SendMessageTimeout
。
为什么 SendMessageTimeout
而不是 SendMessage
?好吧,如果另一个进程挂起并且没有响应,那么使用 SendMessage
永远不会 return.
这里有更多关于这个话题的讨论:The secret life of GetWindowText。
我读到我应该只使用 PostMessage()
告诉 UI 线程访问 UI 控件。
例如,如果我要设置 "EDIT"
控件的文本,则遵循此方法没有问题。但是,如果我想获取 "EDIT"
控件的文本,如果我使用 PostMessage()
向 UI 线程发送消息,那么 PostMessage()
将 return 在文本被设置到缓冲区之前,我应该如何解决这个问题?
出于您确定的原因,您不能将 PostMessage
用于此目的。 WM_GETTEXT
是一条同步消息。你应该做的是:
- 如果 window 在您的进程中,那么您应该使用
GetWindowText
。 - 如果 window 在不同的进程中,那么你应该调用
SendMessageTimeout
。
为什么 SendMessageTimeout
而不是 SendMessage
?好吧,如果另一个进程挂起并且没有响应,那么使用 SendMessage
永远不会 return.
这里有更多关于这个话题的讨论:The secret life of GetWindowText。