我不太了解GetWindowText如何在与调用方相同的线程上为窗口工作。如果GetWindowText阻塞直到消息被处理,线程如何调用DispatchMessage?已在GetWindowText中被阻止。这是否意味着必须始终从与操作消息循环的线程不同的线程中调用GetWindowText

最佳答案

GetWindowText只是SendMessage(WM_GETTEXT)的一个薄包装。

发送到窗口的消息始终在创建该窗口的线程中进行处理(窗口具有“线程相似性”)。发送的消息不会经过DispatchMessage,而是GetMessage(或PeekMessageMsgWaitForMultipleObjects)将直接调用窗口过程,以处理从另一个线程发送的消息。如果消息是从同一线程发送的,则SendMessage将调用窗口过程。

SendMessage documentation说:



the GetMessage documentation says:



the PeekMessage docs:



以前在Raymond Chen's excellent blog, The Old New Thing上突出显示了发送消息的行为,所有Win32开发人员都应订阅:


  • http://blogs.msdn.com/b/oldnewthing/archive/2004/11/19/266664.aspx


  • http://blogs.msdn.com/b/oldnewthing/archive/2008/12/23/9248851.aspx


  • 当然,在StackOverflow上也可以找到相关的问题:
  • SendMessage vs PostMessage + WaitForSingleObject
  • 关于windows - 同步使用GetWindowText,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9346508/

    10-09 04:59