Есть GUI приложение. Есть dll с хуком WM_COPYDATA. Необходимо после поимки этого мессаджа пересласть приложению стр-ру NOTIFYICONDATA, вытянутую из COPYDATASTRUCT (я все сделал осталось переслать). Краем уха что-то слышал про файл-маппинг. Кто знаком с этим очень прошу поделиться инфой. Заранее спасибо.
XCoder >Кто знаком с этим очень прошу поделиться инфой. http://msdn.microsoft.com/library/d...s/file_mapping_security_and_access_rights.asp Там и примеры есть правда все на буржуйском. Хотя лично я разбирался по статье: http://www.flipcode.com/articles/article_filemapping.shtml Просто о достаточно сложном must read Короче ВСЕМ рекомендую эту статью. вообще File mapping интересная тема МО соберусь с мыслями и статью напишу...если volodya пропустит
С проецированием файлов разобрался...но теперь нашел другие глюки. NOTIFYICONDATA из WM_COPYDATA выдираю следующим образом: Ставлю хук на WH_CALLWNDPROC. В хук-функции пишу следующее Код (Text): (код из длл) type TShellTrayData = packed record dwUnknown : longword; dwMessage : longword; nid : NOTIFYICONDATA; end; var pcwp : PCWPSTRUCT; pcd : PCOPYDATASTRUCT; ptd :^TShellTrayData; function hookfunc(c0de, wParam, lParam : integer): Lresult; stdcall; begin if c0de >= 0 then begin pcwp := Pointer(lParam); if pcwp^.message = WM_COPYDATA then begin pcd := PCOPYDATASTRUCT(pcwp^.lParam); ptd := Pointer(pcd^.lpData); nid := pShellTrayData.nid; После этого пишу инфу в спроецированный файл и посылаю свое сообщение в приложение (пробовал варианты с записью в физический файл, прога ведет себя одинаково так что тут все ок). Приложение по обработке этого сообщения открывет файл, берет ту структуру и дальше я с ней играюсь путем Shell_NotifyIcon с флагами NIM_ADD и NIM_DELETE соответственно. Делал на примере Total Commander, все работает, только после того как я сам удалил и потом восстановил в трее его иконку, от szTip осталась одна буква "Т". С другими программами кроме тотала иконка не хочет корректно восстанавливаться после того, как удалил. Например прога FWatcher. Перехватив ее WM_COPYDATA узнал nid.wnd и это оказался хэндл какого-то невидимого окна TPUtilWindow однако находящегося в одном адресном пространстве с процессом FWatcher.exe (узнал с помощью Spy++). Я в растерянности, где тут грабли??? Надеюсь на помощь профессионалов.