URL: https://www.overclockers.at/coding-stuff/eswt_display_post_verschluckt_special_characters_a_211966/page_2 - zur Vollversion wechseln!
was ich jetzt noch probiert hab is die ALT-kombination und den keypad-tasten, das wäre genau das, was ich brauche,... leider geht das bei windows CE bzw. dem ding offenbar net, da die ALT-taste sofort wieder "rausspringt", sobald ich die erste taste gedrückt habe... um also einen bindestrich (keyCode: 45) darzustellen bräuchte ich ALT - 4 - 5, und beim vierer is schon vorbei...
such grad danach, ob das eine eigenheit des OS oder des geräts is
Zitat von sYbbmit 0xF0 habe ich mir erhofft, dass er mir den modus einfach zu alphanumerisch ändert ("Changes the mode to alphanumeric.")
...
mit E7 (unicode characters) funktioniert es ebenfalls nicht:
Zitat von sYbbwindows xp beispielsweise, wo ich dasselbe beispiel probiert hab, postet den bindestrich ohne weiteres handling, als ganz normales zeichen (den code dazu kann i auch gern posten). hier gibt es also offenbar andere virtual key-codes als bei winCE, was ja logisch ist.
Zitat von sYbbwas noch interessant ist: laut dem source im CVS wird das property event.character ignoriert; funktionieren tut es allerdings aber auch damitund also auch so, wie es javadoc sagt: entweder, man setzt den character oder den keyCode, beides funktioniert
ja, mein code ruft das nicht auf, würde auch keinen sinn machen => die sendInput-methode ist laut msdn für winCE so und so nicht verfügbar, die dafür verwendete user32.dll gibt es erst in höheren versionen. zusätzlich hab ich nur die möglichkeit, im java was zu ändern (zumindest jetzt, kurzfristig), was auch deinen bottom-up-ansatz für jetzt mal in den wind schießt.ZitatDas ist klar, weil das erste ist nur "For East Asian Input Method Editors (IMEs)" und das zweite geht...
die java implementierung sollte dieselbe sein; die nativen libraries sind anders (unterscheiden sich zumindest wesentlich in der file-größe). dennoch hab ich im eSWT source (CVS) nur eine einzige Display.c gefunden, die die besprochene methode "Display_PostKeyEvent" enthält, und diese ignoriert den character und bearbeitet ihn in keinster weise weiter, trotzdem funktioniert es. probiert hab ich das nur auf winCE, mit folgendem source haut aber zumindest das posten von bindestrihcen unter XP im eclipse hin:ZitatDie VK-Codes sind eigentlich gleich. Kanns sein, dass eSWT für Desktop-Windows und Windows CE unterschiedlich implementiert ist?
Code:public static void main(String[] args) { final Display display = new Display(); final Shell shell = new Shell(display); final Text text = new Text(shell, SWT.BORDER); text.setSize(text.computeSize(150, SWT.DEFAULT)); shell.pack(); shell.open(); new Thread() { public void run() { final String string = "!\"#$%&'()*+-./:;<=>?@[]\\^_~|{}`,"; // String string = "[][][][][][]----[][][][][][]"; // String string = "------"; for (int i = 0; i < string.length(); i++) { char ch = string.charAt(i); boolean shift = Character.isUpperCase(ch); ch = Character.toLowerCase(ch); if (shift) { Event event = new Event(); event.type = SWT.KeyDown; event.keyCode = SWT.SHIFT; display.post(event); } Event event = new Event(); event.type = SWT.KeyDown; event.character = ch; display.post(event); try { Thread.sleep(10); } catch (InterruptedException e) { } event.type = SWT.KeyUp; display.post(event); try { Thread.sleep(100); } catch (InterruptedException e) { } if (shift) { event = new Event(); event.type = SWT.KeyUp; event.keyCode = SWT.SHIFT; display.post(event); } } } }.start(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025