BladeMight/Mahou

При конверте последнего слова добавляет текст из предыдущего окна.

Trost123 opened this issue · 33 comments

Пишем в нотпаде слово. Дабл шифт (конверт последнего слова).
Кликаем на текстовое поле в firefox. Пишем слово там. Конвертим. Слово из нотпада появляется перед словом что мы написали в ff.
mahou_extra_text

Кликаем

Если после этого не очищается слово, значить hook мыши умер, попробуйте включить функцию перезапуск hook'ов.

Я понял почему случается этот баг.
Захожу в настройки Mahou, ничего не меняю, жму "применить" - курсор "фризит" на месте где-то на 1.5 сек, после этого баг будет присутствовать до перезапуска программы.
Если использовать "перезапуск хуков" - всё норм.

В чём вообще смысл делать такие функции отключаемыми? Звучит как завуалированая настройка "работать корректно". Я изначально думал что перезапуск хуков будет дополнительные циклы ЦПУ жрать, вот и отключил.

Судя по всему при сохранении настроек какая-то скрытая ошибка происходит из-за чего фриз и отваливается хук.

Судя по всему при сохранении настроек какая-то скрытая ошибка происходит

Включите логгинг, и пришлите лог, если так.

В чём вообще смысл делать такие функции отключаемыми?

Все в руках пользователя, а может кому-то не надо, т.к. у него и и так норм. работает?

У меня 100% повторяемость бага.
Включил mahou - сделал как на гифке в первом посте - баг не случился.
Открыл окно, нажал применить\ок - зависание курсора, баг активирован.
Лог:
2017.07.31.txt

Хм, в логе нет информации о очистке запомненных введенных слов Mahou, видимо hook мыши и впрямь умирает при применить/ОК(ОК делает и применить), хотя у меня не получается его воспроизвести(~30 раз - все ОК)...

зависание курсора

Как раз так hook'и(мыши/клавиатуры) обычно умирают, и потом сделать что-либо не можно, т.к. проверить умер ли он - не получиться... поэтому я и придумал фикс перезапуска Hook'ов после действий горячих клавиш - каждый раз.
Понять бы от чего он умирает... И почему именно мыши? Может у тебя есть еще какие-то программы использующие hook'и мыши? Попробуй убрать все лишние программы командой в cmd: taskkill /f /fi "USERNAME eq %username%"(Сразу убивает все процессы пользователя, осторожно.) , а дальше Ctrl+Shift+Esc и Файл -> новая задача -> explorer.exe, а потом найди и запусти Mahou, notepad, FF и попробуй.

  1. taskkill /f /fi "USERNAME eq %username%"
  2. Запустил ff, notepad, mahou
  3. Хук мышки жив
  4. Применил настройки, подвис
  5. Баг есть.
  6. Решил повторить баг не касаясь мышки (через alt-tab) - баг есть.
  7. Включил "перезапускать хуки", перезапустил Mahou - теперь баг ПРИ КЛИКЕ НЕ повторяется, даже после применения настроек но при alt-tab повторяется.
    Дичь какая-то.
    Выводы:
  • Alt-tab всегда забывает сбросить буфер слова.
  • Хук мышки умирает при применении настроек, если не использовать функцию "перезапуск хука".
  • Приложения роли не играют: пробывал firefox, notepad, notepad++ в любом порядке\комбинации.

Вот мои настройки
Mahou.zip

Если есть время\желание могу сейчас или завтра по TeamViewer продемонстрировать. Может наглядно под твоим командованием получится быстрее выяснить корень проблемы.

Еще наблюдение: ctrl-таб очищает буфер Mahou всегда! (тестил на смене вкладок в notepad++)

У тебя подвисание курсора не происходит при применении насроек?
Хотелось бы знать является ли это индикатором проблемы, чтобы быстрее тестить.

