rs
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору вопрос такой - написал простейший win-hook, перехватывающий и протоколирующий клавиатурный ввод если после установки этого общесистемного хука запустить одновременно пару приложений - одно win-приложение, другое dos-приложение, то под WXP проблем нет никаких, а под W95/98 имеет место следующее: а)после нескольких переключений между dos и win приложениями (в каждом из приложений выполняется клавитурный ввод) через какое-то время при вводе c клавиатуры в win-приложении символа 'F' (или 'А' на кириллице) выскакивает виндовое окно поиска (как если бы были нажаты клавиши <Win><F>), то же самое с 'D'('В') - открывается десктоп (как будто нажаты <Win><D>) и т.п. б)кроме того в W98 в dos-окне ни одно нажатие клавиши вообще не регистрируется (в WXP регистрация клавиатуры в dos-окне проходит без проблем) подскажите, пожалуйста, как решить вопросы а) и б) в)можно ли в W98 исключить перехват клавиатуры dos-приложений, для предотвращения ситуации а)? -- tnx -- зы хук ставится так: // pdd.kHook - находится в файле отображения (MapViewOfFile) pdd.kHook := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, Hinstance, 0); метод хука: function KeyboardProc(Code: Longint; wParam: WParam; lParam: LParam): LResult; stdcall; Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam); if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then begin // нотифицируем наше приложение о нажатии клавиши ... end; end; Добавлено: и еще вопрос - в разных источниках указываются разные варианты - так: function KeyboardProc(...); Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam); if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then begin // нотифицируем наше приложение о нажатии клавиши ... end; end; или так: function KeyboardProc(...); if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then begin Result := 0; // нотифицируем наше приложение о нажатии клавиши ... end else Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam); в чём разница? как правильнее? end; | Всего записей: 1344 | Зарегистр. 19-04-2003 | Отправлено: 08:19 25-05-2007 | Исправлено: rs, 08:56 25-05-2007 |
|