Цитата(Domoffou @ 11.11.2008, 03:15 ) | | PostMessage(HWND_BROADCAST, WM_SENTFROMHOOK, 0, Longint(@E)); // так не доходит |
и не дойдет. PostMessage, в отличие от SendMessage, только кладет сообщение в очередь. твоя структура является локальной переменной и лежит в стеке, который разрушается после выхода из процедуры. таким образом сообщение содержит указатель на недействительный кусок памяти. мало того, по идее, и SendMessage не должен работать, т.к. ты передаешь указатель на область памяти в передающем процессе, а в принимающем процессе этот указатель смысла не имеет. но тут microsoft "подстелила соломки" - SendMessage копирует кусок памяти в адресное пространство получающего процесса. вообще же, корректным способом передачи является сообщение WM_COPYDATA в сочетании с SendMessage.
чтобы передавать через PostMessage, надо ужаться до двух DWORD'ов(cardinal) и засовывать их в wParam и lParam. иначе придется использовать MMF(memory mapped files). |