И еще один тест кейс: переименовал Mahou.ini (тем самым сбросил настройки).
Через alt-tab баг есть, через мышку баг есть, если снять галочку хуков и применить настройки.
При этом если (не поставив обратно галочку) перезапустить mahou - хук мышки опять будет жив и работает без проблем.

Выводы:
Alt-tab не резетит кеш на дефолт настройках.
Ctrl+tab\ctrl+e резетит кеш.
Сохранение настроек почему-то убивает хук мышки.

Есть подозрения что Thread.Sleep(10); является причиной фризов:
https://stackoverflow.com/questions/27356165/why-does-thread-sleep-freeze-the-form

Начал перебирать версии постарее: 2.0.0.0 всё еще подвисает и теряет хук при сохранении настроек.
Потом сразу перескочил на v1.4.3.0 - хук при сохранении настроек не слетает. Т.е. где-то в редизайне интерфейса этот баг пришел. Скорее всего как раз с мультитредингом что-то накосячено.

А при переключении окон через alt-tab баг повторяется даже на v1.4.3.0. Alt-tab не сбрасывает слово. ctrl, прото так нажатый сам по себе - сбрасывает слово. Wtf.

Сорри за мультипост. Просто мне реально любопытно стало и захотелось максимально уточнить причину и свойства бага.
Надеюсь этого будет достаточно, ушел спать.

Есть подозрения что Thread.Sleep(10);

Да, фризит, но на 10 мс, врятли заметно на глаз.

v1.4.3.0. Alt-tab не сбрасывает слово.

Ну так там не было еще такого правила. И сейчас ⚠️ заметил что сейчас его тоже нет, потерялось наверно когда я переделывал способ горячих клавиш...

Хотелось бы знать является ли это индикатором проблемы,

Скорее следствием.

ctrl, прото так нажатый сам по себе - сбрасывает слово. Wtf.

Ну так раньше получалось стояло правило которое очищало слово по ctrl+люб. клавиша, причем сам ctrl в момент нажатия считался той самой люб. клавишей, в новых версиях(2.0+) исправлено.

Alt-tab всегда забывает сбросить буфер слова.

Значит hook клавиатуры умер. Не, не то → подробнее ⚠️

ctrl-таб очищает буфер

Ну так правильно, стоит правило очищать при Ctrl+Любая клавиша, т.к. во многих(большинстве) программ эти комбинации - гор. клавиши, и в самом Windows есть парочка таких которые бы мешали конвертации последнего слова: Ctrl+A(выделяет все, если здесь не очистить слово будет не оч. хорошо), Ctrl+Z(Mahou не может знать что именно отменятся так что лучше тоже очищать), Ctrl+BackSpace(тут удаляется целое слово, поэтому все и очищается), и т.д.

Сорри за мультипост.

Чем больше информации тем лучше.

Скорее всего как раз с мультитредингом что-то накосячено.

Не, не то, тут рендеринг делается .Net'ом на 4.5 и ниже не используется d3d в WinForms, а вот 4.6+ похоже используется d3d.

Хук мышки умирает при применении настроек, если не использовать функцию "перезапуск хука".

Странно эта функция не используется в месте сохранения настроек, поэтому и не должна влиять на это... Она используется только в одном месте - при нажатии на горяч. клавишу → после действия гор. клавиши.

Вот мои настройки

С ними у меня тоже все норм. ну кроме Alt+Tab, но я и это уже исправил, вот:
Mahou.exe.gz

Если есть время\желание могу сейчас или завтра по TeamViewer продемонстрировать.

Думаю стоит попробовать.

Странно эта функция не используется в месте сохранения настроек, поэтому и не должна влиять на это... Она используется только в одном месте - при нажатии на горяч. клавишу → после действия гор. клавиши.

У меня в логе всегда при октрытии окна и применении настроек срабатывает рестарт хуков.

Лог под спойлером
10:37:23.171 [Info]
                    Mahou Main window visibility changed to [True].
10:37:23.222 [Info]
                    Global hooks stopped.
