如何从另一个线程获取 "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