MSDN informa que la función RegisterWindowMessage() solo se usa para registrar mensajes que se enviarán entre los procesos. Si se necesita un mensaje para enviar dentro de un proceso, se puede seleccionar de forma segura desde el rango WM_APP hasta 0xBFFF.¿Puede abusar de RegisterWindowMessage llevar al agotamiento de recursos?
Sin embargo, en nuestra base de código, a menudo veo que RegisterWindowMessage() se usa solo para mensajes enviados dentro de un proceso. Supongo que esto se hizo debido a la simplicidad percibida de usar RegisterWindowMessage() ya que no requiere la distribución manual de los identificadores de mensaje en el rango WM_APP..0xBFFF.
Entiendo correctamente que si muchas aplicaciones se ejecutan en una máquina y todas llaman a RegisterWindowMessage() con diferentes cadenas, podrían agotar el rango de identificadores de mensajes a los que se les permite devolver mediante RegisterWindowMessage() y para algunos de ellos solo devolver un valor que indique una falla? ¿Cuál podría ser una razón válida para utilizar los mensajes RegisterWindowMessage() en los casos en que los mensajes de rango WM_APP..0xBFFF serían suficientes?
no sabía nada de ese error en C++ Builder/Delphi! Nasty ... –
C++ Builder/Delphi (VCL) genera el nombre del mensaje de 'HInstance' (' GetModuleHandle') y Thread ID.En cuanto al ejecutable normal, la 'HInstance' no varía y el rango de identificadores de subprocesos es limitado, es poco probable que la aplicación VCL agote la tabla de átomos. Más plausible es en el caso de una DLL integrada en VCL. O cuando el ejecutable tiene establecido ASLR (lo que es un requisito para la certificación de Windows 8). –