10:37:23.237 [Info]
                    Global hooks started.
10:37:23.365 [Info]
                    Modifiers [15] sent up.
10:37:23.381 [Info]
                    Hwnd 1770490, layout: 67699721, Mahou layout: 68748313
10:37:25.822 [Info]
                    Last word & words cleared [with mouse click].
10:37:25.936 [Info]
                    Mahou Main window visibility changed to [False].
10:37:25.956 [Info]
                    Global hooks stopped.
10:37:25.973 [Info]
                    Global hooks started.
10:37:26.100 [Info]
                    Modifiers [15] sent up.
10:37:26.114 [Info]
                    Hwnd 132386, layout: 68748313, Mahou layout: 68748313
10:37:26.924 [Info]
                    Saved from temps.
10:37:26.977 [Info]
                    All configurations saved.
10:37:26.984 [Info]
                    Language changed.
10:37:26.991 [Info]
                    Locales for ALL comboboxes refreshed.
10:37:27.004 [Info]
                    Hotkeys initialized.
10:37:27.010 [Info]
                    Changed flag to ru lcid 1049
10:37:27.018 [Info]
                    All configurations loaded.

P.S. Пожалуйста не привыкайте через правку комментария добавлять 50% новой информации.
Я не получаю уведомления о том что было дописано и итого либо не замечу, либо буду параноидально проверять обновлять страницу 😄

при октрытии окна и применении настроек срабатывает рестарт хуков.

Это потому что включено логирование.

Пожалуйста не привыкайте через правку комментария добавлять 50% новой информации.

ОК.

По поводу очистки слов кликами мыши, там должна появляться строчка: Last word & words cleared [with mouse click]., если ее нет то hook'а мыши нет.

Ну значит умирает хук когда применяешь настройки без галочки.
Впринципе баг не кричиный - просто после настройки Mahou буду перезапускать. Я настройки не часто меняю.
Если всё еще интересно пофиксить - гифка и лог во время записи:
mahou_dead_mouse_hook
2017.08.01.txt

Т.е. "перезапускать хуки" срабатывает когда я делаю конверт. И даже после включения этой опции первый конверт будет с лишним текстом ("привПривет" на гифке). После этого хуки перезапускаются и всё ок.
Почему хуки умирают, когда жму применить\ок - без пониятия.
Подвисание курсора с багом напрямую похоже не связано. Баг случается у меня всегда, а подвисает курсор (при нажатии ок\применить) не всегда. Вообще странно что подвисает курсор, а не окно программы. Т.е. если ткнуть "ок" - окно закрывается анимацией моментально, а курсор невозможно двигать еще долю секунды.

UPD: вру, курсор виснет именно от "смерти" хука. Т.к. если повторно применять настройки когда хук уже умер - подвисания нет. Если перезапустить хуки (перезапуском программы или соотв. галочкой) - при применении опций снова подвиснет.
В общем что-то не так происходит во время сохранения настроек.

Попробуй здесь: Mahou.zip, сделал обязательным перезапуск Hook'ов после сохранения настроек.

Подвисание не пропало. Хуки теперь работают после сохранения настроек, но появилась куча других багов:

  • капс лок не переключает раскладку (видимо теперь висит 2 хука на клавиатуре? А умирает наверное только хук мыши.)
  • "ghbdtn" конвертится в "ппррииввеетт"
  • Конверт последнего слова захватывает лишние слова.
    "ghbdtn ghbdtn ghbdtn" конвертит в "ghbdtn gппррииввеетт"

Да и сам факт подвисания говорит что что-то идёт не так при сохранении настроек. А реально сделать билд, который выкидывал бы в лог (или в всплывающее окошко ошибки) когда они случаются? Ибо методом тыка пытаться выяснить уже надоело.

который выкидывал бы в лог (или в всплывающее окошко ошибки) когда они случаются?

У global hook'ов они не случаются...

