Вниз  KEmulator, модификация интерфейса.
- 11.07.2019 / 16:43
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Доброго времени всем мастерам)))

Открыть спойлер

Собственно стал вопрос запуска эмулятора J2ME. Тут мы оба согласились, что из годных у нас осталось только MicroEmulator и KEmulator(я так понимаю, это один и тот же проект, который эволюционировал во времени, ведь ему уже более 10ти лет!). MicroEmulator нам понравился его фишкой (resize), а KEmulator - стабильностью и возможностью настроить управление на клавиатуру, как было удобно. В MicroEmulator нет такого метода как захват управления из вне с конфига(нет, конечно есть, но к нему нет описания как перезаписывать константы из XML, да и я сомневаюсь, что оно там реализовано, хоть и не до конца изучил декомпилированный текст), зато увидел свободный подьем переменных в KEmulator с текстового конфига, ну и можно было бы согласиться, если бы не одно НО...системные хот-кеи...да, те самые, которые активируются с ALT+(key), т.е. некоторые из клавиш клавиатуры были уже изьяты(видно разработчики ставили на Геймпады, учитывая доработанный модуль на DX8) и их нельзя было назначить на клавиатуру.

Открыть спойлер

После долгих попыток импортировать его в IDE-ешку, я сдался и начал искать хоть какие то исходники. Интернет и форумы меня привели на этот сайт и именам Kiriman&aNNiMON. Вот решил обратиться к Вам за мелкой помощью, ведь всего-то нужно убрать хот-кеи или добавить возможность их деактивировать. (*предполагаю, что у них всех общим метод подхвата, и проще просто добавить в метод false, что бы форма игнорировала нажатия клавиши от "Q" до "?").

Буду признателен за любое содействие в данной задаче. С радостью начну редачить сам, просто подскажите как его правильно разобрать, что бы можно было импортировать в среду и закомпилить после редакции.


Прикрепленные файлы:
forKiriman.png (67.08 кб.) Скачано 167 раз
- 11.07.2019 / 18:06
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Хотя бы подскажите: какой софтиной его возможно отредактировать, я не до конца криворукий, рузультатами поделюсь и выложу здесь. :)
- 11.07.2019 / 19:04
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Цитата 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
  Пользователь

sasa961 
Сейчас: Offline
aNNiMON, благодарю) как раз таки вот эти кнопки(скрин) мне нужны. Вас понял, сейчас поищу какой-нибудь байт-редактор и займусь делом)


Прикрепленные файлы:
forAnnimon.png (2.57 кб.) Скачано 106 раз
- 11.07.2019 / 20:14
sasa961
  Пользователь

sasa961 
Сейчас: Offline
...боюсь на это уйдет немножко больше времени, чем я думал. Тут не просто нужно код написать, а в IDE найти строку и потом на что-то ее заменить.

*найти - нашел, еще не пришел к чему заменять.


Прикрепленные файлы:
MenuItem.class (11.73 кб.) Скачано 473 раза
forAnnimon.png (62.87 кб.) Скачано 139 раз
- 11.07.2019 / 21:12
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
sasa961, нужен именно редактор джава байткода. Из того, что помню: ClassConstructionKit, JBE.
Либо удалить вызовы setAccelerator() для нужных пунктов, либо переназначить на что-то другое, то есть поменять число. Последнее можно и простым Hex-редактором сделать, попутно проверяя декомпилятором, что изменилось именно то, что нужно.

Например, в оригинальном коде могло быть
  1. item.setAccelerator('T');
ASCII-код буквы T - 54 в Hex (http://www.asciitable.com/index/asciifull.gif)
Джава-машина закидывает это число в стек инструкцией bipush, её код в Hex: 10
Вот и выходит, что нужно отыскать 10 54 и поменять на что-нибудь другое.
Изменили, сохранили, снова декомпилируем класс и смотрим туда, где было setAccelerator(xx), если поменялось, значит всё хорошо, это именно то место.

:ps: Не MenuItem.class править надо, а emulator.ui.swt.ah.
__________________
 let live

Изменено aNNiMON (11.07 / 21:14) (всего 2 раза)
- 11.07.2019 / 21:52
sasa961
  Пользователь

sasa961 
Сейчас: Offline
aNNiMON, насколько я понял в ah.class можно отключить ModifyListener вообще. Сейчас только посмотрю на все обращения, что бы не отключить ничего важного. Там вообще только bool тип, так что отредактироваться должно ну просто очень смешно как просто.

Ок, работаю над этим) :)

22:55::UPD: что-то не то. Событие, которое срабатывает, когда текст на контроле меняется(?)
  1. package emulator.ui.swt;
  2.  
  3. import org.eclipse.swt.events.ModifyEvent;
  4. import org.eclipse.swt.events.ModifyListener;
  5.  
  6. final class aH implements ModifyListener {
  7.   private final aD a;
  8.  
  9.   aH(aD paramaD) { this.a = paramaD; }
  10.  
  11.   public final void modifyText(ModifyEvent paramModifyEvent) {
  12.     if (aD.a(this.a).getSelection()) {
  13.       aD.a(this.a);
  14.       aK.b(aD.a(this.a));
  15.     }
  16.   }
  17. }


