KEmulator, модификация интерфейса. 11.07.2019 / 16:43 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| Доброго времени всем мастерам))) Открыть спойлер Закрыть спойлер Вот немножко с младшим заговорили о J2ME играх и вспомнили былое время и шедеврах того времени. Захотелось испытать мастерство сегодня(в 2019году), но не тут то было...точнее не все так как бы хотелось. Мы часто с ним играем в эмуляторы разных поколений(Dendy, SEGA, PS1), младшой еще любит и другие консоли, которых я только слышал и видел как играют.Собственно стал вопрос запуска эмулятора J2ME. Тут мы оба согласились, что из годных у нас осталось только MicroEmulator и KEmulator(я так понимаю, это один и тот же проект, который эволюционировал во времени, ведь ему уже более 10ти лет!). MicroEmulator нам понравился его фишкой (resize), а KEmulator - стабильностью и возможностью настроить управление на клавиатуру, как было удобно. В MicroEmulator нет такого метода как захват управления из вне с конфига(нет, конечно есть, но к нему нет описания как перезаписывать константы из XML, да и я сомневаюсь, что оно там реализовано, хоть и не до конца изучил декомпилированный текст), зато увидел свободный подьем переменных в KEmulator с текстового конфига, ну и можно было бы согласиться, если бы не одно НО... системные хот-кеи...да, те самые, которые активируются с ALT+(key), т.е. некоторые из клавиш клавиатуры были уже изьяты(видно разработчики ставили на Геймпады, учитывая доработанный модуль на DX8) и их нельзя было назначить на клавиатуру. Открыть спойлер Закрыть спойлер В общем: начал я разбирать все возможно доступные модули(со школы помню, что jar это zip-архив, а с курсов программирования помню как читать код и что искать). Как я понял: форма реализована на win32api внутри jar-файла, хоть можно подумать, что форма таки в EXE-лаунчере. В общем я проделал немало поисковых работ, что бы разобраться что к чему, хоть и не смог разобранный emulator.Emulator запустить в среде Eclipse, так как не до конца понимаю, какой выбрать тип проекта и как прописать главный класс, так как не уверен, что мидлет автономный сам по себе, что это не чья-то lib-а, а запустить его с параметрами при компиляции, так же не умею.После долгих попыток импортировать его в IDE-ешку, я сдался и начал искать хоть какие то исходники. Интернет и форумы меня привели на этот сайт и именам Kiriman&aNNiMON. Вот решил обратиться к Вам за мелкой помощью, ведь всего-то нужно убрать хот-кеи или добавить возможность их деактивировать. (*предполагаю, что у них всех общим метод подхвата, и проще просто добавить в метод false, что бы форма игнорировала нажатия клавиши от "Q" до "?"). Буду признателен за любое содействие в данной задаче. С радостью начну редачить сам, просто подскажите как его правильно разобрать, что бы можно было импортировать в среду и закомпилить после редакции.
Прикрепленные файлы: forKiriman.png (67.08 кб.) Скачано 185 раз |
11.07.2019 / 18:06 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| Хотя бы подскажите: какой софтиной его возможно отредактировать, я не до конца криворукий, рузультатами поделюсь и выложу здесь. |
11.07.2019 / 19:04 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Цитата sasa961: если бы не одно НО...системные хот-кеи...да, те самые, которые активируются с ALT+(key), т.е. некоторые из клавиш клавиатуры были уже изьяты(видно разработчики ставили на Геймпады, учитывая доработанный модуль на DX8) и их нельзя было назначить на клавиатуру. Так и не понял, в чём проблема? В настройках назначения клавиатуры нельзя назначить клавишу с Alt/Ctrl/Shift? Или у некоторых клавиш есть более высокий приоритет, например, I всегда включает показ информации, а S приостанавливает выполнение (тогда при чём тут Alt+key)? Форма не реализована на WinAPI, это Java приложение, но некоторый функционал вынесен в сторонние dll (вот они на WinAPI, да). Главное меню можно найти в классе emulator.ui.swt.ah. Каждый пункт меню это объект класса org.eclipse.swt.widgets.MenuItem, а системные хоткеи задаются методом setAccelerator(..). Редактировать классы нужно редактором байткода или дизассемблером/ассемблером, ни о каком проекте в Eclipse речи быть и не может — не заведётся, а чтобы завёлся нужно очень много исправлять после декомпиляции, оно того не стоит. __________________
let live |
11.07.2019 / 19:28 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| aNNiMON, благодарю) как раз таки вот эти кнопки(скрин) мне нужны. Вас понял, сейчас поищу какой-нибудь байт-редактор и займусь делом)
Прикрепленные файлы: forAnnimon.png (2.57 кб.) Скачано 123 раза |
11.07.2019 / 20:14 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| ...боюсь на это уйдет немножко больше времени, чем я думал. Тут не просто нужно код написать, а в IDE найти строку и потом на что-то ее заменить.
*найти - нашел, еще не пришел к чему заменять.
Прикрепленные файлы: MenuItem.class (11.73 кб.) Скачано 522 раза forAnnimon.png (62.87 кб.) Скачано 155 раз |
11.07.2019 / 21:12 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| sasa961, нужен именно редактор джава байткода. Из того, что помню: ClassConstructionKit, JBE. Либо удалить вызовы setAccelerator() для нужных пунктов, либо переназначить на что-то другое, то есть поменять число. Последнее можно и простым Hex-редактором сделать, попутно проверяя декомпилятором, что изменилось именно то, что нужно. Например, в оригинальном коде могло быть item.setAccelerator('T');
ASCII-код буквы T - 54 в Hex ( http://www.asciitable.com/index/asciifull.gif)Джава-машина закидывает это число в стек инструкцией bipush, её код в Hex: 10 Вот и выходит, что нужно отыскать 10 54 и поменять на что-нибудь другое. Изменили, сохранили, снова декомпилируем класс и смотрим туда, где было setAccelerator(xx), если поменялось, значит всё хорошо, это именно то место. Не MenuItem.class править надо, а emulator.ui.swt.ah. __________________
let live Изменено aNNiMON (11.07 / 21:14) (всего 2 раза) |
11.07.2019 / 21:52 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| aNNiMON, насколько я понял в ah.class можно отключить ModifyListener вообще. Сейчас только посмотрю на все обращения, что бы не отключить ничего важного. Там вообще только bool тип, так что отредактироваться должно ну просто очень смешно как просто. Ок, работаю над этим) 22:55::UPD: что-то не то. Событие, которое срабатывает, когда текст на контроле меняется(?) package emulator.ui.swt;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
final class aH implements ModifyListener {
private final aD a;
aH(aD paramaD) { this.a = paramaD; }
public final void modifyText(ModifyEvent paramModifyEvent) {
if (aD.a(this.a).getSelection()) {
aD.a(this.a);
aK.b(aD.a(this.a));
}
}
}
Изменено sasa961 (11.07 / 21:57) (всего 1 раз) |
11.07.2019 / 22:10 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| Шутку про регистр в Java понял. ah.class нашел, код изучил - это оно. ...
this.A = new MenuItem(this.c, 8);
this.A.setText(d.a("MENU_TOOL_CAPTURE_CLIP", "Capture to ClipBoard") + "\tAlt+C");
this.A.setAccelerator(65603);
this.A.addSelectionListener(this);
this.B = new MenuItem(this.c, 8);
this.B.setText(d.a("MENU_TOOL_START_RECORD_AVI", "Start Record AVI") + "\tV");
this.B.addSelectionListener(this);
this.C = new MenuItem(this.c, 8);
this.C.setText(d.a("MENU_TOOL_STOP_RECORD_AVI", "Stop Record AVI") + "\tB");
this.C.addSelectionListener(this);
this.D = new MenuItem(this.c, 8);
this.D.setText(d.a("MENU_TOOL_CONN_NETWORK", "Connect to Network"));
this.D.addSelectionListener(this);
this.E = new MenuItem(this.c, 8);
this.E.setText(d.a("MENU_TOOL_DISCONN_NETWORK", "Disconnect to Network"));
this.E.addSelectionListener(this);
this.F = new MenuItem(this.c, 8);
this.F.setText(d.a("MENU_TOOL_CHANNEL_UP", "Channel up") + "\tCtrl+>");
this.F.addSelectionListener(this);
this.F.setAccelerator(262206);
this.G = new MenuItem(this.c, 8);
this.G.setText(d.a("MENU_TOOL_CHANNEL_DOWN", "Channel down") + "\tCtrl+<");
this.G.addSelectionListener(this);
this.G.setAccelerator(262204);
this.H = new MenuItem(this.c, 32);
this.H.setText(d.a("MENU_TOOL_SHOW_TRACK_INFO", "Show Track Info") + "\tF3");
this.H.setSelection(k.p);
this.H.addSelectionListener(this);
this.H.setAccelerator(16777228);
menuItem2.setMenu(this.c);
this.b = new Menu(menuItem1);
this.e = new MenuItem(this.b, 8);
...
|
11.07.2019 / 22:54 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| sasa961, джава ни при чём, это обфускатор постарался. Да, оно. Вот там, где значения больше 128, там явно присутствуют модификаторы типа ALT, SHIFT, CTRL.
__________________
let live |
11.07.2019 / 22:56 | | sasa961 Пользователь Сейчас: Offline
Имя: Александр Откуда: Интернет) Регистрация: 21.08.2010
| Нашел! Тут почти все вызовы + судя по примерам, разрешена перегрузка конструктора на nullprotected final void b(boolean paramBoolean) {
this.L.setAccelerator(73);
this.K.setAccelerator(88);
this.M.setAccelerator(79);
this.N.setAccelerator(89);
this.O.setAccelerator(70);
this.t.setAccelerator(46);
this.u.setAccelerator(44);
this.v.setAccelerator(75);
this.w.setAccelerator(76);
this.z.setAccelerator(67);
this.B.setAccelerator(86);
this.C.setAccelerator(66);
this.i.setAccelerator(83);
this.j.setAccelerator(69);
this.h.setAccelerator(68);
this.k.setAccelerator(84);
this.L.setAccelerator(0);
this.K.setAccelerator(0);
this.M.setAccelerator(0);
this.N.setAccelerator(0);
this.O.setAccelerator(0);
this.t.setAccelerator(0);
this.u.setAccelerator(0);
this.v.setAccelerator(0);
this.w.setAccelerator(0);
this.z.setAccelerator(0);
this.B.setAccelerator(0);
this.C.setAccelerator(0);
this.i.setAccelerator(0);
this.j.setAccelerator(0);
this.h.setAccelerator(0);
this.k.setAccelerator(0);
this.l.setAccelerator(paramBoolean ? 82 : 0);
Изменено sasa961 (11.07 / 23:03) (всего 1 раз)
Прикрепленные файлы: ah.class (30.98 кб.) Скачано 562 раза |
Всего сообщений: 42 Фильтровать сообщения Поиск по теме Файлы топика (18)
|