@Trost123 Обновил релиз, проверь Mahou-v2.3.4.4.

факт подвисания говорит что что-то идёт не так при сохранении настроек.

Сколько времени подвисает? Если 0.5~1 сек то это нормальное сохранение настроек, а если мышь начинает слабо реагировать на движения(тормозить) то это hook умер, и длиться примерно 4~8+ сек.

В 2.3.4.4 теперь курсор подвисает (0.5-1с вообще не двигается) при каждом сохранении (что логично ведь по-сути мы вылечили симптом а не проблему)
Мышка теперь ведёт себя как положено всегда, а alt-tab fix почему-то опять пропал. Даже если не применять настройки.

alt-tab fix почему-то опять пропал

глянем.

@Trost123 Восстановил фикс, обновил релиз Mahou-v2.3.4.4.

мы вылечили симптом а не проблему

Ну понять причину проблемы не получается т.к. это global hook'и... так что это единственное быстрое решение.

Ну понять причину проблемы не получается т.к. это global hook'и...

Может это и сам Windows их отключает, может что-то еще...

Ну по-сути проблемы больше нет, спасибо!
Большинство разработчиков вообще забили бы на такого рода мелкий баг или фиксили бы его с месяц.

А насчет фриза курсора - первый раз вижу чтобы программа такое делала. Даже когда программы виснут от нагрузки (игры, excel, blender), никогда курсор не фризят.
Не критично, но любопытно почему оно так.
Понять причину проблемы думаю можно, выкомментировав все действия что происходят при сохранении настроек и возвращая по одному. Вприцнипе у меня VS2017 стоит на ПК, может когда-то скачаю исходник побалуюсь с этим.

Понять причину проблемы думаю можно, выкомментировав все действия что происходят при сохранении настроек и возвращая по одному

Да, вот только у меня не встречается проблема...

Не критично, но любопытно почему оно так.

Простой ответ: Mahou сохраняет и загружает и обновляет и т.д. очень много настроек и свойств.

Большинство разработчиков вообще забили бы на такого рода мелкий баг или фиксили бы его с месяц.

Да ладно, серьезно?

Ну по-сути проблемы больше нет, спасибо!

Круто.

VS2017

Может она тоже и не заметит проблемы, просто тестил раньше 2015 community и никаких багов о hook'ах там не отображалось...

@Trost123 А еще по поводу #101 все ок?

Простой ответ: Mahou сохраняет и загружает и обновляет и т.д. очень много настроек и свойств.

Экзель сохраняет таблицу 15000х30 с кучей информации, но не фризит мне курсор. 😉

15000х30 с кучей информации

Ну то всего лишь запись на диск, а у Mahou кроме этого и в памяти и графически и логически все чекбоксы и т.д. меняет загружает и сохраняет.

Всё-равно не пойму что там такое сложное. Считать все чекбоксы\поля в окне и записать в 173 строки 9kb .ini файл?
Или оно их сразу после записи в файл считыает оттуда и обратно? Тогда возникает вопрос - зачем?

И вообще по-моему это не связано с самим сохранением. Смотрю в диспетчере задач - во время фриза курсора ЦП на процессе Mahou больше 2% не поднимается.
Тем более уже установил закономерность что фриз случается именно тогда, когда умирает хук. Когда хук уже умер (до фикса с рестартом) - применение настроек не вызывало фриза.

P.S. Не принимай как критику на свой счёт. Мне всего лишь любопытно как коллеге разработчику разгадать очередной баг, потрещать про компульсивную оптимизацию + сделать эту программу еще лучше.

@Trost123 Тогда вопрос в том почему хук умирает, у меня нормально, наверно нужно как-то тебе потестить...

Не принимай как критику на свой счёт. Мне всего лишь любопытно как коллеге разработчику разгадать очередной баг, потрещать про компульсивную оптимизацию + сделать эту программу еще лучше.

Да мне так же, спасибо.