Хостинг от uCoz

Сказ о том как Beetle свой покет лечил.

Пару месяцев назад по инету пробежала статейка, рассказывающая о том, как запихнуть в RoverP3/PPC2002 прошивку от ViewsonicV35/WM2003. Я, как и многие другие владельцы данного КПК, подумав немного о бренности бытия и безвозвратно утекающей гарантии производителя, поддался апгрейдной горячке и стал гордым владельцем "V35" ;)

Радость, от того, что машинка выжила после операции, была практически сразу же омрачена несколькими печальными фактами. Во-первых, V35 работает на 300МГц, а P3 всего лишь на 200. Камень в моей машинке отказался стабильно работать на 300МГц (через пару минут работы начинает жутко тормозить :-( ). Эта трабла решилась довольно просто:

Settings/System/Advanced Settings/Smart Battery = Low Perfomance
(выставляет родные 200 Мгц ;-)

Вторая проблема, по-началу, показалась мне просто мистической: запустив свой любимый Haali Reader я обнаружил, что страницы теперь листаются не по одной, а как будто под управлением генератора случайных чисел (то 2 страницы перелистнет, то 10, то вообще до конца книги листает и остановиться никак не может :-O ).

Анализ данной траблы выявил полную невиновность САМОЙ ЛУЧШЕЙ ЧИТАЛКИ (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шник на покет, запустите и НЕ ЗАКРЫВАЙТЕ, пока нужна нормальная работа колесика прокрутки (минимизировать можно).