Сказ о том как Beetle свой покет лечил.Пару месяцев назад по инету пробежала статейка, рассказывающая о том, как запихнуть в RoverP3/PPC2002 прошивку от ViewsonicV35/WM2003. Я, как и многие другие владельцы данного КПК, подумав немного о бренности бытия и безвозвратно утекающей гарантии производителя, поддался апгрейдной горячке и стал гордым владельцем "V35" ;) Радость, от того, что машинка выжила после операции, была практически сразу же омрачена несколькими печальными фактами. Во-первых, V35 работает на 300МГц, а P3 всего лишь на 200. Камень в моей машинке отказался стабильно работать на 300МГц (через пару минут работы начинает жутко тормозить :-( ). Эта трабла решилась довольно просто:
Settings/System/Advanced Settings/Smart Battery = Low Perfomance Анализ данной траблы выявил полную невиновность САМОЙ ЛУЧШЕЙ ЧИТАЛКИ (HR рулит форева !!!). Оказалось, что колесико прокрутки в любой программе ведет себя таким образом. Поиск решения данной проблемы в инете ничего не дал (советы обновить HR или изменить задержку перед автоповтором не помогли)... Пришлось напрячь свой старый добрый модем: eVC4+SP2+PPC2003SDK=полгига (кому все это добро нужно, ищите на мелкософте). Не прошло и ДВУХ НЕДЕЛЬ (!!! вот кто бы мне объяснил зачем в дистрибутив eVC4 засунут Win2000SP2 да еще в придачу и бета какая-то !!!) как я смог наконец-то запустить Remote Spy. Результат в адаптированном виде привожу ниже: Результат одиночного короткого нажатия ВНИЗ на колесике прокрутки WM_KEYDOWN VK_DOWN dTime=28268 WM_KEYUP VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYUP VK_DOWN dTime=4 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYUP VK_DOWN dTime=4 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYUP VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYUP VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=4 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYDOWN VK_DOWN dTime=5 WM_KEYUP VK_DOWN dTime=108 Нажание ВНИЗ на джойстике WM_KEYDOWN VK_DOWN dTime=94721 WM_KEYUP VK_DOWN dTime=376 dTime - время с момента прихода последнего сообщения, мс Как мы видим, данный глюк обусловлен тем, что одиночное нажатие колесика генерирует длинную последовательность клавиатурных сообщений. Эти сообщения воспринимаются прикладными программами как МНОГОКРАТНОЕ нажатие кнопки. Данный глюк весьма напоминает известный каждому радиолюбителю "дребезг клавиатуры". Могу лишь предположить, что кто-то (например, бедный, но ооочень хитрый китаец) организовал экономию пары баксов на схеме защиты от дребезга или укомплектовал машинку более дешевыми микриками для колесика. В старой прошивке данный глюк, скорее всего лечился программно (отфильтровыванием слишком частых нажатий). Короче говоря, обуяла меня жажда деятельности и решил я сам патчик написать. Тем более что дело-то это несложное - SetWindowsHookEx и фильтруй на здоровье. Вот только меня сразу же поджидал суровый облом - eVC не захотел проглатывать вызов SetWindowsHookEx. Поиск в SDKшных header'ах облегчения не принес - НЕТ ТАКОЙ ФУНКЦИИ В ЭТОЙ СИСТЕМЕ. А MSDN так и вообще напрямую сказал - Windows CE никакие хуки не поддерживает. Странно мне стало с таких делов. Чтоб такая наворотная система обходилась без хуков??? НЕ ПОВЕРИЛ! И полез проверять в инет... Долго-ли, коротко-ли бродил по инету, наткнулся на какой то буржуинский FAQ, где на примере древнего H/PC показывалось что хуки в WinCE всеже есть! Полез снова ковырять свой PPC... И нашел! Урезан там просто этот механизм до жути, константы кой-какие изменены, ведет себя немного иначе чем на десктопе, но ЖИТЬ МОЖНО! В результате всей этой суеты был написан патчик, исправляющий данную проблему. Теперь вот решил и с широкой общественностью поделиться данной полезняшкой.
Итак, сам патч с исходниками можно взять здесь.
Просто скопируйте EXEшник на покет, запустите и НЕ ЗАКРЫВАЙТЕ,
пока нужна нормальная работа колесика прокрутки (минимизировать можно).
|