Изменено sasa961 (11.07 / 21:57) (всего 1 раз)
- 11.07.2019 / 22:10
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Шутку про регистр в Java понял. ah.class нашел, код изучил - это оно.
  1. ...
  2. this.A = new MenuItem(this.c, 8);
  3.     this.A.setText(d.a("MENU_TOOL_CAPTURE_CLIP", "Capture to ClipBoard") + "\tAlt+C");
  4.     this.A.setAccelerator(65603);
  5.     this.A.addSelectionListener(this);
  6.     this.B = new MenuItem(this.c, 8);
  7.     this.B.setText(d.a("MENU_TOOL_START_RECORD_AVI", "Start Record AVI") + "\tV");
  8.     this.B.addSelectionListener(this);
  9.     this.C = new MenuItem(this.c, 8);
  10.     this.C.setText(d.a("MENU_TOOL_STOP_RECORD_AVI", "Stop Record AVI") + "\tB");
  11.     this.C.addSelectionListener(this);
  12.     this.D = new MenuItem(this.c, 8);
  13.     this.D.setText(d.a("MENU_TOOL_CONN_NETWORK", "Connect to Network"));
  14.     this.D.addSelectionListener(this);
  15.     this.E = new MenuItem(this.c, 8);
  16.     this.E.setText(d.a("MENU_TOOL_DISCONN_NETWORK", "Disconnect to Network"));
  17.     this.E.addSelectionListener(this);
  18.     this.F = new MenuItem(this.c, 8);
  19.     this.F.setText(d.a("MENU_TOOL_CHANNEL_UP", "Channel up") + "\tCtrl+>");
  20.     this.F.addSelectionListener(this);
  21.     this.F.setAccelerator(262206);
  22.     this.G = new MenuItem(this.c, 8);
  23.     this.G.setText(d.a("MENU_TOOL_CHANNEL_DOWN", "Channel down") + "\tCtrl+<");
  24.     this.G.addSelectionListener(this);
  25.     this.G.setAccelerator(262204);
  26.     this.H = new MenuItem(this.c, 32);
  27.     this.H.setText(d.a("MENU_TOOL_SHOW_TRACK_INFO", "Show Track Info") + "\tF3");
  28.     this.H.setSelection(k.p);
  29.     this.H.addSelectionListener(this);
  30.     this.H.setAccelerator(16777228);
  31.     menuItem2.setMenu(this.c);
  32.     this.b = new Menu(menuItem1);
  33.     this.e = new MenuItem(this.b, 8);
  34. ...

- 11.07.2019 / 22:54
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
sasa961, джава ни при чём, это обфускатор постарался. Да, оно. Вот там, где значения больше 128, там явно присутствуют модификаторы типа ALT, SHIFT, CTRL.
__________________
 let live
- 11.07.2019 / 22:56
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Нашел! Тут почти все вызовы + судя по примерам, разрешена перегрузка конструктора на null

  1. protected final void b(boolean paramBoolean) {
  2.     this.L.setAccelerator(73);
  3.     this.K.setAccelerator(88);
  4.     this.M.setAccelerator(79);
  5.     this.N.setAccelerator(89);
  6.     this.O.setAccelerator(70);
  7.     this.t.setAccelerator(46);
  8.     this.u.setAccelerator(44);
  9.     this.v.setAccelerator(75);
  10.     this.w.setAccelerator(76);
  11.     this.z.setAccelerator(67);
  12.     this.B.setAccelerator(86);
  13.     this.C.setAccelerator(66);
  14.     this.i.setAccelerator(83);
  15.     this.j.setAccelerator(69);
  16.     this.h.setAccelerator(68);
  17.     this.k.setAccelerator(84);
  18.     this.L.setAccelerator(0);
  19.     this.K.setAccelerator(0);
  20.     this.M.setAccelerator(0);
  21.     this.N.setAccelerator(0);
  22.     this.O.setAccelerator(0);
  23.     this.t.setAccelerator(0);
  24.     this.u.setAccelerator(0);
  25.     this.v.setAccelerator(0);
  26.     this.w.setAccelerator(0);
  27.     this.z.setAccelerator(0);
  28.     this.B.setAccelerator(0);
  29.     this.C.setAccelerator(0);
  30.     this.i.setAccelerator(0);
  31.     this.j.setAccelerator(0);
  32.     this.h.setAccelerator(0);
  33.     this.k.setAccelerator(0);
  34.     this.l.setAccelerator(paramBoolean ? 82 : 0);


Изменено sasa961 (11.07 / 23:03) (всего 1 раз)


Прикрепленные файлы:
ah.class (30.98 кб.) Скачано 498 раз
Наверх  Всего сообщений: 42
Фильтровать сообщения
Поиск по теме
Файлы топика (18)