Aleksandr N
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Поздравляю программистов с неофициальным выходом Win8 и с новыми проблемами. Решил проверить работу своей программы на Win8, которая замечательно работала на всех версиях ОС начиная с 2000, а здесь не захотела. Проблема заключается в следующем. Делаю системный хук в библиотеке и в зависимости от ситуации передаю данные через PostMessage в программу. Вот эти PostMessage и не доходят/отсылаются. При этом, если я посылаю сообщение программе из библиотеки, например: procedure SetHook; stdcall; begin hHookCallWindowProc := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, hInstance, GetWindowThreadProcessId(hWnd, nil)); OldWindowProc := TFNWndProc(SetWindowLong(hkWnd, GWL_WNDPROC, LongInt(Addr(NewWindowProc)))); OldNotifyWindowProc := TFNWndProc(SetWindowLong(hNotifyWnd, GWL_WNDPROC, LongInt(Addr(NewNotifyWindowProc)))); PostMessage(WndОкнаПрограммы, Сообщение, Параметр1, Параметр2); end; то сообщения доходят, но если я это делаю из перехваченной функции: function NewWindowProc(h_Wnd: HWND; Msg: UINT; wp: WPARAM; lp: LPARAM): LRESULT; stdcall; begin Result := 0; case Msg of WM_MOUSEMOVE: begin PostMessage(WndОкнаПрограммы, Сообщение, Параметр1, Параметр2); Exit; end; end; Result := CallWindowProc(OldWindowProc, h_Wnd, Msg, wp, lp); end; то сообщения не доходят/отсылаются. Устанавливал режимы совместимости, права администратора, включал-отключал Контроль Учётных Записей, добавил в манифест строку поддержки Win8 - результата никакого. Вопрос 1. Как ещё можно заменить PostMessage (SendMessage к стати то-же не работает) чтобы действовало по подобному типу. 2. Может можно как-то "выйти" из-под перехваченной процедуры и там послать сообщение (пописать промежуточную функцию, вставить её вместо PostMessage и из этой функции послать сообщение - не работает). 3. Какие-нибудь умные мысли, советы чтобы всё это заработало. Здесь http://rghost.ru/40562934 пример подобной программы (не мой) которая делает похожее. Откомпилировано на XE3. Эта программа даже не загружает библиотеку. А если загрузит (один раз из 20 запусков), то управление при помощи PostMessage также не возможно. Спасибо. |