The Button Enhancer Bible & great button config tips for Opera Mobile / Mini users - General Topics

The Button Enhancer Bible & great button config tips for Opera Mobile / Mini users
Back in early 1997, when the first Microsoft WindowsCE 1.0-based devices hit the selves, they already contained shortcuts to built-in programs. Back then, as the 1.0-series of WindowsCE exclusively ran under clamshell Handheld PC’s with a built-in keyboard, it was pretty easy to find place for these quick start keys. For example, in the Philips Velo 1, the entire number row is overridden with them, providing access to almost all major applications (Pocket Word, Excel, Calendar, Contacts, Tasks, WWW, Inbox, Database, Calculator, Voice Memo) delivered with the device.
When, in 1998, the Palm-size PC’s and, in 2000, Pocket PC’s arrived, the lack of a built-in real keyboard meant it was no longer possible to crunch as many buttons in the radically reduced front and side surface of the device. Therefore, the number of shortcut keys were substantially reduced; most devices only sported five of them. There were differences in both directions: for example, the HP iPAQ 2210 only had four, while the Fujitsu-Siemens Pocket Loox 720 had six and, what is more, these buttons were all bifunctional: press and hold them instead of just quickly pressing it, and another functionality starts. (Some models, for example, the h2210, also supports something like this – holding the buttons results in, in general, creating new records. However, unlike with the Pocket Loox, you can’t redefine the functionality if you want to access something different.)
Unfortunately, very few models support bifunctional (short-press and long-press) buttons. While some device manufacturers (like HP with their WM5 upgrade for the HP iPAQ hx4700, introducing full support for press-and-hold front buttons) did realize the ability to double the functionality one can quickly access with a single button press(-and-hold), not even the latest mainstream models offer this. For example, HTC’s Pocket PC Phone Edition (Windows Mobile Professional) models, in general, only offer one application (app for short) button with double functionality (for example, Button 4 on the Universal and the Wizard); all the others are single-function and, therefore, greatly reduce their usefulness and the flexibility, should you want to greatly speed up invoking applications or greatly simplifying tasks (for example, by a hardware button-initiated macro playing back several pre-recorded stylus taps to, for example, greatly speed up mail checking).
Some of the current models even more reduced the number of (redefinable) buttons. For example, the HTC Elf / Touch only allows for redefining the Camera button and nothing else (also see THIS). Yeah, only ONE button. Nice, eh?
The hardware manufacturers’ neglecting the need of people wanting for more functionality assigned to the few hardware buttons of their Pocket PC’s (and, due to the, in general, far fewer application buttons they have, to a lesser degree, MS Smartphones) has resulted in a plethora of third-party solutions that do allow for this. In this roundup, I explain and thoroughly compare these all.
This kind of a Button Enhancer Bible has long been awaited. Except for some not very recent (pre-WM5) and, now, completely outdated quick reviews & comparisons, there has never been a really decent and thorough comparison of the major button enhancers, let alone ones that cover even the latest (2007), kick-butt, freeware titles developed by some highly skilled XDA-Developers folks.

1.1 What can you expect of button enhancers?
(Sometimes heavily) extending the number of applications you can start / tasks you can do with a hardware button by adding at least press-and-hold mode to the already-existing “short press” one. The vast majority of the enhancers add three additional states and there is one (HButton), which goes even further and lets for adding an unlimited number of different invocation capabilities to a button.
They, in general, contain widely asked-for goodies missing from the Windows Mobile operating system like a task manager (to quickly switch between running tasks), a task killer (to completely get rid of it to make sure it doesn’t take up any memory or other system resources), sometimes fancy, full-screen clocks (as opposed to the tiny one in the upper right corner) etc.
Note that you can freely download utilities like these. The most important repository of these free, but highly useful, single-purpose, small utilities is that of PHM PowerToys. The single-purposedness of these small applications also means these tools can be directly assigned to a hardware button (this is exactly what PHM Keys does). This also means that, if the particular button extender you select doesn’t have built-in for example Reset functionality (which can be very useful when assigned to a button, should you need to soft reset your device several times a day; a well-known situation for users of Resco Audio Recorder, which, in many cases, (at least on the Pocket PC platform) requires a reset after resuming the device and/or reinserting the sotrage card it should record to), you can always make use of Reset.exe of PHM PowerToys.
Incidentally, still speaking of the built-in Reset support of the reviewed button enhancers, none of them does prompt the user before resetting the device. Therefore, to avoid resetting resulting from an unwanted button press (you, for example, press it three times instead of twice and this triggers an unconditional soft reset), you may still want to prefer PHM’s version of Reset to the ones built into these button enhancers.
The case is pretty much different with the built-in task managers. In general, they’re better than that of PHM because you will have the time to select the task you’d like to switch to and, with the best task manager implementations, you can fine-tune its parameters.
Some (currently, two; one of these, buttonMax, still not being WM5+-compliant, doesn’t run on current Windows Mobile devices) of them let for defining application-specific shortcuts. These can be VERY important and useful. Just one example of this (which, also, explains where thee kinds of shortcuts can prove really useful):
Opera Mini (OM4 for short), with the latest, 4-series, has become a serious contender to all the other Web browsing solutions on out platform. Many even consider OM4 to be THE best Windows Mobile (WM for short) Web browser, particularly with a decent MIDlet manager (the environment to run MIDlets like OM4) like Esmertec’s Jbed.
OM4 (along with the still active 3-series) had, before the just-released beta 2, a very important problem: it doesn’t let for switching between full screen and non-full screen mode unless you have a built-in hardware dialpad or keyboard on your phone or, depending on the MIDlet manager you use (some, like Jblend, don’t support switching between the two screen modes using the on-screen keyboard; others like the, for running OM4, most recommended Jbed, can), can be bothered to bring up the on-screen keyboard to make the switch. If nothing works (you don’t have any kind of dialpad or keyboard and the on-screen keyboard isn’t supported by the particular MIDlet manager, you’ll need to find external ways of sending the “*” (or, in cases, the “**”) character(s) to OM4 to do the switching. It’s here that scripting solutions like MortScript come into picture: you just create a MortScript file containing a Sendkeys() function call, and just assign this script to one of your hardware buttons. After this, upon pressing the button, a *(*) will be inserted into the active program; if it’s OM4, then, it’ll force it to switch between the two screen modes. (Which, unfortunately, won’t work under the above-mentioned Jblend either, for reasons I’ll elaborate on in my forthcoming MIDlet Bible). Fortunately, with the latest beta, you can already get rid of the problem by going to Settings and make the changes yourself; but, again, this won’t help with the previous, 3.x-series still widely in use for the time being, that is, before the 4-series of Opera Mini leaves the beta status.
In addition to the full screen mode switching, OM4 has a lot of dialpad (numeric) key goodies like quick (page) up/down scrolling (as opposed to the default, line-by-line scrolling) when you use the 2/8 hardware buttons / keys. If you don’t have a handheld with these buttons / keys and you don’t want to open / slide out the keyboard (if it exists at all) to press 2 / 8 (the vast majority of Pocket PC’s, except for Asus’ phone models having a hardware dialpad, belong to this category), you’ll certainly welcome a solution that does the trick for you. That is, either an external program, tied to a hardware button, which you can invoke to send a 2 or 8 character to OM4, or a button handler, which itself can send your OM4 these shortcuts (for example, PQzII).
Yes, that’s at least two numeric key simulation functionality worth binding to a hardware key. And, if you would like to also bind the other, very useful numeric key-only shortcuts (see the complete list of them HERE, in the Opera Mini column) to hardware buttons, even more buttons would be needed.
If you bind these buttons to be active system-wise, then, you will quickly use up the really meager number of button configuration capabilities and you won’t really be able to make use of these configurations in any else program, where you won’t really need to enter, for example, 2 or 8 through a hardware button. This is (one example of) where application-specific button assignment can really pay off. You just use a button enhancer that is able to handle separate apps and only use button assignments with the defined one.
Note that, currently, not all applications can be treated this way. For example, as far as MIDlet managers are concerned (still sticking to the Opera Mini example), only those of Esmertes (Jeodek, Jbed) and TAO (Intent) will work. IBM’s J9 won’t work in app-specific mode (if at all: half of the devices I’ve tested it on keypress emulation wouldn’t work at all) and Aplix’s Jblend is the worst: it immediately pauses when you try to send something (for example, an emulated button press) to it. As VITO ButtonMapper, currently, doesn’t support sending out emulated keypresses (as has already been mentioned, it’s only PQzII that is capable of this feat), it must use an external tool (for example, MortScript) to generate keypresses, this means you in no way can send them to Jblend. Your only choice is PQzII, but the latter doesn’t allow for application-based, separate button assignment.
Another example of a program that cannot be used in separate, filtered mode is Opera Mobile 8.65, where using the numeric keys also greatly enhances the usability. This means you won’t
Many other WM programs, however, can be used in this “sandbox” model; therefore, VITO ButtonMapper still remains the number one button enhancer app to test when you want to have app-specific button assignments.
Please note that I’ll also elaborate on these issues in the “Hands-on experience: Passing keypresses to Opera Mini / Mobile” section. In there, you’ll get an even more thorough explanation of these questions and will also be presented some ready-made scripts.

Some add keyboard shortcut emulation. The most common of this is adding copy / cut / paste / select all emulation (for clipboard operation) and Tab, Enter, ESC, Cancel, Page up/down for cursor movement emulation. The, in this respect, best utility, PQzII, even supports defining any of the available alphabetic characters to be input. The latter, as has already been stated, can prove VERY useful with applications like Opera Mini and Mobile.
The most advanced ones (for example, again, PQzII) allow for assigning functionality like quick dialing a number or selecting a pharse to be inserted in the text (which is, otherwise, only supported by commercial tools like Resco Keyboard Pro in its “Frequently used phrases” mode)
Also, advanced apps also allow for stylus (but, currently, not button) macros; this is currently supported by two button enhancer applications. There are a lot of advantages of the support for this; see for example the “Scenarios for using with ButtonMapper” section in the VITO ButtonMapper manual.
1.2 How do I use them?
It’s pretty easy. If you already know (if you don’t, read THIS Smartphone & Pocket PC Magazine tip – in here, I don’t explain this basic stuff) how you can assign any external program to a button, you can rejoice: most third-party button assignment applications use a pretty similar Graphical User Interface (GUI) to assign your buttons. In some cases (most importantly, with the, if you need selective app and/or macro support, highly recommended VITO ButtonMapper), these apps use the system-level Buttons setter applet with some additional tools. (For example, with the VITO app, an additional drop-down menu to set the app you’d like to define assignments to and two buttons to save / retrieve the configuration.) In these cases, all you need to do is invoking the familiar (with the above-mentioned additions) Buttons applet.
Unfortunately, not all applications are so similar to the original, well-known Buttons applet. The, in this regard, worst PQzII, for example, has a very hard-to-understand GUI. The almost complete lack of documentation makes the situation even worse. This is why, in the main chart of this Bible, I’ve tried to provide as many screenshots as possible to show all the individual steps of, for example, assigning a given functionality to a button. I, however, haven’t written much text to accompany these screenshots. The order they are presented should be sufficient for most readers. Should you still having problems configuring PQzII, let me know (just post a public(!) question) and I’ll give you a definite answer.
As a rule of thumb, you assign buttons in these applications in exactly the same way as in the standard, operating system-default Buttons applet. You select the application button (or, in some other cases, other - phone (see the “Phone button redefine” row in the chart), keyboard, WM5 softkeys (“WM5 Softkey redefine” in the chart) or even D-pad arrows (“D-Pad functionality redefine” in the chart) - you’d like to assign an application or some functionality to and, then, select it from a list. You can do this to all the possible states of the button: single-press, double-press, triple-press, press-and-hold etc. (when available in the given application).
In many programs, you can also quickly remove this assignment so that the original (one-press only) setting set in the system-level Buttons applet takes place over the one set in the button enhancer application. In the chart, I’ve also elaborated on this issue with all the tested programs.
1.3 Issues; problems when using button enhancers
Some of these applications aren’t without problems.
First, as some of them are always running (because it adds significant functionality not possible to handle via the standard button assignment functionality, which only executes the given program when the button is pressed), there is a remote possibility they will take up a lot of system resources; most importantly, CPU time and memory. Fortunately, this isn’t the case: all the apps that do have a resident, always-active module have little system resource usage. There was only one app that had enormous (over 800 kbytes) memory usage: the original PQz, of which PQzII is the greatly enhanced version with dramatically reduced memory usage (see THIS for more info on the differences if interested).
Second, as they might be too selfish, they may mess up the local (or, default) button assignments made in for example multimedia applications. Almost all media players and remote media controllers offer the capabilities of locally assigned buttons (for example, TCPMP in Options / Settings / Select page / Hot Keys; Resco Audio Recorder 4 in Action / Options / General / Buttons etc.) For example, if you assign a button to, say, fast forward, stop or switch off the screen, this setting may collide with that of button enhancer applications, which might result in funny and/or unwanted consequences.
While there are no such problems with the built-in button assignments or any application that solely uses the infrastructure already available in Windows Mobile (that is, applications that don’t have a resident memory module), the vast majority of apps do interfere in at least some of these applications. Actually, it’s only the two non-resident apps (namely, DoubleLauncher and HButton) that have absolutely no problems working together with these kinds of applications.
I’ve made several tests to find out the most problematic programs. To represent a standard multimedia player application, I’ve used the hugely popular TCPMP. This application has a, by default, disabled option of “unhooking” buttons so that global, system-level button settings don’t interfere in the program (because they can’t be used). In addition, I’ve used the latest Resco Audio Recorder series, which is known to have even more serious problems with almost all the programs running in resident mode: either the buttons that are redefined / reassigned in the button enhancer stop working, or the globally defined functionality is executed half of the times and the local one in the other half. Finally, three apps (buttonMax, BtnPlus and Vito ButtonMapper) even require to be completely restarted after exiting Resco because they just stop working. In the Chart, it’s in the “Overrides local keyboard assignments?” section that I’ve elaborated on these issues and the problems. As can be seen, PQzII is clearly the worst application in this respect because it even messes up TCPMP – even when you do enable button unhooking in the latter.
Other problems arise from models and / or buttons already supporting press-and-hold (that is, double) functionality; for example, the above-mentioned Pocket Loox 720 or the WM5-upgraded HP iPAQ hx4700. If you try to use a button enhancer app with hold mode, the two hold modes (that of the operating system and the enhancer app) can clash, as was the case with the TCPMP / Resco case outlined above. In order to find out how the applications behaved under these situations, I’ve also made some serious tests on my WM5-upgraded HP iPAQ hx4700. In general, it can be stated if the given enhancer application supports press-and-hold functionality, this functionality won’t work with buttons also having native support for this. As button enhancer apps relying solely on press-and-holding (HButton) can ONLY work when assigned to a button not having native Hold support, you will only be able to assign HButton to Button 5 on the hx4700.
This all means press-and-hold functionality will not work if the OEM's button driver already implements multiple keypresses or press-n-hold.
In addition, press-and-hold usually doesn’t work for red/green phone buttons, WM5 softkeys and the Ok button (when available) because the system returns both the "key was pressed" and the "key was released" events simultaneously right after the button was actually released so enhancer apps that, otherwise, support these buttons (for example, AEBPlus) are not able to decide if it was a long (press-and-hold) button press or not.
It’s on purpose that I’ve emphasized I’m speaking of individual buttons and not devices themselves. For example, on the hx4700, the Record (fifth, side) button doesn’t have a Hold mode; therefore, with external button enhancers, you can also use their Hold functionality, unlike with the other four app buttons. That is, you can use the hold functionality on devices that do have buttons without at least one non-hold key.

2. The reviewed button enhancer apps
2.1 PQzII (Keyboard Helper) 0.0.7b 20070725
This is a very-very advanced, free utility, mainly for users of handheld devices with a real keyboard built-in, but, as it also supports traditional application buttons, other Pocket PC users can also make use of it.
There are several versions of it: a generic WM2003 and WM5 (which is tailored for the HTC Universal, but can be run on any other WM5+ Pocket PC (phone)), one for the HTC Wizard and the HTC Hermes. While, currently, there are no specific versions for other / newer devices, once you learn how the configuration files are built up, you’ll easily make one.
It allows for redefining / overriding any buttons (even the two phone buttons, the D-pad arrows and the two WM5+ softkeys). Note that, on the Universal, the pretty useless Internet Explorer key (the one in the lower left corner of the keyboard) can’t be redefined (see THIS); the same stands for the Messaging shortcut (close to the IE key).
The main discussion thread of PQzII is HERE and the (pretty simple and hard-to understand) official documentation HERE.
What I recommend is that you don’t let the very bad set-up interface and the substandard docs of PQzII chase away. Once you learn how it can be configured, you’ll love it and find it one of the most powerful utilities, particularly if you also have a built-in keyboard (it supports a lot of, on desktop PC’s, well-known keyboard shortcuts like copy/paste, CTRL+LEFT = HOME, CTRL+RIGHT = END, CTRL+UP = PAGE UP, CTRL+DOWN = PAGE DOWN etc. – all a god-send for everyone editing / typing a lot of texts on his or her handset). Let me, again, recommend the mini-tutorials in the chart, which will give you immense help in discovering the capabilities.
Note that you can even enter ANY Unicode char with ALT keys; a related post is HERE showing other solutions & consequences.
Note that there is a similar product, AE Keyboard Mapper (also known as AEKMap), which I do not review here for several reasons:
it doesn’t support application buttons, unlike PQzII, and, after all, the subject of this Bible is application button redefining, not that of built-in keyboards.
you need to activate (=pay for) it to get, with button enhancers, basic functionality like assigning applications to an alphanumeric key. With PQzII, you get the same functionality for free.
the same developer, Alexander Eltsyn, also offers a product, AEBPlus, solely meant for application button enhancement and is far more powerful in this regard that AEKMap. I will review it in this Bible.
2.2 HButton 1.9.1
This is a revolutionary, outstanding application in that, unlike all the other reviewed tools, it lets you assign any number (!) or applications to a single hardware button. Before you ask what the point in all this is, and whether it’s indeed easy to remember that, for example, the particular app you would like to start is at the eighth or the ninth postion, the answer is really reassuring. When you keep the selector (hot) button depressed, it scrolls through the titles of the apps you’ve assigned to that particular button. Whenever you see the program you would like to execute, you simply release the button and it’s started. (There are variations of this theme. For example, you can solely rely on the very quick and discreet vibrations or beeps; if you keep counting them, you’l know when to release the button to start the particular app.
It has other goodies too. As its “virtual” buttons need to be manually assigned to the hardware buttons of your handheld in the system-level Buttons applet, there is no in-memory resident code taking up resources / CPU time all the time and/or interfering with some apps having local button assignments (see the discussion of TCPMP and Resco Audio Recorder). However, the need for an additional, manual step to assign these virtual keys certainly make the configuration lengthier and, at first, a bit harder to understand. Nevertheless, once you get a picture how this all work, you’ll just love it.
All in all, an excellent application, well worth using, particularly on Pocket PC’s with a severely limited number of available, configurable buttons (for example, the HTC Elf / Touch).
2.3 AE Button Plus 2.6
This utility, having come from the same author than the already-mentioned and famous AEKMap, is alos very strong. In addition to its strengths on the Pocket PC platform, it is unique in that it’s the one and only tool to support the MS Smartphone (Windows Mobile Standard) support. Note that the well-known SmartToolkit (of which a new beta has just been released) also offers some button reassining capabilities, but only lets for simple press operations, as opposed to AE Button Plus. As it still has some quirks and, no matter how nicely it redefines the start menu, you won’t necessarily want to use it (for example, I uninstalled it after a while because of the speed problems in accessing the Start menu – I’ve just found the traditional of selecting my (current) apps way considerably faster), I don’t discuss it separately in here. I will do this as soon as it receives better button support and/or a stable, non-beta version is released.
This is without doubt THE most powerful button enhancer application when it comes the built-in goodies like switching on the built-in camera LED to work as a torch (not compatible with current MS Smartphones, unfortunately), connection starting/stopping etc. (See their almost complete list in the “Additional utilities” row of the “Compared to Settings / Buttons…” group of the chart). Granted, most of these hacks are invented by XDA-Developers hackers and programmers (for example, well-known vijay555) but you will need to install several additional apps to achieve the same. With AE Button Plus, you get all this built-in, without the need for installing and configuring several tools onto your Windows Mobile device. This itself – and the very low price tag – also makes this tool really appealing.
This application sits resident in the memory (with the definite disadvantages coming from this fact; for example, it certainly clashes with both TCPMP and Resco Audio Recorder but, fortunately, not so bad as PQzII).
Finally, a BIG request to all software developers and hackers: as with HButton and PQzII, I didn’t know of this application before embarking on writing this Bible either. With PQzII and HButton, this is pretty understandable as HButton is a brand new project started late Spring and PQzII was almost only discussed in a single HTC Universal thread (in a device-specific forum). Needless to say, none of the three apps were entered into the Software Encyclopedia of Smartphone & Pocket PC Magazine by the developers. This, and the fact that they have been only discussed in not widely known subforums is why I haven’t nominated them for this year’s Best Software Awards (they ALL would have deserved the nomination.) Therefore, my humble request to ANY Windows Mobile developer & hacker out there is the following: if you feel you’ve written a tool worth mentioning / paying attention to, don’t hesitate to contact me via a private message on any Windows Mobile forum. I’m using the nickname “Menneisyys” on all of them and you definitely will find me as I’m a top poster on all Windows Mobile forums. DO send me a message when you have something up your sleeves – you’ll get a lot of promotion for free and your app may even get nominated for the Awards, generating even more promotion, if I find your app is worthy enough. And it’s all free for you, with little effort – just a private message, with a link to the thread of your product and a sentence like “Please check out my latest tool, you might find it useful”. This particularly applies to hobbyist developers like the one of all these three apps. It’s almost impossible to run into their apps unless you excplicitly read thorugh hundreds of related threads because they don’t register their stuff in on-line software directories like the PPCMag Encyclopedia (and, in there, in the Utilities / Button Enhancers category. )

2.4 Vito ButtonMapper 4.0
This is one of the very few apps that have a really decent and easy-to-grasp manual. Its particular strength lies in its stylus macroing abilities and, what is even more important, the application-specific button assigning capabilities, in which, currently, is unique. (The other button enhancer app to do offer the same capabilities, buttonMax, currently (as of 10 / 16 / 2007) still isn’t compatible with WM5 and later operating systems, which means it’s useless on the vast majority of currently used handhelds.) Therefore, it’s highly recommended if you do need app-specific configurations – for example, number input for Opera Mini (more precisely, the MIDlet manager running Opera Mini) etc.
Don’t forget that, as has already been pointed out, the app-specific functionality doesn’t work with some programs; most importantly, Opera Mobile (as opposed to Opera Mini, which works just great together with Vito ButtonMapper when running under a compatible MIDlet manager – all MIDlet managers of Esmertec, TAO and, on some Windows Mobile models, IBM J9 – but not with Jblend). This, as has already been pointed out, is very bad news for all Opera Mobile users. If you plan to use Opera Mobile and want app-specific button assignments only active when running Opera in the background, you simply won’t be able to do this with the current, final version of Opera Mobile 8.65. Sorry. This is definitely not a bug in Vito ButtonMapper as the other, app-specific-capable app, buttonMax, can’t run Opera either (I’ve thoroughly tested this under WM2003).
As has also been mentioned, stylus tap emulation macros can also prove really useful. As has already been pointed out, you will want to read the “Scenarios for using with ButtonMapper” section in the VITO ButtonMapper manual for some examples of how this can be utilized.
All in all, I highly recommend Vito ButtonMapper, particularly if you need either app-specific settings or stylus macros (or both). If you don’t need these functionalities at all, you may also want to check out the free PQzII, HButton or AEBPlus – they have different capabilities and may turn out to be better suited for your needs.
2.5 DoubleLauncher
This app, in addition to HButton, is the only app NOT to have an in-memory module but uses the default button handler, which is advantageous in some cases (see for example the cases of applications with local keypresses – for example, Resco or TCPMP). Otherwise, it is clearly inferior to the best, most recommended, and, what is more, free apps: PQzII, HButton or AEBPlus. As it doesn’t support app-specific settings either, it is inferior to VITO’s app, which costs the same.
Therefore, I only recommend this app if you MUST use an app that, as with HButton, uses the built-in Button handler infrastructure because of the incompatibility of other button enhancers with your specific apps having local button assignments. Otherwise, you should go for something better and/or free.
2.6 BtnPlus 0.21
(direct LZH link)
This is a long-abandoned project not really working on any WM5+ devices I’ve tested it on. Therefore, you may only want to bother with using it if you have an SH3 Pocket PC 2000 device (a HP Jornada 525/54x). It has an English language tutorial for example HERE.
2.7 buttonMax 2.10
This app, as of the (current) 2.10 version, doesn’t have support for WM5, which is a pity because, otherwise, it’s a real capable button enhancer with the same unique capabilities as VITO’s app.
2.8 Verdict – which one to choose?
The answer is pretty simple: one of the PQzII, HButton, AEBPlus (which are all free; you can, of course, activate AEBPlus but the vast majority of the functionality is available even without doing so) or the commercial VITO ButtonMapper. As these four apps have distinct feature sets, you must yourself decide what features you need and what you don’t. For example, if you only have one configurable button (and don’t want to override for example your phone / softkey buttons with AEBPlus) but want to assign at least 4-5 programs (or, in a broader sense, any functionality) to it, your best choice is HButton. If you need either stylus macros or app-specific button assignment capabilities, your only choice is VITO ButtonMapper (unless, of course, if you have a pre-WM5 device. Then, buttonMax may also be a nice choice.) If your handheld also has a built-in keyboard, you might find PQzII the best. Finally, in addition to its being one of the best Pocket PC button enhancers, MS Smartphone users will want to use AEBPlus as there’re no other button enhancers compatible with the platform.
3. Hands-on experience: Passing keypresses to Opera Mini / Mobile
Now, some advanced tools for all of you that wan to pass keycodes (that is, want to emulate the usage of any keyboard) to the running applications. This is, as has already been emphasized, VERY important for every Opera Mini and Mobile users not having access to a hardware dialpad or keyboard with easily accessible numeric keys.
As has been stated in almost all my previous, Web browsing-related articles (also) concerning Opera Mini and Opera Mobile, two top-notch Web browser applications (also) available for Windows Mobile devices, these browsers are best used on a touchscreen-less Smartphone (because they all have a numeric dialpad) or a Pocket PC with a numeric dialpad built-in. Examples are the latter are most ASUS models including the forthcoming, “HTC Kaiser-killer” P750 (see THIS and THIS) or the forthcoming HTC Touch Dual. Unfortunately, the vast majority of Pocket PC phones still lack a numeric keypad. While they, mostly, do incorporate (except for some rare and/or now-outdated cases like the P3300, P3600, P6300, the first Touch and the forthcoming P6500) a slide-out keyboard, using it to control the two browsers is far from optimal (you need to slide them out, adding considerable bulk to your phone and/or making one-handed operation impossible).
Just an example of how cool these shortcuts are. Assume you want to quickly make Opera Mini full screen (or vice versa). You only need to press the * button twice in quick succession. No long, tiring menu traversing. The same stands for Opera Mobile: it also has some very useful features (quick switching between opened tabs, switching off/on pictures with a keypress; quick switching between the default and the desktop view etc) directly accessible from a dialpad button.
Unfortunately, neither Opera Mobile nor MIDlet managers (programs that run Opera Mini) can make use of the, during using these browsers, unused Pocket PC application keys. (I’ve long been telling the Opera Mobile folks to implement this functionality but, so far, they have had better things to do. Not that the competing browsers would all support configurable application buttons: the lack of support for this is still one of the biggest problems with even the latest previews of NetFront 3.4). It’s here that I come into the picture and explain exactly what you need to do.
Again, this tutorial only applies to you if you do NOT own a touchscreen-less MS Smartphone or a Pocket PC with a dialpad (or, if using the numeric keys on your full keyboard is OK with you – again, it wouldn’t be with me because of the awkwardness of slide-out keyboards, particularly when you browse the Web in Portrait mode).
In order to be able to assign at least the most important functionalities (for example, page up/down, quick selection list of active tabs, full screen vs. non-full screen mode etc) to the 4…7 (which can be doubled or even tripled with the tools I’ll also introduce) application buttons a typical Pocket PC has, do the following.
First and foremost, decide what they need to control. Do you need to control Opera Mobile or Mini?

3.1 Controlling Opera Mini
If you want to control the latter, do you have a MIDlet manager that CAN be controlled from the outside? (All can be, except for Jblend and, on many devices, IBM J9, which can only receive keypresses from PQzII, as is also explained in the “Can you use an external tool (MortScript's SendKeys, VJKeyPress or PQzII) to "inject" keypresses into the emulator?” row in the MIDlet Bible chart) If you need to stick to PQzII (because you have to use Jblend or IBM J9 on a device which doesn’t support MortScript), can you live with the lack of the “*” character? Can you switch to an in this regard (too) better MIDlet manager; most importantly, Esmertec Jeodek or Jbed? If you can, you won’t have problems with running MortScript, which allows for sending * characters.
Let’s take a quick glance on the different configurations and its capabilities:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
As you can see, there are the following possible configurations:
Any (including the default, system-level Button applet without any third-party button extender) button extender along with either MortScript or VJKeyPress to send any chars (with MortScript) or numeric chars (with both MortScript and VJKeyPress) to the MIDlet
PQzII to send numeric chars to the MIDlet: the only choice when you use Jblend or, in some cases, IBM J9
Also note that, should you want to prefer application-specific button assignment with VITO ButtonMapper (where, in what other Windows Mobile app could you use for example your 2/8/*-injector button shortcuts?), you must be aware of the fact that only the Esmertec and the TAO MIDlet Managers allow for this; IBM J9 has never worked for me. This is also explained in the “Selective (app-specific) button assignment for input with VITO ButtonMapper” row in the MIDlet Bible chart.
3.2 Controlling Opera Mobile
As Opera Mobile doesn’t require an additional MIDlet Manager (all with different compatibility issues) AND you can freely reconfigure input.ini so that you can get rid of the need to use * / #, your choices are far better than with Mini. The only exception is that Opera Mobile doesn't support selective button assignment.
3.3 Writing and deploying external scripts
Assuming you don’t want / don’t need to use PQzII (where just follow the mini-tutorial in the last, bullet starting with “Code conversion” in the “Other niceties worth mentioning” row), let’s see how you can pass any numeric characters (with VJKeyPress) or, even better (but decidedly slower), any char (including, for Opera Mini users, the very important * and # characters) with MortScript. Let’s start with the latter.
First, get the free (!) MortScript. In the ZIP file, just install \setup\MortScript-4.0-PPC.exe. After this, you can just copy your MortScript script files (on which I’ll promptly elaborate on) to anywhere under \Windows\Start Menu\Programs; I recommend a subdirectory so that they don’t cause a chaos because of their high number.
Now, let’s take a look at what MortScript files need to be used and how. First and foremost, all these scripts do is sending a (virtual) keypress to the currently focused application when they are invoked. If you execute them through an application button press, the given key code will be sent to the browser, which will, consequently, think it has arrived from a real dialpad (or keyboard) button.
Assigning a script to a hardware application button is easier than you think. If you don’t use any button enhancer application, you just copy the MortScript script files to somewhere under \Windows\Start Menu\Programs, go to Settings / Buttons, select the application button you’d like to assign the given functionality to and, finally, select the script file. This is exactly the same as associating any functionality with any hardware button. You only need to make sure you select the right script file. For example, if you want to send double asterisks (to quickly switch between full-screen and non-full-screen Opera Mini modes), you’ll need to assign SendDoubleAsterisk.mscr to a button. If you want to send the button press “2” (“Show window list” in Opera Mobile and “Page up” in Opera Mini), you’ll need to assign Send2.mscr to a button and so on.
The names of these files speak for themselves – you won’t misunderstand them. If you do, just take a look at the argument of SendKeys in it. There will be just one (or, with double asterisk sender scripts, two) characters in the argument of SendKeys like in SendKeys(“**”) or SendKeys(“2”). These instruct MortScript to emulate a double asterisk and a single “2” keypress respectively.
Now, let’s see how the same is done with the decidedly faster (it doesn’t have a full script parser and is only a “lightweight” app with the sole aim of emulating virtual keypresses) VJKeyPress (also see the related thread if interested; not obligatory). As it’s only able to pass Virtual Key codes, which means it in no way can pass for example asterisks or any non-alphanumeric characters (VK_MULTIPLY doesn’t equal to “*” and, therefore, won’t work), unlike MortScript.
Of course, you can do a lot more with MortScript (just some REALLY useful examples HERE and HERE) but, in cases, you just won’t need them. In addition, you can use the two keypress simulator utilities at the same time: just assign “real” alphanumeric buttons to VJKeyPress (so that you have speed) and non- alphanumeric buttons to (the slower, but more capable) MortScript.
Invoking VJKeyPress is very simple: you just create a .lnk file with the contents 250#"\Program Files\vijay555\VJKeyPress\VJKeyPress.exe" <keycode> (where you’ll find the numeric keycodes for all the passable parameters HERE; as can be seen, for example, if you want to simulate the button press of 2, you must pass VK_2, that is, 50 to VJKeyPress) and just assign it to a hardware button. As it’s a link file, you won’t have problems with third-party button enhancers not capable of doing so with MortScript’s native .mscr (no-link) files. Unfortunately, all button enhancers are like so, except for the excellent, highly recommended, free PQzII.
3.4 Creating direct MortScript .lnk files
To create an additional link file for your .mscr (MortScript script source) files (again, unless you use the built-in Buttons applet to assign your scripts), you’ll need to create a lnk file with the content like 240#"\Program Files\MortScript\MortScript.exe" "\Windows\Start Menu\Programs\MortScript\Send2.mscr" , where the second string contains the filename and the full path of the original .mscr script file.
For your convenience, I’ve created an archive of all these example files for both MortScript and VJKeyPress. The archive file is HERE. Just assign the scripts or the LNK files to a hardware app button and see how immensely they help users of Windows Mobile devices not having a dialpad at the front!
3.5 Some Opera Mobile / Mini Button Shortcuts
Finally, let me present the list of what functionalities you might want to assign to a hardware button.
Opera Mobile:
1 = Open url
2 = Show window list
3 = home (full up)
5 = Toggle images (needs reload / open new window / URL)
6 = page down
8 = Cycle to next window
0 = help
* = Enter fullscreen | Leave fullscreen
# = Enable mediumscreen mode | Disable mediumscreen mode
Again, note that these are the default shortcuts; you can override them by editing input.ini, as has been explained in some of my past articles.
Opera Mini:
See THIS (incidentally, this chart is highly recommended for Opera Mobile users as well!). Note that it contains info on the first beta of Opera Mini 4; the current OM4 beta 2 also added the shortcut button 1, which brings up a submenu, where you can quickly change between fit to width and full layout modes, reload the page and get page information. It also offers a Link context menu, which allows for opening a given link (you can force it to do this without images) and getting information.
4. Not real (and, therefore, not reviewed) button enhancers (menu apps)
4.1 HotButton Plus 3.0
This is not a button launcher, “only” a commercial ($9.90 with a 14-day unrestricted trial) menu app with quick switching between apps. In this regard, it’s a bit similar to HButton. It also supports quick dialing. Note that it’s PPC Phone Edition (WM Professional) only; with PPC’s, the hacked SMS/Phone DLL’s (see the “Platform compatibility: non-phone PPC” row in the MIDlet Bible chart) don’t work.

5. The chart
It’s HERE. Make sure you check it out – again, don’t forget that a chart like this is worth a hundred thousand words. Make sure you spend some hours on digesting the immense amount of information in the chart, should you want to learn a lot of nice tricks you may have never thought of before – it certainly pays off. Also, don’t forget the chart links in several screenshots (which I haven’t done in this review to, visually, “reduce” the already huge size of it) – you might want to check them out.
6. Related (old, outdated) articles, threads
Review of four button launchers (note that there is another version, but it lacks for example the Passthrough screenshots)
Button Mapping Program for WM2003?
Vito Technology's ButtonMapper Reviewed by PocketNow (original, linked article)

UPDATE (10/21/2007): After publishing the Bible, Spb Pocket Plus 4.0 was released. It has received a brand new and pretty cool button enhancer module as well, along with tons of very nice, other enhancements; for example, a greatly enhanced Internet Explorer plug-in (see THIS for more info). It supports hold mode but no other modes and uses the system-level Button applet; however, it also allows for redefining the OK button (but no softkeys / phone buttons / volume buttons or slider). It offers no goodies like app-specific settings, additional input chars etc. It sports several additional system goodies and provides access to all system settings applets. All in all, while it's certainly not the most feature-packed button enhancer, taking the indeed high-quality and very useful (albeit a bit buggy, but these bugs will surely be ironed out shortly) other modules and features of the suite, I highly recommend it. Again, unless you want advanced button enhancement features only other apps offer.
Note that I’ve added a new column on the app in the chart.
Other news / additions
As opposed to what I've stated, it’s possible to override the Internet Explorer button on the keyboard of the HTC Universal; see THIS. However, it’s not known whether it’s possible to do the same with the also hard-wired Messaging button.
There are some very nice and useful uses of the more advanced button enhancers; for example, passing Page Up / Down. If you’ve ever used water’s SmartSkey (one of my favourite tools), you know it has redefined (in addition to the WM5 softkeys) the volume slider of the Wizard / Universal on the non-Today / non-Phone screen to send Page Up / Down events to the active program. This can be overly useful in programs like Web browsers. To find out whether the tested apps are able to do so, check out the “(Additional) keyboard / D-pad emulation?” and the “Volume buttons / slider redefinable?” rows. The latter show whether the slider / volume buttons can be redefined. Of course, if they can’t be, you can still send PgUp/PgDn events to your apps – just assign them to another (supported and existing) hardware button. Also see THIS for more user reports / opinions on this feature.
I’ve added a new row, “Does it override (ignore to take into account) the global lock setting?” on the behavior when locked. As the vast majority of the button enhancers use their own code to access the buttons, some of them (for example, PQZ) doesn’t adhere to the locked state and will, therefore, execute the assigned app even in locked state, which isn’t necessarily what you want. See for example THIS for more user posts / opinions on this matter.

Related

REVIEW: Teksoft's brand new Pocket PC utility suite Smart Bar

Teksoft, developer of the excellent BlueMusic application (see for example this article & the links), has just come out with a brand new suite, Smart Bar, of system management applications. I decided to give it a try as it’s a pretty capable suite of utilities with some really excellent modules.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
They even promise an application capable of recording both (!) parties in a phone conversation (so far, this has been impossible with all Pocket PC Phone Edition devices of both HTC and ASUSTeK (Fujitsu-Siemens T8x0)); I think it’ll work by directly “tapping into” the Bluetooth unit as can be seen for example in here.
Availability, price
The suite is available here. To review the (pretty good and recommended) manual, visit this link. There is a(n unfortunately, pretty restricted) trial version too.
The “price” of the suite is 200 credits; that is, between 20 and 25 euros (depending on the amount of money you transfer to your online credit account). The registration is a one-device only (that is, CPU ID- and not PPC owner name-based); licenses can be transferred to other devices in case of a device change (for example, when the previous one bites the dust and gets exchanged).
Install
Use smartbar_setup.exe for pre-WM5 and the CAB files for WM5; see install.en.txt for the latter case.
Compatibility
It’s stated to be compatible with strictly QVGA devices with at least the WM2003 operating system. (I’ve also tested it on Pocket PC 2002; it indeed doesn’t work.)
You can, of course, try to install it on VGA devices, but I don’t think you should give it a go. I’ve tested it on three different VGA devices (Dell Axim x51v A12, WM5 iPAQ hx4700 2.01, WM2003SE Pocket Loox 720). On the hx4700, the PowerPlugin Today screen plug-in was absolutely useless; on the two other devices, it was shown, but not anything else. On the Dell Axim x51v, I’ve received frequent gwes.exe crashes after a reboot, because of which I had to entirely disable PowerPlugin.
Of the PowerPlugin, few features were accessible on these VGA devices; in the following chart, I’ve summarized all this (note that it also contains HTC Wizard-related info):
Note that, as far as the Wizard is concerned, I’ve listed two ROM’s: the O2 2.21.4.1 WWE (3/9/0) ROM and the “cooked”, widely known AKU3.2 one by KTamas / bepe. This means there are differences between different ROM versions / builds – all icons may work with your particular ROM version. The developer has promised they would test the suite with other ROM versions.
As can clearly be seen, the majority of the features PowerPlugin has can’t be used - not even on the QVGA HTC Wizard (with some ROM versions).
One of the central features of the application, Smartbar, wasn’t accessible either on any of my VGA devices. Self-standing apps like the screen capture, the network troubleshooter and the task manager applications, however, did work on VGA devices.
Also, it’s very important that you BACKUP (see the Backup Bible if you’re unsure) your device before installing the application. My absolutely clean, freshly hard reset WM2003 HP iPAQ 2210, after the install, couldn’t boot in at all and I ended up having to hard reset the PDA (I’ve tested this two times). I haven’t tried to boot into Safe Mode (read this roundup & tutorial if interested in Safe Mode on the Pocket PC); it may have helped .
Today plug-in (PowerPlugin)
It’s a simple plug-in with shortcuts to en/disable wireless units, suspend the device, show whether it's connected to the Net (IMHO, this is pretty useless on a WM2003+ device - after all, the Connectivity icon is always visible on the taskbar) and a backlight slider. It doesn’t contain for example battery or memory meters, unlike most other Today launchers (please see this iLauncher review and the links to earlier reviews to find out what a decent Today launcher should offer.)
Unfortunately, the majority of the functionality it’s supposed to offer didn’t work on my test devices. For example, as far as en/disabling wireless functionality is concerned, it was only on the x51v that it was able to both en- and disable Wi-Fi; on the Wizard, it was only able to enable it and on the PL720, wasn’t able to do anything. As far as Bluetooth is concerned, it didn’t work on any of my test devices in any direction. The backlight slider only worked on the PL720. (See the chart at the top, in the Compatibility section for more info.) The only exception is the HTC Wizard with the O2 ROM, where everything worked. (Again, more information on the compliance with other HTC Wizard ROM versions will be published / announced later.)
Also note that, while it has, in addition to the backlight slider, a backlight icon. It, now, doesn’t do anything. Hope the Teksoft folks wire it to the backlight / brightness applet of the device as is the case with all the other, similar Today plug-ins.
Task manager
This is one of the best features of the suite.
Pretty cool. Better than the built-in task manager: it lists the memory used, whether it’s a windowed app/process and if yes, is it visible; the title and the window class name. However, it doesn’t display other advanced & useful stuff like CPU usage and has no “Stop all processes”. Also, it’s not possible to “hide” system processes either – that is, for a newbie, this task manager can prove pretty dangerous.
Ultra Keyboard
This is probably the most unique feature of this suite: it allows for controlling some functionality using the keyboard. The most important of this is text insert macroing capabilities, which has always been missing from Pocket PC’s (except for some, not very capable Software Input Panels (SIP's) like Resco Keyboard Pro and Biomobility’s CopyText Pro; also see this thread for more info if interested).
When you use text insert macroing and assign a macro to, say, the series of characters “bye”, Smart Bar will constantly monitor the keys you press on the built-in (or external) keyboard of your PDA and when it sees the keys b, y and e pressed in order, it’ll delete back the three characters and insert the replacement text.
It's really cool but, unfortunately, only works with built-in keyboards or external ones (like those of desktop-based PDA controllers; see this roundup for more information on them.) Even in this case it can prove useful - most built-in thumb boards are pretty awkward to enter text on them.
You can initiate the following functionality from the keyboard: Replace with phrase; Execute a file; Turn device off; Reset device; Call number and Screen Capture. Note that if your keyboard has a different layout than your current ROM language, the default layout will be used. For example, if you have a German MDA Vario (= HTC Wizard) with English ROM but use the keyboard in German mode so that you find all keys at once, you will need to enter ‘bze’ instead of ‘bye’ for the ‘bye’ script to be executed. Also, note that not even in this case will everything execute – that is, try not to use anything that have relocated letters.
In my tests, all these functions worked OK.
Smartbar
This is a shortcut bar at the bottom of the Today screen for accessing active apps (closing / activating them) and activating other built-in apps (and the Desktop mode) of the Smart Bar suite. Unfortunately, task control-wise, it is probably the worst module in the entire suite; hope this will be greatly enhanced in subsequent releases.
Compared to (better) task managers like iLauncher, Magic Button or Spb Pocket Plus, its disadvantages are as follows:
It can only be accessed on the Today screen, not on the taskbar (and / or the Close / Minimize icon itself)
It supports no mass operations like “close all but this one”, “close all”, unlike with Magic Button or the built-in iTask of Compaq / HP iPAQ’s
It doesn’t override the Minimize / Close (x) icon
Hope these disadvantages will be soon be fixed and the task management functionalities of the application greatly enhanced.
Note that while it doesn’t have explicit scrolling icons / menus (unlike Magic Button as can be seen in here but NOT iLauncher 3, which is suffering from the complete lack of scrollbars as can be seen in this and this screenshots), you can scroll the active task icon list if there are more than five (Portrait) / seven (Landscape) of them.
I’ve also tested the CPU usage of smart.exe to see whether it causes any CPU load, particularly with more than a handful programs active. (For example, Magic Button causes a constant CPU usage of about 1-3% all the time.) The results are acceptable and not much worse than those of Magic Button:
Desktop
Yes, a WisBar Advance Desktop (WAD) clone! It’s in no way so advanced as WAD; still, if you like these kinds of applications, you may find the one in Smart Bar suitable.
Screen capture
Smart bar also contains built-in screen capturing capabilities. Please see the Screen Capture Bible for more information; in the following pros/cons list, I build on the information and explanations of that guide.
Compared to other screen capturer applications,
Pros
Uses a 3-second delay by default; that is, it can be used to make menu screenshots (without using the periodic screenshot capabilities)
Able to capture images periodically (albeit with some limitations, particularly when it comes to the frequency of taking shots). Note that it’s the “Stop interval” drop-down list that lets you fine-tune the interval it’ll take screenshots (between 10 seconds and 10 minutes as can be seen here and here)
If you use it on a device with a built-in thumb/keyboard and you enable screen capturing through Ultra Keyboard, you will be able to capture almost any game screen any time (!) by just entering the Ultra Keyboard shortcut (“CAP” by default). In this respect, the suite is unbeatable and unrivalled.
Periodic screenshot capturing is fast and, therefore, gaming-friendly (unlike, say, BeniSoft ScreenShotCE)
Both BMP and JPG output; the latter with settable quality
Can save files to anywhere, not just the main storage
Can capture images, in addition to the original (100%) size, at double and triple (200% / 300%) size – very useful on QVGA devices to avoid further enlargement and unique among all the screen capturer applications
Landscape & VGA compliant even in SE VGA mode
Cons
Multishot (periodic) capabilities are a bit limited – you can’t instruct the app to make shots less frequently than every two second
While the screenshot utility is a self-standing app, it cannot be invoked from a custom-written nScriptm script to fine-tune periodic screenshot making parameters
(Trial version useless: it inserts a message in the captured images)
All in all, the screenshot capabilities of the app are excellent, especially when you take the price of the suite into account and the only problem with this module are the too frequent screenshots in auto mode. Also, as has already been pointed out, the ability to make hardware keyboard-based screenshots of games is unbeatable and unique.
Network Tools
The suite also contains a simple (it’s in no way as advanced as, say, vxUtil) network troubleshooting utility, Network Tools.
It’s able to ping and traceroute to find out possible networking problems. It also uses DNS lookups; that is, if you for example enter www.yahoo.com, the contents of the input field will revert to 209.73.186.238 (or something very similar, with a different ending), showing the IP address of the given computer (it doesn’t do the reverse).
It also exports the traceroute results to a file. (Note that I didn’t have a “real” wireless connection during the tests and the utility had problems accessing the net via USB (in both WM5 AKU2+ networking modes); I could only access the desktop computer my PDA was hooked up to; this is why there is only one entry in the tracelog.)
It’s pretty cool to have if you don’t happen to have Windows Mobile Network Analyzer PowerToy or vxUtil around.
Verdict
This app is certainly promising. Hope subsequent builds / versions will fix the issues / implement the missing functionality (most importantly, overridden Close / Minimize button) I’ve elaborated on. Then, I’ll recommend it heartily, without conditions. Now, in the present state, I do recommend it too – but conditionally.
First, the bad. It does have compatibility issues. If it does work on your PDA model, it won’t likely to support all the features of the Today plug-in (PowerPlugin) and has no for example storage meters. Also, the task management functionalities / program shutdown capabilities of Smartbar are certainly inferior to most similar apps like iLauncher, Magic Button or Spb Pocket Plus. I find this the biggest stumbling block of the application.
Second, the good. It’s, as an all-in-one application, is really good. That is, if you don’t want to struggle with installing many applications (say, WAD + Magic Button + some advanced (!) screenshot app + vxUtil) to achieve the same (or even better! See for example the screenshot utility) functionality (without keyboard macros, of course), give it a go. Also, if you need keyboard macroing (again, it won’t work with on-screen keyboards, only hardware ones!), this is the application to go.
The same stands for taking screenshots: this application clearly excels in this area (except for the too frequent screenshot taking in repetitive mode – hope the developer fixes this too), particularly when it comes to making screenshots of anything (most importantly, games) that inhibits hardware button access and, therefore, renders hotkey-based screen grabbing impossible. Then, Ultra Keyboard’s excellent keyboard-based shortcuts will prove highly useful.
All in all, if you still don’t have any application to implement the above-listed functionalities or, for example, losing the excellent task management functionalities of other task managers isn’t a problem, definitely give it a go. Remember, however, that
do NOT get it if you are a VGA user; wait for the soon-to-be-released VGA-specific / compliant version
do backup your device before installing or, at least, make sure you have an active Safe Mode application

Emulating home computers on Windows Mobile Part V - Sinclair ZX Spectrum

UPDATE (06/18/2007): an updated version posted to http://www.pocketpcmag.com/blogs/index.php?blog=3&p=2030&more=1&c=1&tb=1&pb=1 . Sorry, I don't repost it here: it'd take far too much time / energy to cut it into manageable, postable pieces. That is, the version below is the first, outdated one. Make sure you follow the link to the newer.
The Sinclair ZX Spectrum was a very popular home computer system in the eighties.
The history of the Spectrum didn't end at the official, 1990 discontinuation of the series. As with the Commodore 64 (see the review of all Windows Mobile-based C64 emulators HERE) , which still receives top-notch scene demos, the Spectrum had (and is still having!) a spectacular afterlife in the ex-Soviet states; most importantly, Belarus and Russia.
Particularly in Russia, there have been a plethora of self-manufactured ZX Spectrum-based home computers throughout the entire nineties, with a lot of fans and developers. This trend even continued to this century - currently, there is some hardware manufacturers still producing ZX Spectrum-based & compatible computers like the Pentagon and the ATM Turbo. While these models, in general, haven't really improved on the (gaming-wise, particularly weak) graphics subsystem of the original Spectrum (not taking the new low-res EGA-like mode into account), they come with plenty of memory (128k to 1M in general), good sound capabilities, IDE hard disk, CD-ROM, mouse etc.
Russia's leading role in the ZX Spectrum's surviving has also resulted in something else: a steady stream of software titles released for these ZX Spectrum-based computers. Just pay a visit to the Virtual TR-DOS main page (Wiki), which is the largest archive of the software ever released for these models. I especially recommend downloading the full app / games database (it's the Virtual TR-DOS Games & Press Base link on the main page) and browsing the database. Titles with the type "RU" are all genuine games developed by Russian developers. Titles with the type "D" are also interesting because they show what projects Russian developers have ever embarked on (but, then, either failed at or, at least, didn't deliver a final, fully working version). The dedicated demo download page is HERE. I've even posted some screenshots of a somewhat working (!) Civilization and Wolf3D-clone in the The Comparison & Feature Chart (“Chart” for short). You WILL want to check out these demos in a capable emulator (in either the desktop-based Unreal Speccy or its Windows Mobile version, UnrealSpeccyPPC) - they are really fun and clearly show these models (except for the really bad, one-colour graphics) are much-much better than anything imaginable on the original ZX Spectrum. You may also want to check out some scene demos (again, under a capable, compatible emulator); for example, the two ZX demos written by AND, author of UnrealSpeccyPPC. While, technically (mostly graphics-wise), these clones aren't as good as the Commodore 64, some demos (and genuine Russia-based) are really top-notch.
If, on the other hand, you "only" want to play old, original, commercial games written for the original ZX models and are not at all interested in advanced stuff like watching Russian demos written for somewhat more advanced Spectrum clones, you will also want to read on - you'll find all the answers in this article.
In this roundup, I present a full roundup of the Windows Mobile (both Pocket PC and MS Smartphone) emulators of the platform. As usual, I'm absolutely sure you won't find a better discussion of the subject anywhere else. And, in addition, I present you a lot of new and REALLY groundbreaking information never ever published in English - only in Russian (one of the several languages I have the honor to speak) and a very short news item in Czech. Yes, this is the FIRST roundup to report on the BEST ZX Spectrum emulator ever written, UnrealSpeccyPPC. You can be pretty much happy that I also speak Russian (along with a lot of other languages) – without my knowing the language, Windows Mobile users would have ended up being not reported on this really groundbreaking emulator, let alone being presented with a usable tutorial, which I also provide in here – probably not even in the future.
This roundup is somewhat different from the previous one discussing Commodore 64 emulators. The sole reason for this is very simple: of the five Pocket PC-capable Spectrum emulators, there is only one that should be preferred unless you need Portrait mode or an on-screen keyboard with all the original labels. With the C64 emulators, there were two strong Pocket PC contenders (PocketCommodore64 and PocketHobbit) and, of course, the Smartphone-based PocketHobbitSP2003. In the case of the Spectrum, fortunately, there is only one really recommended emulator, which greatly simplifies the discussion.
This means I put particular emphasis on the most recommended Pocket PC emulator, UnrealSpeccyPPC, unlike the other two non-disqualified titles (PocketClive and SpectrumAnyWhere), let alone the two titles (the comparatively new, but with the arrival of UnrealSpeccyPPC, already-outdated PocketSpeccy and the very old (the last version was released in 1999), Handheld PC-specific SinclairSpectrumEmulator), which I haven't included in the Chart . Of course, as far as the MS Smartphone platform is concerned, I also put particular emphasis on the most recommended MS Smartphone emulator, FuseSP. This, of course, doesn't mean I completely ignore the two non-disqualified Pocket PC-specific titles (PocketClive and SpectrumAnyWhere) either - I've very thoroughly compared them to the rest in the Chart . It's just that, in the textual tutorial below, I don't elaborate on how you can for example load programs. In the Chart, you'll find most of the needed information though.
First, let's elaborate on whether it's at all worth emulating ZX Spectrum (or, of course, one of its more advanced, Russian clones).
1.1 Is Windows Mobile-based Spectrum emulation worth the trouble at all?
While, technically, the ZX Spectrum has FAR inferior gaming capabilities compared to the most important, direct competitor of the model, the Commodore 64, in certain cases (not taking into the account of emulating post-Soviet games / hardware), it may still be worth preferring to emulate other platforms.
First, there are several games not released for other platforms or, when released at all, these titles are not possible to get. For example, should you want to play the classic game Pssst, you WILL need Spectrum emulation (unless you play the Flash remake). Also, there are some other well-known titles not existing on many other platforms; for example, Lords of Midnight and Doomdark's Revenge. These two, excellent titles only existed on two other platforms (C64 and the Amstrad CPC); therefore, should you be unable to find for example a copy of the C64 / CPC version, you may end up having to play the Spectrum one.
Furthermore, as opposed to, say, emulating the Amstrad CPC or the Commodore Amiga, the Spectrum is emulated without major glitches and on even very slow Pocket PC's and MS Smartphones. While it's impossible to play most Amiga games on even the fastest Windows Mobile devices without stuttering sound, ZX Spectrum games run on even on lowest-end, 7-year-old models without problems. This also includes today's TI OMAP-based Pocket PC and Smartphone models, of course.
Supporting low-end hardware, fortunately, also means support for even low-end, low-resolution (176*220) MS Smartphones. As the Smartphone platform has way fewer games than its big brother, the Pocket PC, emulation becomes even more important. While, fortunately, there are some really excellent gaming console emulators for MS Smartphones (even 176*220 ones) - for example, Masterall's emulator masterpieces and SmartGear, home computers are generally not emulated on the platform (that is, there are no for example Atari ST or Amiga emulators for the MS Smartphone). The lack of (home computer) emulators and native games makes it very important for any MS Smartphone user to have access to a plethora of ZX Spectrum games, which are, as has already been pointed out, perfectly emulated even on low-end, cheap mobiles.
1.1.1 When to stick to emulating another platform?
Of course, not all titles should be played in a Spectrum emulator. For example, when a particular title also exist for the Nintendo NES, the SNES, NEC’s TurboGrafx-16 (PC Engine), the Sega Master System (SMS), Genesis / Mega Drive or Game Gear, going for these emulators may turn out to be a better choice. (Please do click the links for the complete rundown of the Windows Mobile emulation possibilities. Also make sure you follow the other, for example Commodore 64 / Amiga / Atari ST / Amstrad CPC / IBM PC links to emulating home computers.) With the exception of SNES, the emulators of these systems are also very low-end handheld-friendly and the games, in general, are at least as good as on the Spectrum (and, in MOST cases, technically MUCH better, with much more advanced graphics and/or music).
As a rule of thumb, if you plan to play a given title but would like to get the best gaming experience, go to Wikipedia, look up the given title and check out what other platforms it has been ported to (it’s listed in the text box on the right, in the “Platform(s)” row). In general, you can safely ignore the Commodore Amiga (as long as you want sound) ports. If there is an Atari ST port (another, more advanced home computer with excellent Windows Mobile emulation capabilities), you may want to check it out; as is the case with most C64, NES, SNES, SMS, PC Engine, Genesis and Game Gear ports. Most of these games / ROM's are available on the Web. In my past articles, I've explained how you can find these titles and what you will need to play them on your Windows Mobile device.
The same stands for games that have a native Windows Mobile interpreter; for example, Magnetic Scrolls titles. Speaking of these excellent games, unfortunately, the ZX Spectrum versions have no pictures at all - as opposed to even the C64 version. Therefore, in no way should you use a Spectrum emulator to enjoy these games – unless you don’t need images, that is.
1.2 Downloading C64 games / apps / demos off the Web
All emulators are common in that they, generally, read standardized file formats. If you're new to Spectrum emulation, you need to know about tape and snapshot images (and, if you would like to access the mostly post-Soviet TR-DOS titles, disk files). All emulators handle both tape and snapshot formats; UnrealSpeccyPPC, THE most recommended emulator, also handles disk images.
The main source of original (non-post-Soviet) Spectrum games and other titles is worldofspectrum.org. It at least lists all the available games. Note that, should it not contain the tape images of a given title because of (C) reasons, you will need to Google around. It’s by doing the same that I've found a source of R-Type, for example. Also, the Virtual TR-DOS main page has almost all old titles; I'd, however, prefer worldofspectrum.org to it because it has a lot of other, great information (game manuals, links to original articles / tips), unless you look for something not available in the latter or, of course, post-Soviet titles.
(Note that, still speaking of worldofspectrum.org, it has a pretty good and up-to-date emulator lists, also with WinCE (PPC) and Smartphone sections. The former still doesn’t list UnrealSpeccyPPC.)
As far as scene demos are concerned, your best friend will be zxdemo.org. It contains a generic, international (not just post-Soviet) overview of the scene, albeit, sometimes, it also contains weird stuff like this article, which, it seems, mistakes Finland for a post-Soviet country ("Q. How active is the demo scene in the UK? A. Well, on the Spectrum there's just a few of us keeping it all together. Over here the Spectrum scene is more focused on the whole retro gaming thing. As far as the wider scene goes, there are a couple of groups, but we're not really as active as other places like Finland. It does make you wonder - do they teach kids C at kindergarten or something?" FYI: it's not for the ZX Spectrum demoscene that Finland is famous for. In this regard, the two ex-Soviet, Russian-speaking countries are WAY ahead of Finland.) The direct Spectrum demo / tune downloads are HERE.
1.3 Using the emulators
After you've downloaded the games you'd like to play (demos you want to watch etc.) and installed the emulator, start the latter. Note that as none of the current emulators support archived files, you will need to decompress the files before transferring them to your handheld.
The target directory is very important as it's only one title, the (otherwise) most recommended UnrealSpeccyPPC, that is capable of loading Spectrum titles from anywhere in the file system. This is particularly true when used together with Mad Programmer's File Dialog Changer in order to be able to navigate to any directory, and not just the root and the direct subfolders of the root, as is the case with WM5+. Please see my earlier articles on how FDC should be installed and used.
The other emulators (including the only one native MS Smartphone emulator, FuseSP) all require the files to be put in a specific directory so that the emulator can find them. They are, in all cases, either the home directory of the emulator or a subdirectory of it. This also means you MUST install the emulators on a storage card if you want to avoid your built-in storage to be overcrowded with Spectrum files.
Please see the "File dialog?" row in the Chart for more information on what these directories are.
1.3.1 Loading programs into the emulators
The two (main) types of available media also means vastly different methods of loading them.
1.3.1.1 Snapshot files
First, with "snapshot" files (files that, effectively, contain a full print of the memory & full state of a computer), you just click them and they're immediately (without having to wait anything) loaded.
The advantage of this approach is immediate loading. The disadvantage is the lack of boot screens (which you may want to see - at least once. Some of them, for example, that of Rainbow Islands, is pretty cool) and the comparatively big size (as the entire RAM is saved - even with programs that are way smaller in size).
You can recognize a snapshot file by its extension: SLT, SP, SNA or Z80; the latter two being the most common.
1.3.1.1.1 Snapshot file loading in UnrealSpeccyPPC
To load a snapshot file in UnrealSpeccyPPC (the recommended emulator for the Pocket PC), after starting the emulator, click the large Open File button at the top (screenshot here; note that, as with all my all screenshots, I traverse the focus to the button / GUI item you need to activate so that it is easily recognizable). Note that, after loading something, its label will change to the full path + file name of the currently attached file as can also be seen in HERE. After this, click the file to load and, then, click Start at the bottom left (later, when you exit back to this screen to, say, make some changes in the settings, this button will be renamed to Resume). The execution will immediately be transferred to the given title.
1.3.1.1.2 Snapshot file loading in FuseSP
Conversely, to do the same in FuseSP (the recommended emulator for the MS Smartphone), after loading the emulator, go to Menu (right softkey) / 1 Load Snapshot; in the Select Snapshot GUI list control, select the one you'd like to load (pressing Action will result in being presented a full, vertical list of all the available ones to greatly speed up the selection; just press the Action button again to select a title from this view.). Then, just press Done (left softkey); you'll be taken right into the emulator, running the just-loaded title.
1.3.1.2 Tape files
Loading tape files are a bit different because they, by default, aren't auto-started in the Pocket PC emulators (including UnrealSpeccyPPC); it's only on the MS Smartphone where they are auto-loaded by default (which can be disabled).
Tape files have the file extension TAP, TZX (and CSW with UnrealSpeccyPPC). Compared to snapshot images, they are, in cases, MUCH slower to load but more closely mimic the actual tape loading experience, with some emulators (UnrealSpeccyPPCis one of theml FuseSP isn't), even exactly the same visual (border coloring) and audio (beeps) effects. In addition, you'll always see the infamous loader (title) screens not possible with snapshot-based games.
1.3.1.2.1 Tape file loading in UnrealSpeccyPPC
To load a tape file in UnrealSpeccyPPC, do exactly the same as you did with loading the snapshot file: that is, click the large Open File button and select the file. Now, however, before clicking Start, make sure you set the drop-down menu between the Open File and the "Reset" button to BASIC 48 (if it's a program compatible with the 48k Spectrum and not requiring a Spectrum 128). After this, instead of the Start (Resume) button you used with the snapshot images, you will need to press Reset (so that the previous program, if present, is removed from the emulator).
Now, you'll be taken to the BASIC prompt of the emulator, which resets itself. After bringing up the on-screen keyboard (click the keyboard icon at the bottom right corner), just click "J". This will result in "LOAD" to be inserted in the command row. Now, press the somewhat smaller "S" in the lower right area of the on-screen keyboard (it, then, becomes red showing it’s in effect) and press " (Symbol Shifted character of the P key). Repeat the same so that you see the command
LOAD ""
on the screen. Now, press the Enter key - it's just under the already-used P key; it's denoted by a ^ character. The tape loading process will start.
Should you make an error during this, just click the small "c" in the lower left corner of the keyboard and, then, click '0' (zero). This will delete a character (or a full command) backwards. Remember to click "c" again if you want to delete more than one character.
1.3.1.2.1.1 Disk file loading in UnrealSpeccyPPC
Finally, loading disk files (in UnrealSpeccyPPC only) is even more different. Start with the usual Open File / selection screen and press Reset. (You will, as opposed to the Tape loading screen, NOT need to set the operating system to something else than TR-DOS!)
You'll be presented a directory list on a green background. Using the 6/7/8/9 buttons on the on-screen keyboard, position the mouse cursor on top of the item you'd like to load so that it is highlighted. (With most, say, Virtual TR-DOS or contemporary, post-Soviet disk images / demos / games, there's only programs in the image and, therefore, you'll only see one image in there.) After this, click 0 (fire) - the given program will be loaded and started.
1.3.1.2.2 Tape file loading in FuseSP
To load a tape file in FuseSP, in the “UI mode”, select Menu / 2 Load Tape and do the same as previously, with snapshot images – that is, select the file to load. Note that you should NOT untick the “Auto load” checkbox. Should you untick it, you would need to, after manually resetting the emulator (Menu / 6 Reset), manually enter LOAD””. This would be pretty problematic – if you don’t have a built-in full thumbboard, the only way of doing this is assigning all the used letters and signs (L, O, A, D, “) to a hardware / phonepad button, one by one and, then, pressing them. As is also pointed out elsewhere in this roundup, this is what makes it (almost) impossible to issue any long(er) custom commands in FuseSP.
1.3.2 Other features / settings
1.3.2.1 Turbo mode
UnrealSpeccyPPC allows for a "turbo" mode in addition to the "100% speed" one. The former will allow for, on current, fast Windows Mobile devices, much (in cases even 1500% of the original Spectrum speed) faster program execution.
Enabling turbo mode also greatly speeds up tape loading. However, it, as with the C64 emulator PocketHobbit, it also results in most importantly character input problems: with enabled turbo mode, you won't even be able to enter almost anything because of the doubled characters. Also, games will be unnecessarily fast.
This means you will only want to enable turbo mode during, say, lengthy tape loading sessions. To do this, just press Application button 4 on your Pocket PC. You will also see the FPS value, continuously displayed in the lower left corner of the screen, to be increased (and the sound muted).
1.3.2.2 Buttons
Better emulators also let for redefining buttons. This is essential when dealing with non-Kempston joystick emulation and on the MS Smartphone platform, where you need to assign original alphanumeric letters to the phonepad / control buttons of the device so that you can use the given letters / numbers at all (assuming your Smartphone doesn't have a built-in keyboard).
1.3.2.2.1 Buttons in UnrealSpeccyPPC
To make any (additional) button assignments in UnrealSpeccyPPC, as is also pointed out in the "Joystick: supported keyboard layouts " row of the Chart, you'll need to click Advanced Settings, tap-and-hold the functionality you’d like to assign and select Assign. (If you no longer need the previous assignment(s) of a button, just select Empty in the same menu.)
You can also manually edit the action_map.ini file in the home directory of the emulator. Make sure you convert the file back to the LF-only (Unix-style) format from the DOS/Windows-specific, CR+LF format, should you use a Windows-based editor also putting CR's at the end of each line. Note that it's quite unlikely you'll need to modify existing button assignments as the built-in, pre-defined ones cover most games.
1.3.2.2.2 Buttons in FuseSP
With the MS Smartphone-based FuseSP, the situation is wildly different. This emulator, unlike PocketHobbitSP2003 (the C64 emulator for the MS Smartphone), doesn't let for arbitrary character input. That is, unfortunately, unlike with PocketHobbitSP2003, you can't just use the phonepad in the traditional text input way.
While the default character mapping, that is, numerals (and the most widely used other control characters: Enter (Talk), Space (hang up)) are assigned to the phone buttons (including the volume up/down keys, the Power button and the two softbuttons), and these assignments generally work great in most games (where you need to use the numerals 1, 2, 3 etc. to select at least a joystick mode), you may need to assign other characters to a specific button so that you can enter other types of characters.
If you encounter situations like this, go to the main screen (by pressing the Back or the Home key while in the main emulation window; this is what the README.txt coming with the emulator calls "UI Mode", as opposed to the in-emulation "Spectrum mode"), invoke the main menu (right soft key), select "5 Define Keys", select a hardware button (for example, Left Softkey) to assign the given original key to, press the Action button to quickly bring up the selection list, select the new assigned key (for example, in here, “A”) and press Done (left softkey). The assignment will change.
Incidentally, this menu can seem a bit complicated at first because, in addition to the plain character assignment operations, it's also here that you can en/disable Kempston emulation (enabled by default) and mirror the D-pad directions to the phone keys so that you can not only control the game via the D-pad, but also with the phonepad buttons 2/8/4/6 for down / up / left / right. If you don't need the latter functionality (because you exclusively use the D-pad to control your player) but would prefer to be able to assign more functionalities / more original keys to the available (few) hardware buttons, you can safely untick the "Mirror Joystick on Keys" checkbox in here, which is enabled by default.)
Also, again, note that it's in here, at the top (with the "Kempston Joystick" checkbox, that you can disable the Kempston emulation. Should a given game not support Kempston, you'll need to untick this checkbox and, right below the checkbox, make sure you correctly assign the four directions (and the Action button) to real, original keys. These assignments, naturally, aren't editable while Kempston emulation is enabled (after all, Kempston isn't character input emulation-based). However, after disabling Kempston, you can freely edit them, should their default value (the traditional Sinclair interface) be useless.
Note that, fortunately, the key binding / assignment settings are separately saved for each game. This is highly useful because games tend to use different button assignments and continuously redefining them can prove really annoying.
Finally, note that, in FuseSP, you can explicitly (it’s disabled by default) enable the use of external, built-in key/thumbboard, as is the case with UnrealSpeccyPPC, where, in order to make built-in keyboards work, you must select the “Keyboard + cursor” control scheme in BUTTONS. To do this, go to Menu / 4 Options and tick “Device has full keyboard”. Note that it will NOT work correctly with the HTC Vox / S710 slide-out keyboard – the numerals will be used instead of the alphabetic keys, only letting some keys to be accessed. Users of non-sliding, Landscape keyboards, on the other hand, reported success with their keyboards.
1.3.2.3 Joysticks
Traditionally, the Spectrum had a wildly different approach to controlling games than the Commodore 64 or most other home computers designed & manufactured after 1982. The Spectrum not having a built-in joystick port, the user needs to use the keyboard for control. By default, the keys 5 (left), 6 (down),7 (up) and 8 (right) are used to direction control in many games (and, of course, in the BASIC too) and, in general, 0 to fire. You can control a lot of games with this scheme; for example, Harrier Attack! and Pssst, just to name a few.
However, this keyboard-based control was really awkward, which were helped in two ways.
First, other blocks of buttons, more closely representing the four directions and separated to the left and right sides of the keyboard, have been used by some games. The most important of these assignment is the QAOPM scheme, where Q is used for left, O for down, P for up, A for right. For firing, traditionally, two keys were used: either M or the space. Should you encounter a game supporting these buttons instead of the standard 5/6/7/8 ones, you will want to reassign the D-pad directions to use these buttons. Note that, with UnrealSpeccyPPC, where there are several pre-defined control schemes (and you can also create your own ones), you will only need to select the one you need in the BUTTONS tab in Advanced Options. If there's no pre-defined schema for a given game, you'll want to edit action_map.ini by conveniently copying an already-defined block of button assignments, giving it a meaningful name (in the first, preset= attribute) and make the necessary changes. After storing the file and restarting the emulator, the new schema will be visible and selectable. Alternatively, you can also do the same from inside the emulator – with somewhat more effort & clicks.
It's also very important to notice action_map.ini assigns the <AutoFire> functionality to the TSOFT1 button; that is, the left WM5+ softkey. As this button may be missing on some upgraded / native WM5 devices (for example, the Dell Axim x50/x51 series and the non-phone HP iPAQ's) and, of course, ALL devices prior to WM5, you will want to redefine it to use, say, the second application button (APP2).
The second, additional hardware-based approach, was adding joystick interfaces in the extension (interface) ports. These interfaces allowed for plugging in the, then, already (except for the IBM PC, which went its own, analogue controller way) industry-standard 9-pin digital joysticks pioneered by the hugely successful Atari 2600 gaming console.
Two main standards (meaning to different hardware joystick interfaces) exists: that of Kempston and Sinclair. The former doesn't map any keyboard buttons but use its own; the latter does button mapping (which is exactly the same as with the traditional key-based buttons, except for the direction "left", which is, instead of key 5, is mapped to key 9.
In general, hardware joystick-aware games support both joystick interfaces, except for the earliest ones, which may only support Kempston only (the earliest interface to hit the market – it was only later that Sinclair released a joystick-enabled interface, ZX Interface II, to the public). Make sure you look for joystick setup questions at the beginning of games so that you can select the most optimal solution not resulting in your having to switch joystick assignment schemes.
1.3.2.4 Changing screen orientation; image downscaling issues
As opposed to C64 emulators, all Pocket PC emulators have one wired-in (either Landscape or Portrait, but not both) screen orientation. It's only the Smartphone-based FuseSP that supports switching between the two orientations using either the # button (in "Spectrum" mode) or Menu / Options / Screen orientation.
In addition, as opposed to the Smartphone C64 emulator PocketHobbitSP2003, FuseSP supports full-screen stretching on QVGA devices in Portrait mode, which is really-really useful in making use of the entire screen estate. Make sure you look for the option "Stretched Portrait" in Menu / Options / Screen orientation (or, while pressing # to switch screen orientations / modes, select the one that fully stretches the image vertically).
Note that, in the default Portrait mode, as the width of the physical Pocket PC (or QVGA MS Smartphone) screen is 240 (with low-res MS Smartphone screens, 176) pixels, while the original screen width of the Spectrum is 256 pixels, shrinking (read: dropping some pixel columns) must be done to fit the original screen into the available screen estate. It's worth pointing out that PocketClive, the only Pocket PC-based emulator (not counting in the not recommended, Russian, TRD-only, GUI-less PocketSpeccy) to use the Portrait emulation, not only supports shrinking, but also, to avoid the (ugly) consequences of it (completely dropped columns)
Finally, it's worth pointing out that FuseSP applies a VERY clever method at dropping lines as it uses some interpolation to render the missing info of the dropped columns in the neighboring columns. This results in the vastly enhanced and eye-friendlies, albeit a bit blurry representation in QVGA mode. On 176*220 screens, of course, this can't really help the situation.
Now that we've quickly reviewed the issues common to Spectrum emulation on Windows Mobile, let's see what emulators there are and how they compare to each other. In the following two chapters, I introduce Pocket PC and MS Smartphone emulators.
2. Pocket PC (Windows Mobile 6 Professional / Classic) emulators
2.1 UnrealSpeccyPPC 1.02
This new, excellent and, outside the ex-Soviet region, absolutely unknown emulator is by far the best Spectrum emulator out there, a port of the also successful and excellent Unreal Speccy. It has all the goodies one would effect from a decent emulator: auto fire, huge and, particularly on VGA devices, (almost) transparent on-screen keyboard (on QVGA devices, the buttons are considerably larger as can be seen in HERE), support for all tape / snapshot and even disk formats.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
The main discussion thread discussing this emulator is HERE (Babelfish "translation" HERE). There are some other threads at other sites; for example, THIS.
What is more, the CAB file can be installed on MS Smartphones too as can be seen in here:
(note that it was only to prove the emulator is running on a QVGA Smartphone that I’ve made the task bar displayed (via activating SPHelper). Otherwise, it’s hidden.)
While the Smartphone version is in no way flawless, you will certainly want to play a bit with it to find out its weaknesses / strengths.
2.2 PocketClive v2B
A famous (but long-abandoned) emulator is PocketClive.
The most important difference between PocketClive and the most recommended UnrealSpeccyPPC is that PocketClive uses the Portrait screen resolution and a full keyboard showing all the original labels. Unless you’re an experienced Spectrum user and you DO want to know how the BASIC commands can be accessed on the original Spectrum keyboard, you may want to give a try to this emulator. (Or, alternatively, PocketSpeccy, which uses exactly the same on-screen keyboard, but is capable of reading TR-DOS disks; that is, TRD files.)
As this emulator is NOT recommended (but not disqualified either), it’s in the Chart that you’ll find the most information on using this emulator, NOT in the first chapter (which only discusses the two recommended emulators suiting the needs of 96-97% of existing users: UnrealSpeccyPPC for the PPC and FuseSP for the Smartphone).
Not many English threads discuss this emulator. The ones that at least mention it are for example "i just played Simcity on my Be300" or THIS
and THIS AximSite threads, THIS PG, THIS (“Pocket Genesis”) and THIS (“Just Chattin' - What games are on your PPC right now? (omit none!)”) threads. In the Russian language area, the situation is MUCH better; see the following threads:
1
2
3
4
2.3 SpectrumAnyWhere 1.1
This is another also-run emulator without any really outstanding features. UnrealSpeccyPPC is orders of magnitude more featureful.
The most important fact you need to know about this emulator that it can not directly be installed on WM5+ devices. This, however, can easily be fixed with a quick hack I’ve described in the Chart. Also note that you will NOT want to use it on WM2003(SE) devices because of the on-screen keyboard coordinate offset problems.
Even fewer existing threads discuss this title; the only English thread I could find was just a mention at Xda-developers (“amiga emulator on your pocketpc”). In Russian, there aren’t many more threads either; in addition to the zx.pk.ru threads linked in the previous section, I also recommend THIS.
2.4 PocketSpeccy
This emulator is pretty new, but already discontinued emulator “only” supports ".trd" disk image files – that is, it can NOT be used with any “old”, “traditional” tape / snapshot files. It has absolutely no GUI: for example, it’s in the config.ini that you need to supply the disk to load (and all the other – not many!) parameters before starting the emulator. Pretty awkward, if you ask me.
As it’s now discontinued and superseded by UnrealSpeccyPPC, I do NOT recommend it and don’t even include in the Chart.
Should you still be interested in the emulator, check out THIS Russian language thread.
2.5 SinclairSpectrumEmulator 1.1
This Handheld PC-based emulator is really outdated (from year 1999) and is, therefore, in no way recommended. Get UnrealSpeccyPPC instead. There is just no point in bothering with it – unless you have a Handheld PC, that is. But, even then, you may want to prefer trying to hack UnrealSpeccyPPC to run on your H/PC (assuming it has an ARM(-compatible) CPU).
3. MS Smartphone (Windows Mobile 6 Standard) emulators
3.1 FuseSP 0.22
This is THE emulator you should try first if you have any MS Smartphone model. It’s pretty capable (except for the lack of direct, phonepad-based text input) and highly recommended.
Please consult Chapter 1 for usage tips and don’t forget to scrutinize the Chart for additional tips and tricks.
Related threads: “A few thoughts on useability”
FUSESP in QVGA Landscape 320*240......
ZX emulator FuseSP v0.12a with NumKeys support, I added support for number keys
3.2 PocketClive for SP 2B-0.2
Unfortunately, this emulator seems to be only running on the oldest, 2002 Smartphone version, but not on newer (SP2003+) ones. I was just unable to access any kind of menu on either my WM6 HTC Vox / s710 or WM5 HTC Oxygen / s310. That is, don’t bother.
4. The Comparison & Feature Chart
As with ALL my Comparison & Feature Charts, this one is a MUST to check out as it offers a great way of comparing the reviewed titles. It, as with my past charts, contains tons of screenshots (don’t forget to click the links), usage tips and mini-tutorials.
It’s available HERE.
The test / rows should be pretty much self-explanatory. If you at least superficially have read my past emulation-related articles (if you haven’t, do it NOW – they are just the best emulation-related articles, no wonder even Michu himself made them sticky in the official AximSite emulator forum, and many of them have also been frontpaged by several leading Windows Mobile-related sites.
That is, do yourself a favor – if you DO want to know EVERYTHING you can ever know of an emulator, do check out the chart!
Note that I haven’t listed some other, good, famous games for the Spectrum in the chart. They also run under both FuseSP and UnrealSpeccyPPC without problems.
Some examples (also see the “100 Best games” list; original version also HERE):
Deathchase
ALL OR NOTHING
STOP THE EXPRESS
HEAD OVER HEELS
THE SENTINEL
NEBULUS
Uridium
Impossible Mission
Turrican.
Article updated & cleaned up.
I`m looking for PocketCommodore64 or any other emulator that I can run on my navigation system with WinCE 6.0. Could anybody can help with working link?

The Button Enhancer Bible & great button config tips for Opera Mobile / Mini users

The Button Enhancer Bible & great button config tips for Opera Mobile / Mini users
Back in early 1997, when the first Microsoft WindowsCE 1.0-based devices hit the selves, they already contained shortcuts to built-in programs. Back then, as the 1.0-series of WindowsCE exclusively ran under clamshell Handheld PC’s with a built-in keyboard, it was pretty easy to find place for these quick start keys. For example, in the Philips Velo 1, the entire number row is overridden with them, providing access to almost all major applications (Pocket Word, Excel, Calendar, Contacts, Tasks, WWW, Inbox, Database, Calculator, Voice Memo) delivered with the device.
When, in 1998, the Palm-size PC’s and, in 2000, Pocket PC’s arrived, the lack of a built-in real keyboard meant it was no longer possible to crunch as many buttons in the radically reduced front and side surface of the device. Therefore, the number of shortcut keys were substantially reduced; most devices only sported five of them. There were differences in both directions: for example, the HP iPAQ 2210 only had four, while the Fujitsu-Siemens Pocket Loox 720 had six and, what is more, these buttons were all bifunctional: press and hold them instead of just quickly pressing it, and another functionality starts. (Some models, for example, the h2210, also supports something like this – holding the buttons results in, in general, creating new records. However, unlike with the Pocket Loox, you can’t redefine the functionality if you want to access something different.)
Unfortunately, very few models support bifunctional (short-press and long-press) buttons. While some device manufacturers (like HP with their WM5 upgrade for the HP iPAQ hx4700, introducing full support for press-and-hold front buttons) did realize the ability to double the functionality one can quickly access with a single button press(-and-hold), not even the latest mainstream models offer this. For example, HTC’s Pocket PC Phone Edition (Windows Mobile Professional) models, in general, only offer one application (app for short) button with double functionality (for example, Button 4 on the Universal and the Wizard); all the others are single-function and, therefore, greatly reduce their usefulness and the flexibility, should you want to greatly speed up invoking applications or greatly simplifying tasks (for example, by a hardware button-initiated macro playing back several pre-recorded stylus taps to, for example, greatly speed up mail checking).
Some of the current models even more reduced the number of (redefinable) buttons. For example, the HTC Elf / Touch only allows for redefining the Camera button and nothing else (also see THIS). Yeah, only ONE button. Nice, eh?
The hardware manufacturers’ neglecting the need of people wanting for more functionality assigned to the few hardware buttons of their Pocket PC’s (and, due to the, in general, far fewer application buttons they have, to a lesser degree, MS Smartphones) has resulted in a plethora of third-party solutions that do allow for this. In this roundup, I explain and thoroughly compare these all.
This kind of a Button Enhancer Bible has long been awaited. Except for some not very recent (pre-WM5) and, now, completely outdated quick reviews & comparisons, there has never been a really decent and thorough comparison of the major button enhancers, let alone ones that cover even the latest (2007), kick-butt, freeware titles developed by some highly skilled XDA-Developers folks.
1.1 What can you expect of button enhancers?
(Sometimes heavily) extending the number of applications you can start / tasks you can do with a hardware button by adding at least press-and-hold mode to the already-existing “short press” one. The vast majority of the enhancers add three additional states and there is one (HButton), which goes even further and lets for adding an unlimited number of different invocation capabilities to a button.
They, in general, contain widely asked-for goodies missing from the Windows Mobile operating system like a task manager (to quickly switch between running tasks), a task killer (to completely get rid of it to make sure it doesn’t take up any memory or other system resources), sometimes fancy, full-screen clocks (as opposed to the tiny one in the upper right corner) etc.
Note that you can freely download utilities like these. The most important repository of these free, but highly useful, single-purpose, small utilities is that of PHM PowerToys. The single-purposedness of these small applications also means these tools can be directly assigned to a hardware button (this is exactly what PHM Keys does). This also means that, if the particular button extender you select doesn’t have built-in for example Reset functionality (which can be very useful when assigned to a button, should you need to soft reset your device several times a day; a well-known situation for users of Resco Audio Recorder, which, in many cases, (at least on the Pocket PC platform) requires a reset after resuming the device and/or reinserting the sotrage card it should record to), you can always make use of Reset.exe of PHM PowerToys.
Incidentally, still speaking of the built-in Reset support of the reviewed button enhancers, none of them does prompt the user before resetting the device. Therefore, to avoid resetting resulting from an unwanted button press (you, for example, press it three times instead of twice and this triggers an unconditional soft reset), you may still want to prefer PHM’s version of Reset to the ones built into these button enhancers.
The case is pretty much different with the built-in task managers. In general, they’re better than that of PHM because you will have the time to select the task you’d like to switch to and, with the best task manager implementations, you can fine-tune its parameters.
Some (currently, two; one of these, buttonMax, still not being WM5+-compliant, doesn’t run on current Windows Mobile devices) of them let for defining application-specific shortcuts. These can be VERY important and useful. Just one example of this (which, also, explains where thee kinds of shortcuts can prove really useful):
Opera Mini (OM4 for short), with the latest, 4-series, has become a serious contender to all the other Web browsing solutions on out platform. Many even consider OM4 to be THE best Windows Mobile (WM for short) Web browser, particularly with a decent MIDlet manager (the environment to run MIDlets like OM4) like Esmertec’s Jbed.
OM4 (along with the still active 3-series) had, before the just-released beta 2, a very important problem: it doesn’t let for switching between full screen and non-full screen mode unless you have a built-in hardware dialpad or keyboard on your phone or, depending on the MIDlet manager you use (some, like Jblend, don’t support switching between the two screen modes using the on-screen keyboard; others like the, for running OM4, most recommended Jbed, can), can be bothered to bring up the on-screen keyboard to make the switch. If nothing works (you don’t have any kind of dialpad or keyboard and the on-screen keyboard isn’t supported by the particular MIDlet manager, you’ll need to find external ways of sending the “*” (or, in cases, the “**”) character(s) to OM4 to do the switching. It’s here that scripting solutions like MortScript come into picture: you just create a MortScript file containing a Sendkeys() function call, and just assign this script to one of your hardware buttons. After this, upon pressing the button, a *(*) will be inserted into the active program; if it’s OM4, then, it’ll force it to switch between the two screen modes. (Which, unfortunately, won’t work under the above-mentioned Jblend either, for reasons I’ll elaborate on in my forthcoming MIDlet Bible). Fortunately, with the latest beta, you can already get rid of the problem by going to Settings and make the changes yourself; but, again, this won’t help with the previous, 3.x-series still widely in use for the time being, that is, before the 4-series of Opera Mini leaves the beta status.
In addition to the full screen mode switching, OM4 has a lot of dialpad (numeric) key goodies like quick (page) up/down scrolling (as opposed to the default, line-by-line scrolling) when you use the 2/8 hardware buttons / keys. If you don’t have a handheld with these buttons / keys and you don’t want to open / slide out the keyboard (if it exists at all) to press 2 / 8 (the vast majority of Pocket PC’s, except for Asus’ phone models having a hardware dialpad, belong to this category), you’ll certainly welcome a solution that does the trick for you. That is, either an external program, tied to a hardware button, which you can invoke to send a 2 or 8 character to OM4, or a button handler, which itself can send your OM4 these shortcuts (for example, PQzII).
Yes, that’s at least two numeric key simulation functionality worth binding to a hardware key. And, if you would like to also bind the other, very useful numeric key-only shortcuts (see the complete list of them HERE, in the Opera Mini column) to hardware buttons, even more buttons would be needed.
If you bind these buttons to be active system-wise, then, you will quickly use up the really meager number of button configuration capabilities and you won’t really be able to make use of these configurations in any else program, where you won’t really need to enter, for example, 2 or 8 through a hardware button. This is (one example of) where application-specific button assignment can really pay off. You just use a button enhancer that is able to handle separate apps and only use button assignments with the defined one.
Note that, currently, not all applications can be treated this way. For example, as far as MIDlet managers are concerned (still sticking to the Opera Mini example), only those of Esmertes (Jeodek, Jbed) and TAO (Intent) will work. IBM’s J9 won’t work in app-specific mode (if at all: half of the devices I’ve tested it on keypress emulation wouldn’t work at all) and Aplix’s Jblend is the worst: it immediately pauses when you try to send something (for example, an emulated button press) to it. As VITO ButtonMapper, currently, doesn’t support sending out emulated keypresses (as has already been mentioned, it’s only PQzII that is capable of this feat), it must use an external tool (for example, MortScript) to generate keypresses, this means you in no way can send them to Jblend. Your only choice is PQzII, but the latter doesn’t allow for application-based, separate button assignment.
Another example of a program that cannot be used in separate, filtered mode is Opera Mobile 8.65, where using the numeric keys also greatly enhances the usability. This means you won’t
Many other WM programs, however, can be used in this “sandbox” model; therefore, VITO ButtonMapper still remains the number one button enhancer app to test when you want to have app-specific button assignments.
Please note that I’ll also elaborate on these issues in the “Hands-on experience: Passing keypresses to Opera Mini / Mobile” section. In there, you’ll get an even more thorough explanation of these questions and will also be presented some ready-made scripts.
Some add keyboard shortcut emulation. The most common of this is adding copy / cut / paste / select all emulation (for clipboard operation) and Tab, Enter, ESC, Cancel, Page up/down for cursor movement emulation. The, in this respect, best utility, PQzII, even supports defining any of the available alphabetic characters to be input. The latter, as has already been stated, can prove VERY useful with applications like Opera Mini and Mobile.
The most advanced ones (for example, again, PQzII) allow for assigning functionality like quick dialing a number or selecting a pharse to be inserted in the text (which is, otherwise, only supported by commercial tools like Resco Keyboard Pro in its “Frequently used phrases” mode)
Also, advanced apps also allow for stylus (but, currently, not button) macros; this is currently supported by two button enhancer applications. There are a lot of advantages of the support for this; see for example the “Scenarios for using with ButtonMapper” section in the VITO ButtonMapper manual.
1.2 How do I use them?
It’s pretty easy. If you already know (if you don’t, read THIS Smartphone & Pocket PC Magazine tip – in here, I don’t explain this basic stuff) how you can assign any external program to a button, you can rejoice: most third-party button assignment applications use a pretty similar Graphical User Interface (GUI) to assign your buttons. In some cases (most importantly, with the, if you need selective app and/or macro support, highly recommended VITO ButtonMapper), these apps use the system-level Buttons setter applet with some additional tools. (For example, with the VITO app, an additional drop-down menu to set the app you’d like to define assignments to and two buttons to save / retrieve the configuration.) In these cases, all you need to do is invoking the familiar (with the above-mentioned additions) Buttons applet.
Unfortunately, not all applications are so similar to the original, well-known Buttons applet. The, in this regard, worst PQzII, for example, has a very hard-to-understand GUI. The almost complete lack of documentation makes the situation even worse. This is why, in the main chart of this Bible, I’ve tried to provide as many screenshots as possible to show all the individual steps of, for example, assigning a given functionality to a button. I, however, haven’t written much text to accompany these screenshots. The order they are presented should be sufficient for most readers. Should you still having problems configuring PQzII, let me know (just post a public(!) question) and I’ll give you a definite answer.
As a rule of thumb, you assign buttons in these applications in exactly the same way as in the standard, operating system-default Buttons applet. You select the application button (or, in some other cases, other - phone (see the “Phone button redefine” row in the chart), keyboard, WM5 softkeys (“WM5 Softkey redefine” in the chart) or even D-pad arrows (“D-Pad functionality redefine” in the chart) - you’d like to assign an application or some functionality to and, then, select it from a list. You can do this to all the possible states of the button: single-press, double-press, triple-press, press-and-hold etc. (when available in the given application).
In many programs, you can also quickly remove this assignment so that the original (one-press only) setting set in the system-level Buttons applet takes place over the one set in the button enhancer application. In the chart, I’ve also elaborated on this issue with all the tested programs.
1.3 Issues; problems when using button enhancers
Some of these applications aren’t without problems.
First, as some of them are always running (because it adds significant functionality not possible to handle via the standard button assignment functionality, which only executes the given program when the button is pressed), there is a remote possibility they will take up a lot of system resources; most importantly, CPU time and memory. Fortunately, this isn’t the case: all the apps that do have a resident, always-active module have little system resource usage. There was only one app that had enormous (over 800 kbytes) memory usage: the original PQz, of which PQzII is the greatly enhanced version with dramatically reduced memory usage (see THIS for more info on the differences if interested).
Second, as they might be too selfish, they may mess up the local (or, default) button assignments made in for example multimedia applications. Almost all media players and remote media controllers offer the capabilities of locally assigned buttons (for example, TCPMP in Options / Settings / Select page / Hot Keys; Resco Audio Recorder 4 in Action / Options / General / Buttons etc.) For example, if you assign a button to, say, fast forward, stop or switch off the screen, this setting may collide with that of button enhancer applications, which might result in funny and/or unwanted consequences.
While there are no such problems with the built-in button assignments or any application that solely uses the infrastructure already available in Windows Mobile (that is, applications that don’t have a resident memory module), the vast majority of apps do interfere in at least some of these applications. Actually, it’s only the two non-resident apps (namely, DoubleLauncher and HButton) that have absolutely no problems working together with these kinds of applications.
I’ve made several tests to find out the most problematic programs. To represent a standard multimedia player application, I’ve used the hugely popular TCPMP. This application has a, by default, disabled option of “unhooking” buttons so that global, system-level button settings don’t interfere in the program (because they can’t be used). In addition, I’ve used the latest Resco Audio Recorder series, which is known to have even more serious problems with almost all the programs running in resident mode: either the buttons that are redefined / reassigned in the button enhancer stop working, or the globally defined functionality is executed half of the times and the local one in the other half. Finally, three apps (buttonMax, BtnPlus and Vito ButtonMapper) even require to be completely restarted after exiting Resco because they just stop working. In the Chart, it’s in the “Overrides local keyboard assignments?” section that I’ve elaborated on these issues and the problems. As can be seen, PQzII is clearly the worst application in this respect because it even messes up TCPMP – even when you do enable button unhooking in the latter.
Other problems arise from models and / or buttons already supporting press-and-hold (that is, double) functionality; for example, the above-mentioned Pocket Loox 720 or the WM5-upgraded HP iPAQ hx4700. If you try to use a button enhancer app with hold mode, the two hold modes (that of the operating system and the enhancer app) can clash, as was the case with the TCPMP / Resco case outlined above. In order to find out how the applications behaved under these situations, I’ve also made some serious tests on my WM5-upgraded HP iPAQ hx4700. In general, it can be stated if the given enhancer application supports press-and-hold functionality, this functionality won’t work with buttons also having native support for this. As button enhancer apps relying solely on press-and-holding (HButton) can ONLY work when assigned to a button not having native Hold support, you will only be able to assign HButton to Button 5 on the hx4700.
This all means press-and-hold functionality will not work if the OEM's button driver already implements multiple keypresses or press-n-hold.
In addition, press-and-hold usually doesn’t work for red/green phone buttons, WM5 softkeys and the Ok button (when available) because the system returns both the "key was pressed" and the "key was released" events simultaneously right after the button was actually released so enhancer apps that, otherwise, support these buttons (for example, AEBPlus) are not able to decide if it was a long (press-and-hold) button press or not.
It’s on purpose that I’ve emphasized I’m speaking of individual buttons and not devices themselves. For example, on the hx4700, the Record (fifth, side) button doesn’t have a Hold mode; therefore, with external button enhancers, you can also use their Hold functionality, unlike with the other four app buttons. That is, you can use the hold functionality on devices that do have buttons without at least one non-hold key.
2. The reviewed button enhancer apps
2.1 PQzII (Keyboard Helper) 0.0.7b 20070725
This is a very-very advanced, free utility, mainly for users of handheld devices with a real keyboard built-in, but, as it also supports traditional application buttons, other Pocket PC users can also make use of it.
There are several versions of it: a generic WM2003 and WM5 (which is tailored for the HTC Universal, but can be run on any other WM5+ Pocket PC (phone)), one for the HTC Wizard and the HTC Hermes. While, currently, there are no specific versions for other / newer devices, once you learn how the configuration files are built up, you’ll easily make one.
It allows for redefining / overriding any buttons (even the two phone buttons, the D-pad arrows and the two WM5+ softkeys). Note that, on the Universal, the pretty useless Internet Explorer key (the one in the lower left corner of the keyboard) can’t be redefined (see THIS); the same stands for the Messaging shortcut (close to the IE key).
The main discussion thread of PQzII is HERE and the (pretty simple and hard-to understand) official documentation HERE.
What I recommend is that you don’t let the very bad set-up interface and the substandard docs of PQzII chase away. Once you learn how it can be configured, you’ll love it and find it one of the most powerful utilities, particularly if you also have a built-in keyboard (it supports a lot of, on desktop PC’s, well-known keyboard shortcuts like copy/paste, CTRL+LEFT = HOME, CTRL+RIGHT = END, CTRL+UP = PAGE UP, CTRL+DOWN = PAGE DOWN etc. – all a god-send for everyone editing / typing a lot of texts on his or her handset). Let me, again, recommend the mini-tutorials in the chart, which will give you immense help in discovering the capabilities.
Note that you can even enter ANY Unicode char with ALT keys; a related post is HERE showing other solutions & consequences.
Note that there is a similar product, AE Keyboard Mapper (also known as AEKMap), which I do not review here for several reasons:
it doesn’t support application buttons, unlike PQzII, and, after all, the subject of this Bible is application button redefining, not that of built-in keyboards.
you need to activate (=pay for) it to get, with button enhancers, basic functionality like assigning applications to an alphanumeric key. With PQzII, you get the same functionality for free.
the same developer, Alexander Eltsyn, also offers a product, AEBPlus, solely meant for application button enhancement and is far more powerful in this regard that AEKMap. I will review it in this Bible.
2.2 HButton 1.9.1
This is a revolutionary, outstanding application in that, unlike all the other reviewed tools, it lets you assign any number (!) or applications to a single hardware button. Before you ask what the point in all this is, and whether it’s indeed easy to remember that, for example, the particular app you would like to start is at the eighth or the ninth postion, the answer is really reassuring. When you keep the selector (hot) button depressed, it scrolls through the titles of the apps you’ve assigned to that particular button. Whenever you see the program you would like to execute, you simply release the button and it’s started. (There are variations of this theme. For example, you can solely rely on the very quick and discreet vibrations or beeps; if you keep counting them, you’l know when to release the button to start the particular app.
It has other goodies too. As its “virtual” buttons need to be manually assigned to the hardware buttons of your handheld in the system-level Buttons applet, there is no in-memory resident code taking up resources / CPU time all the time and/or interfering with some apps having local button assignments (see the discussion of TCPMP and Resco Audio Recorder). However, the need for an additional, manual step to assign these virtual keys certainly make the configuration lengthier and, at first, a bit harder to understand. Nevertheless, once you get a picture how this all work, you’ll just love it.
All in all, an excellent application, well worth using, particularly on Pocket PC’s with a severely limited number of available, configurable buttons (for example, the HTC Elf / Touch).
2.3 AE Button Plus 2.6
This utility, having come from the same author than the already-mentioned and famous AEKMap, is alos very strong. In addition to its strengths on the Pocket PC platform, it is unique in that it’s the one and only tool to support the MS Smartphone (Windows Mobile Standard) support. Note that the well-known SmartToolkit (of which a new beta has just been released) also offers some button reassining capabilities, but only lets for simple press operations, as opposed to AE Button Plus. As it still has some quirks and, no matter how nicely it redefines the start menu, you won’t necessarily want to use it (for example, I uninstalled it after a while because of the speed problems in accessing the Start menu – I’ve just found the traditional of selecting my (current) apps way considerably faster), I don’t discuss it separately in here. I will do this as soon as it receives better button support and/or a stable, non-beta version is released.
This is without doubt THE most powerful button enhancer application when it comes the built-in goodies like switching on the built-in camera LED to work as a torch (not compatible with current MS Smartphones, unfortunately), connection starting/stopping etc. (See their almost complete list in the “Additional utilities” row of the “Compared to Settings / Buttons…” group of the chart). Granted, most of these hacks are invented by XDA-Developers hackers and programmers (for example, well-known vijay555) but you will need to install several additional apps to achieve the same. With AE Button Plus, you get all this built-in, without the need for installing and configuring several tools onto your Windows Mobile device. This itself – and the very low price tag – also makes this tool really appealing.
This application sits resident in the memory (with the definite disadvantages coming from this fact; for example, it certainly clashes with both TCPMP and Resco Audio Recorder but, fortunately, not so bad as PQzII).
Finally, a BIG request to all software developers and hackers: as with HButton and PQzII, I didn’t know of this application before embarking on writing this Bible either. With PQzII and HButton, this is pretty understandable as HButton is a brand new project started late Spring and PQzII was almost only discussed in a single HTC Universal thread (in a device-specific forum). Needless to say, none of the three apps were entered into the Software Encyclopedia of Smartphone & Pocket PC Magazine by the developers. This, and the fact that they have been only discussed in not widely known subforums is why I haven’t nominated them for this year’s Best Software Awards (they ALL would have deserved the nomination.) Therefore, my humble request to ANY Windows Mobile developer & hacker out there is the following: if you feel you’ve written a tool worth mentioning / paying attention to, don’t hesitate to contact me via a private message on any Windows Mobile forum. I’m using the nickname “Menneisyys” on all of them and you definitely will find me as I’m a top poster on all Windows Mobile forums. DO send me a message when you have something up your sleeves – you’ll get a lot of promotion for free and your app may even get nominated for the Awards, generating even more promotion, if I find your app is worthy enough. And it’s all free for you, with little effort – just a private message, with a link to the thread of your product and a sentence like “Please check out my latest tool, you might find it useful”. This particularly applies to hobbyist developers like the one of all these three apps. It’s almost impossible to run into their apps unless you excplicitly read thorugh hundreds of related threads because they don’t register their stuff in on-line software directories like the PPCMag Encyclopedia (and, in there, in the Utilities / Button Enhancers category. )
2.4 Vito ButtonMapper 4.0
This is one of the very few apps that have a really decent and easy-to-grasp manual. Its particular strength lies in its stylus macroing abilities and, what is even more important, the application-specific button assigning capabilities, in which, currently, is unique. (The other button enhancer app to do offer the same capabilities, buttonMax, currently (as of 10 / 16 / 2007) still isn’t compatible with WM5 and later operating systems, which means it’s useless on the vast majority of currently used handhelds.) Therefore, it’s highly recommended if you do need app-specific configurations – for example, number input for Opera Mini (more precisely, the MIDlet manager running Opera Mini) etc.
Don’t forget that, as has already been pointed out, the app-specific functionality doesn’t work with some programs; most importantly, Opera Mobile (as opposed to Opera Mini, which works just great together with Vito ButtonMapper when running under a compatible MIDlet manager – all MIDlet managers of Esmertec, TAO and, on some Windows Mobile models, IBM J9 – but not with Jblend). This, as has already been pointed out, is very bad news for all Opera Mobile users. If you plan to use Opera Mobile and want app-specific button assignments only active when running Opera in the background, you simply won’t be able to do this with the current, final version of Opera Mobile 8.65. Sorry. This is definitely not a bug in Vito ButtonMapper as the other, app-specific-capable app, buttonMax, can’t run Opera either (I’ve thoroughly tested this under WM2003).
As has also been mentioned, stylus tap emulation macros can also prove really useful. As has already been pointed out, you will want to read the “Scenarios for using with ButtonMapper” section in the VITO ButtonMapper manual for some examples of how this can be utilized.
All in all, I highly recommend Vito ButtonMapper, particularly if you need either app-specific settings or stylus macros (or both). If you don’t need these functionalities at all, you may also want to check out the free PQzII, HButton or AEBPlus – they have different capabilities and may turn out to be better suited for your needs.
2.5 DoubleLauncher
This app, in addition to HButton, is the only app NOT to have an in-memory module but uses the default button handler, which is advantageous in some cases (see for example the cases of applications with local keypresses – for example, Resco or TCPMP). Otherwise, it is clearly inferior to the best, most recommended, and, what is more, free apps: PQzII, HButton or AEBPlus. As it doesn’t support app-specific settings either, it is inferior to VITO’s app, which costs the same.
Therefore, I only recommend this app if you MUST use an app that, as with HButton, uses the built-in Button handler infrastructure because of the incompatibility of other button enhancers with your specific apps having local button assignments. Otherwise, you should go for something better and/or free.
2.6 BtnPlus 0.21
(direct LZH link)
This is a long-abandoned project not really working on any WM5+ devices I’ve tested it on. Therefore, you may only want to bother with using it if you have an SH3 Pocket PC 2000 device (a HP Jornada 525/54x). It has an English language tutorial for example HERE.
2.7 buttonMax 2.10
This app, as of the (current) 2.10 version, doesn’t have support for WM5, which is a pity because, otherwise, it’s a real capable button enhancer with the same unique capabilities as VITO’s app.
2.8 Verdict – which one to choose?
The answer is pretty simple: one of the PQzII, HButton, AEBPlus (which are all free; you can, of course, activate AEBPlus but the vast majority of the functionality is available even without doing so) or the commercial VITO ButtonMapper. As these four apps have distinct feature sets, you must yourself decide what features you need and what you don’t. For example, if you only have one configurable button (and don’t want to override for example your phone / softkey buttons with AEBPlus) but want to assign at least 4-5 programs (or, in a broader sense, any functionality) to it, your best choice is HButton. If you need either stylus macros or app-specific button assignment capabilities, your only choice is VITO ButtonMapper (unless, of course, if you have a pre-WM5 device. Then, buttonMax may also be a nice choice.) If your handheld also has a built-in keyboard, you might find PQzII the best. Finally, in addition to its being one of the best Pocket PC button enhancers, MS Smartphone users will want to use AEBPlus as there’re no other button enhancers compatible with the platform.
3. Hands-on experience: Passing keypresses to Opera Mini / Mobile
Now, some advanced tools for all of you that wan to pass keycodes (that is, want to emulate the usage of any keyboard) to the running applications. This is, as has already been emphasized, VERY important for every Opera Mini and Mobile users not having access to a hardware dialpad or keyboard with easily accessible numeric keys.
As has been stated in almost all my previous, Web browsing-related articles (also) concerning Opera Mini and Opera Mobile, two top-notch Web browser applications (also) available for Windows Mobile devices, these browsers are best used on a touchscreen-less Smartphone (because they all have a numeric dialpad) or a Pocket PC with a numeric dialpad built-in. Examples are the latter are most ASUS models including the forthcoming, “HTC Kaiser-killer” P750 (see THIS and THIS) or the forthcoming HTC Touch Dual. Unfortunately, the vast majority of Pocket PC phones still lack a numeric keypad. While they, mostly, do incorporate (except for some rare and/or now-outdated cases like the P3300, P3600, P6300, the first Touch and the forthcoming P6500) a slide-out keyboard, using it to control the two browsers is far from optimal (you need to slide them out, adding considerable bulk to your phone and/or making one-handed operation impossible).
Just an example of how cool these shortcuts are. Assume you want to quickly make Opera Mini full screen (or vice versa). You only need to press the * button twice in quick succession. No long, tiring menu traversing. The same stands for Opera Mobile: it also has some very useful features (quick switching between opened tabs, switching off/on pictures with a keypress; quick switching between the default and the desktop view etc) directly accessible from a dialpad button.
Unfortunately, neither Opera Mobile nor MIDlet managers (programs that run Opera Mini) can make use of the, during using these browsers, unused Pocket PC application keys. (I’ve long been telling the Opera Mobile folks to implement this functionality but, so far, they have had better things to do. Not that the competing browsers would all support configurable application buttons: the lack of support for this is still one of the biggest problems with even the latest previews of NetFront 3.4). It’s here that I come into the picture and explain exactly what you need to do.
Again, this tutorial only applies to you if you do NOT own a touchscreen-less MS Smartphone or a Pocket PC with a dialpad (or, if using the numeric keys on your full keyboard is OK with you – again, it wouldn’t be with me because of the awkwardness of slide-out keyboards, particularly when you browse the Web in Portrait mode).
In order to be able to assign at least the most important functionalities (for example, page up/down, quick selection list of active tabs, full screen vs. non-full screen mode etc) to the 4…7 (which can be doubled or even tripled with the tools I’ll also introduce) application buttons a typical Pocket PC has, do the following.
First and foremost, decide what they need to control. Do you need to control Opera Mobile or Mini?
3.1 Controlling Opera Mini
If you want to control the latter, do you have a MIDlet manager that CAN be controlled from the outside? (All can be, except for Jblend and, on many devices, IBM J9, which can only receive keypresses from PQzII, as is also explained in the “Can you use an external tool (MortScript's SendKeys, VJKeyPress or PQzII) to "inject" keypresses into the emulator?” row in the MIDlet Bible chart) If you need to stick to PQzII (because you have to use Jblend or IBM J9 on a device which doesn’t support MortScript), can you live with the lack of the “*” character? Can you switch to an in this regard (too) better MIDlet manager; most importantly, Esmertec Jeodek or Jbed? If you can, you won’t have problems with running MortScript, which allows for sending * characters.
Let’s take a quick glance on the different configurations and its capabilities:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
As you can see, there are the following possible configurations:
Any (including the default, system-level Button applet without any third-party button extender) button extender along with either MortScript or VJKeyPress to send any chars (with MortScript) or numeric chars (with both MortScript and VJKeyPress) to the MIDlet
PQzII to send numeric chars to the MIDlet: the only choice when you use Jblend or, in some cases, IBM J9
Also note that, should you want to prefer application-specific button assignment with VITO ButtonMapper (where, in what other Windows Mobile app could you use for example your 2/8/*-injector button shortcuts?), you must be aware of the fact that only the Esmertec and the TAO MIDlet Managers allow for this; IBM J9 has never worked for me. This is also explained in the “Selective (app-specific) button assignment for input with VITO ButtonMapper” row in the MIDlet Bible chart.
3.2 Controlling Opera Mobile
As Opera Mobile doesn’t require an additional MIDlet Manager (all with different compatibility issues) AND you can freely reconfigure input.ini so that you can get rid of the need to use * / #, your choices are far better than with Mini. The only exception is that Opera Mobile doesn't support selective button assignment.
3.3 Writing and deploying external scripts
Assuming you don’t want / don’t need to use PQzII (where just follow the mini-tutorial in the last, bullet starting with “Code conversion” in the “Other niceties worth mentioning” row), let’s see how you can pass any numeric characters (with VJKeyPress) or, even better (but decidedly slower), any char (including, for Opera Mini users, the very important * and # characters) with MortScript. Let’s start with the latter.
First, get the free (!) MortScript. In the ZIP file, just install \setup\MortScript-4.0-PPC.exe. After this, you can just copy your MortScript script files (on which I’ll promptly elaborate on) to anywhere under \Windows\Start Menu\Programs; I recommend a subdirectory so that they don’t cause a chaos because of their high number.
Now, let’s take a look at what MortScript files need to be used and how. First and foremost, all these scripts do is sending a (virtual) keypress to the currently focused application when they are invoked. If you execute them through an application button press, the given key code will be sent to the browser, which will, consequently, think it has arrived from a real dialpad (or keyboard) button.
Assigning a script to a hardware application button is easier than you think. If you don’t use any button enhancer application, you just copy the MortScript script files to somewhere under \Windows\Start Menu\Programs, go to Settings / Buttons, select the application button you’d like to assign the given functionality to and, finally, select the script file. This is exactly the same as associating any functionality with any hardware button. You only need to make sure you select the right script file. For example, if you want to send double asterisks (to quickly switch between full-screen and non-full-screen Opera Mini modes), you’ll need to assign SendDoubleAsterisk.mscr to a button. If you want to send the button press “2” (“Show window list” in Opera Mobile and “Page up” in Opera Mini), you’ll need to assign Send2.mscr to a button and so on.
The names of these files speak for themselves – you won’t misunderstand them. If you do, just take a look at the argument of SendKeys in it. There will be just one (or, with double asterisk sender scripts, two) characters in the argument of SendKeys like in SendKeys(“**”) or SendKeys(“2”). These instruct MortScript to emulate a double asterisk and a single “2” keypress respectively.
Now, let’s see how the same is done with the decidedly faster (it doesn’t have a full script parser and is only a “lightweight” app with the sole aim of emulating virtual keypresses) VJKeyPress (also see the related thread if interested; not obligatory). As it’s only able to pass Virtual Key codes, which means it in no way can pass for example asterisks or any non-alphanumeric characters (VK_MULTIPLY doesn’t equal to “*” and, therefore, won’t work), unlike MortScript.
Of course, you can do a lot more with MortScript (just some REALLY useful examples HERE and HERE) but, in cases, you just won’t need them. In addition, you can use the two keypress simulator utilities at the same time: just assign “real” alphanumeric buttons to VJKeyPress (so that you have speed) and non- alphanumeric buttons to (the slower, but more capable) MortScript.
Invoking VJKeyPress is very simple: you just create a .lnk file with the contents 250#"\Program Files\vijay555\VJKeyPress\VJKeyPress.exe" <keycode> (where you’ll find the numeric keycodes for all the passable parameters HERE; as can be seen, for example, if you want to simulate the button press of 2, you must pass VK_2, that is, 50 to VJKeyPress) and just assign it to a hardware button. As it’s a link file, you won’t have problems with third-party button enhancers not capable of doing so with MortScript’s native .mscr (no-link) files. Unfortunately, all button enhancers are like so, except for the excellent, highly recommended, free PQzII.
3.4 Creating direct MortScript .lnk files
To create an additional link file for your .mscr (MortScript script source) files (again, unless you use the built-in Buttons applet to assign your scripts), you’ll need to create a lnk file with the content like 240#"\Program Files\MortScript\MortScript.exe" "\Windows\Start Menu\Programs\MortScript\Send2.mscr" , where the second string contains the filename and the full path of the original .mscr script file.
For your convenience, I’ve created an archive of all these example files for both MortScript and VJKeyPress. The archive file is HERE. Just assign the scripts or the LNK files to a hardware app button and see how immensely they help users of Windows Mobile devices not having a dialpad at the front!
3.5 Some Opera Mobile / Mini Button Shortcuts
Finally, let me present the list of what functionalities you might want to assign to a hardware button.
Opera Mobile:
1 = Open url
2 = Show window list
3 = home (full up)
5 = Toggle images (needs reload / open new window / URL)
6 = page down
8 = Cycle to next window
0 = help
* = Enter fullscreen | Leave fullscreen
# = Enable mediumscreen mode | Disable mediumscreen mode
Again, note that these are the default shortcuts; you can override them by editing input.ini, as has been explained in some of my past articles.
Opera Mini:
See THIS (incidentally, this chart is highly recommended for Opera Mobile users as well!). Note that it contains info on the first beta of Opera Mini 4; the current OM4 beta 2 also added the shortcut button 1, which brings up a submenu, where you can quickly change between fit to width and full layout modes, reload the page and get page information. It also offers a Link context menu, which allows for opening a given link (you can force it to do this without images) and getting information.
4. Not real (and, therefore, not reviewed) button enhancers (menu apps)
4.1 HotButton Plus 3.0
This is not a button launcher, “only” a commercial ($9.90 with a 14-day unrestricted trial) menu app with quick switching between apps. In this regard, it’s a bit similar to HButton. It also supports quick dialing. Note that it’s PPC Phone Edition (WM Professional) only; with PPC’s, the hacked SMS/Phone DLL’s (see the “Platform compatibility: non-phone PPC” row in the MIDlet Bible chart) don’t work.
5. The chart
It’s HERE. Make sure you check it out – again, don’t forget that a chart like this is worth a hundred thousand words. Make sure you spend some hours on digesting the immense amount of information in the chart, should you want to learn a lot of nice tricks you may have never thought of before – it certainly pays off. Also, don’t forget the chart links in several screenshots (which I haven’t done in this review to, visually, “reduce” the already huge size of it) – you might want to check them out.
6. Related (old, outdated) articles, threads
Review of four button launchers (note that there is another version, but it lacks for example the Passthrough screenshots)
Button Mapping Program for WM2003?
Vito Technology's ButtonMapper Reviewed by PocketNow (original, linked article)
UPDATE (10/21/2007): After publishing the Bible, Spb Pocket Plus 4.0 was released. It has received a brand new and pretty cool button enhancer module as well, along with tons of very nice, other enhancements; for example, a greatly enhanced Internet Explorer plug-in (see THIS for more info). It supports hold mode but no other modes and uses the system-level Button applet; however, it also allows for redefining the OK button (but no softkeys / phone buttons / volume buttons or slider). It offers no goodies like app-specific settings, additional input chars etc. It sports several additional system goodies and provides access to all system settings applets. All in all, while it's certainly not the most feature-packed button enhancer, taking the indeed high-quality and very useful (albeit a bit buggy, but these bugs will surely be ironed out shortly) other modules and features of the suite, I highly recommend it. Again, unless you want advanced button enhancement features only other apps offer.
Note that I’ve added a new column on the app in the chart.
Other news / additions
As opposed to what I've stated, it’s possible to override the Internet Explorer button on the keyboard of the HTC Universal; see THIS. However, it’s not known whether it’s possible to do the same with the also hard-wired Messaging button.
There are some very nice and useful uses of the more advanced button enhancers; for example, passing Page Up / Down. If you’ve ever used water’s SmartSkey (one of my favourite tools), you know it has redefined (in addition to the WM5 softkeys) the volume slider of the Wizard / Universal on the non-Today / non-Phone screen to send Page Up / Down events to the active program. This can be overly useful in programs like Web browsers. To find out whether the tested apps are able to do so, check out the “(Additional) keyboard / D-pad emulation?” and the “Volume buttons / slider redefinable?” rows. The latter show whether the slider / volume buttons can be redefined. Of course, if they can’t be, you can still send PgUp/PgDn events to your apps – just assign them to another (supported and existing) hardware button. Also see THIS for more user reports / opinions on this feature.
I’ve added a new row, “Does it override (ignore to take into account) the global lock setting?” on the behavior when locked. As the vast majority of the button enhancers use their own code to access the buttons, some of them (for example, PQZ) doesn’t adhere to the locked state and will, therefore, execute the assigned app even in locked state, which isn’t necessarily what you want. See for example THIS for more user posts / opinions on this matter.
hey there, i am trying to assign the Left and Right Softkey to an HButton.
But there is no thing like left or right softkey in Hbutton.. can someone say me if it has a alternativ name in Hbutton?
btw im using a htc touch.
thanks. very helpful post. I read a few of your other posts and they all helped me.
thank you for the informative post and keep up the good work!

TUTORIAL: Control issues of Java MIDlets – all secrets of button handling

Lately, with the advent of Opera Mini and the really excellent and highly recommended Gmail MIDlet and some quality games (see their list in the 10/19/2007 update of my 3D MIDlet article), there has been a tremendous increase in the demand for MIDlet-related information. This is certainly shown by the sheer number of MIDlet-related questions asked at XDA-Developers, probably the best, most lively Windows Mobile hardcore user community with the most posts. For example, today, I’ve answered at least 20 different MIDlet-related questions there. Quite a few, isn’t it?
Let me give you all another modest present: in addition to my already-published previews (for example, the 3D Gaming Bible, the 4pda.ru Download Bible etc.), another excerpt – a full chapter – from the forthcoming Bible. Yes, it’s coming and yes, I do try to get it ready tomorrow or the day after – everything, all accompanying screenshots and charts (the main chart; 3D games Compatibility Chart and JBenchmark Chart) are ready, I only need to consolidate all my thoughts into an all-in-one, still-somewhat-comprehensive Bible, which will, I promise, be MUCH better, will contain MUCH more information and MUCH more up-to-date than that of the Russian-only 4pda.ru. Now, look at the length of the 4Pda tutorial (and all the linked-in ones) to see how much information it contains Not very easy to come up with something that has even more info, is it?
Note that the MIDlet managers I refer to in the article can all be found in the main chart of the Bible.
1. Control issues
If you stick to either IBM J9 or TAO Intent (two well-known, established MIDlet managers with versions running even under WM2003(SE)), you’ll inevitably encounter major control problems with several titles. Either the WM5 softkeys or the D-pad won’t work, or none of them. If you, for some reason, stick to these MIDlet managers (also referred to as Kilobyte Virtual Machines, KVM’s), this chapter will be of extreme importance to you. Note that now that all WM5+ devices, Smartphones (Windows Mobile Standard), plain Pocket PC’s (Windows Mobile Classic) and Pocket PC Phone Edition (Windows Mobile Pro) devices alike support the, in general, vastly superior Esmertec and Jblend KVM’s, you should only do this if you really don’t have any chance of running Esmertec’s KVM’s or Jblend – that is, for example, if you have a WM2003 or WM2003SE Pocket PC or Smartphone.
However, even with the, in this regard, flawless Esmertec KVM’s and Jblend, you may still encounter problems with titles (mostly games) not supporting the D-Pad or situations (most importantly, Opera Mini and its modded version) where a MIDlet heavily depends on the hardware buttons. This means the chapter will be useful for non-TAO / J9 users as well.
There are three related (two of them being pretty huge and thorough) articles / tutorials at 4pda.ru explaining these problems and the way you can fix them. They all are linked from the main, first article in the main MIDlet manager thread. In general, they recommend the usage of a Chinese tool JavaMagic, which is supposed to help J9 and/or TAO users run their titles. In addition, the also recommend some always-on-screen numeric keypads to help numeric input and, finally, two other tools as well for MIDlet conversions. We’ll soon see whether JavaMagic is able to help at all and what you should do instead of using on-screen virtual keyboards. In addition, I – a veteran Java programmer and instructor – also explain what the control problems are caused by and why TAO and IBM J9 behave so strangely.
1.1 How it does work behind the curtains & fixing the problems with external hardware button assignment
First, let’s take a look at what problems you will face. This section will contain some references to Java; that is, the language the MIDlets are written in. Note that you can safely skip this section if you don’t know the language. If you do know it, or, at least, have some knowledge of how programming languages work, you might find this section pretty interesting.
A MIDlet, in general, implements the callback method ("function" in the traditional, non-OOP parlance) keyPressed(), which is called back when a button is pressed. This method is passed an integer (numeric) parameter denoting the actual ASCII character (or, with non-character input, scan, denoted by negative numbers) code of the button that has been pressed. If you’ve done any actual programming in any language (or are just computer-savvy), you will certainly recognize the ASCII character code values 48, 49, 50 etc. it typically has: yes, they correspond to the 0, 1 and 2 buttons, respectively (and the list continues).
Most MIDlets don’t directly act on this direct code, but give a call to the getGameAction() (a method in the superclass javax.microedition.lcdui.Canvas) to make the MIDlet manager convert this code to a symbolic constant. This is, in most cases, a much safer way to decide what has happened (what button was pressed). The sole reason for this is the following: D-pad-less phones (and many users) use dialpads (2 for up, 8 for down, 4 for left and 6 for right) instead of D-pads. This, unfortunately, results in different ASCII character / button scancodes returned. Using getGameAction() guarantees that these different codes (for example, except for TAO, the scancode -2 (with TAO, -57378) for the down arrow of the D-pad and the ASCII code 56 for the numeric button on the dialpad) are reported as DOWN events, independent of their original (numeric) value.
There are, unfortunately, some MIDlets that, at least in the menus, don’t adhere to this convention – that is, they don’t give an additional call to getGameAction() but try to directly process the parameter passed to keyPressed(). One example is Andreotti Racing (see "!!!3D_Andretti_ Racing_240x320.jar" in the main game compatibility chart), where the menus MUST be controlled by the dialpad (or numeric hardware keys), NOT the D-pad.
Also note that, regarding the special case of TAO, some games (for example, "!!3D_Micro_Counter_Strike_Beta.jar") might be hard-wired to both, most common D-pad and dialpad codes (again, -2 and 56 for downwards), instead of calling getGameAction(). These games will work just great with most MIDlet managers utilizing; however, TAO, which uses special D-pad scancodes (for example, -57378 for the "down" arrow, as opposed to the standard -2), D-pad-based control won’t work, only that of the (even virtual) dialpad. This is why this particular game can’t be controlled by the D-pad, only the hardware dialpad (or any software button input solution) under TAO, while, under all the other M3G-capable MIDlet managers (Nokia N95, Jblend, Jeodek M3G), you can use the D-pad for steering the car.
Fortunately, there is a very easy solution for all these problems. If you encounter a MIDlet that can only be controlled by (virtual) numeric keys (because, again, the game doesn’t use the additional getGameAction() call to be compatible with as many different KVM’s as possible), you might still add D-pad controllability by just using a button enhancer tool capable of redefining the four D-pad directions (currently, they’re PQzII, AEBPlus and the non-WM5-compliant buttonMax) and either the (slower) MortScript or the faster VJKeyPress to generate the actual keypresses – or, if you go with PQzII, the built-in keypress simulation feature.
This also applies to the great Web browser MIDlets Opera Mini and Opera Mini Mod, which add a lot of (with the Mod version, freely redefinable) shortcut functionality to (numeric) phone buttons. As they are inaccessible on Pocket PC’s without any kind of keyboard and pretty hard to access on phones with a slide-out keyboard (you always need to slide it open to be able to access the numeric row), in these cases, you WILL want to use external tools to simulate the dialpad button press using the hardware application buttons.
You can find extensive information on all this (assigning the simulation of dialpad keypresses to hardware application buttons or D-pad arrows) in the Button Enhancer Bible. Please do make sure you read it very thoroughly. Here, therefore, I don’t spend more time on this question.
1.1.1 On-screen dialpads – are they of any use?
As has already been mentioned, one of the 4pda tutorials (original (volta_john, 26.11.06 10:19:44); Babelfish; Google Translate) recommends installing on-screen dialpads for inputting numerals. I don’t think this is a good idea. First, you’ll need to run significantly smaller MIDlets than the native resolution of your screen so that the active MIDlet area and the always-displayed keyboard don’t overlap. This means you’ll need to stick to (at most) 176*220 MIDlets on your QVGA and QVGA or 352*416 (the hi-res version of Nokia’s traditional 176*208 screen) titles on your VGA Pocket PC’s. And, of course, you won’t be able to run MIDlets that stretch themselves dynamically to fill in the entire screen. This alone would make you forget the entire thing. Second, you’ll need to click on-screen buttons instead of just pressing the D-pad directions – as you otherwise would prefer. A pretty awkward way to control particularly games, isn’t it?
Note that you can avoid having to stick to significantly smaller MIDlets than your screen estate really is if you, as opposed to what the 4Pda tutorial recommends, a numeric input panel (or, if you don't mind the horizontal layout in no way representing a real phonepad) only brought up when necessary. I recommend assigning it to a hardware button (just assign <Input Panel> to a hardware app button in Settings / Buttons; this doesn't even require that you read and understand the Button Enhancer Bible); this will be particularly important with MIDlet managers that, on Pocket PC's, don't dispay the bottom bar and/or the icon to bring up the on-screen input panel any time (not only when a text input field has the focus.)
1.1.2 A full chart of all MIDlet manager scan/character codes & the return values of getGameAction()
I’ve also written a small MIDlet to display what the passed code before and after the getGameAction()-based translation are. As usual, I also provide you with the source of the MIDlet. The deployable JAR file is HERE. It’ll, first, display the numeric, and, then, the symbolic name of the return value of getGameAction(); finally, the original, unprocessed, original keycode. It also makes the system dynamically assign "Exit" to one of the two softkeys; the scancode of the other softkey (and, with Jblend, also the one which results in exiting; this is because of the differences in the callback processing order) will be displayed.
For example, upon pressing "2" on the dialpad, hardware or on-screen keyboard, if you see "1: UP: 50" printed on the screen, this means the following: getGameAction() returned the integer 1, which corresponds to the constant "UP". The original character code (it’s a positive number; therefore, it’s a real ASCII character code) 50 ("2" in ASCII). This is what you will see in all cases, with all MIDlet managers, except IBM J9, where this button, as with all other keypad numeric buttons, are unhandled and, therefore, no matter what numeric dialpad button you press, getGameAction() returns 0 ("Unknown"). Yes, you’ve read this right: the dialpad handling in IBM J9 is severely messed up: IBM J9 can ONLY be controlled via the D-pad, unlike with all the other MIDlet managers.
If you press the button 1, "0: Unknown: 49" means getGameAction() returned 0, which corresponds to the unhandled (unknown) case and the original character ASCII code was 49. This is the case with all MIDlet managers except Esmertec’s managers and Jblend, which assign one of the four gaming buttons, GAME_A, to the first dialpad button.
If you press the up direction on your D-pad, you’ll see the following with all MIDlet managers except TAO (the latter uses special scancodes):
"1: UP: -1"
This means getGameAction() returns 1, which, as we’ve already seen, corresponds to the "UP" symbolic constant. Finally, the scancode (it’s negative so it’s not a "real" character code) of the given D-pad direction is -1.
As has already been stated, TAO is behaving differently in this case (too); it’ll return
"1: UP: -57377"
instead. This, as has already been pointed out, is caused by TAO’s using entirely different scancodes than all the other MIDlet managers. Fortunately, this is correctly translated by getGameAction(). Still, if you try to play a game (for example, the already-mentioned Micro Counter Strike 3D Beta) that doesn’t give a call to getGameAction() but directly parses the actual argument of the keyboard handler (for "up", the ASCII code (50) of the dialpad 2 and/or the D-pad "up" scancode -1), it will most likely not work under TAO.
Note that the chart below, which shows how the different Windows Mobile (and, in addition, as a well-implemented, high-quality reference, the MIDlet manager coming with the Nokia’s current top-of-the-line, flagship model, the N95 and its newer versions like the N95-3 and the N95 8GB) MIDlet managers fare in this respect. Now, based on all explanations above, you’ll be able to understand what this all means.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
1.2 Strictly softkey issues & JavaMagic results
OK, now, from the D-pad and dialpad-related questions, let’s move on to the question of the WM5 softkeys. As you’ve probably realized if you’ve ever tried to deploy MIDlets under TAO, the right/left softkeys simply won’t work with most of them.
Note that the 4pda.ru folks state the TAO 11.x series, finally, fixed at least the softkey problems (as opposed to the 10.1 series); in this regard, I don’t think they are right.) Unfortunately, this is impossible to fix using the same method as above - that is, just assigning a scancode generator to the two soft buttons with a softkey-assignment-capable button enhancer or, if you don’t necessarily want them to be assigned to hardware softkeys, with any button enhancer – and even the built-in Buttons settings applet. The sole reason for this is that MortScript is only able to pass positive "scancodes" (that is, real characters) and the other two solutions, namely, PQzII and VJKeyPress, aren’t able to pass these particular scancodes either.
Unfortunately, these softkeys,
with several MIDlet managers (namely, the one coming with the Nokia N95, IBM J9, later – non-M3G-enabled – Esmertec Jeodek versions and TAO running on Pocket PC’s (but not on Smartphones)) don’t cause a callback to keyPressed() and,
in the rest of the MIDlet managers (that is, the ones where keyPressed() is called back) getGameAction() returns zero ("Unknown") upon trying to identifying them,
unlike with "traditional" direction, action and/or fire buttons where getGameAction() is the preferred way to see what really has happened and to guarantee compatibility with as many different MIDlet managers as possible. This all means MIDlets themselves must deal with direct scancodes and there're no helper methods (no getGameAction()-alikes) to guarantee cross-KVM compliance. As these codes are pretty much standardized, they have no problems with the Nokia / Esmertec / Jblend ones; this is why they do work. TAO, on the other hand, is, again, an exception, as it uses vastly different scancodes than any else MIDlet manager. This is why the softkeys of the vast majority of MIDlets, unless they have specifically been developed keeping TAO compliance in mind (the case with high-quality business / productivity apps like Opera Mini, the Gmail MIDlet etc.), will NOT work under TAO.
1.2.1 JavaMagic – is it really any good?
The related 4PDA.ru tutorial ((volta_john's post at 23.05.07 08:25:07) ; Babelfish; Google Translate) recommends the use of JavaMagic to fix this problem.
I’ve thoroughly tested JavaMagic with several games running on TAO with TAO unable to handle their softkeys (see their list in the main game compatibility chart). As it has turned out, in no configuration did TAO Intent become compatible with these titles. It was only in one case that the Action button became usable after the translation (TAO Intent uses a different keycode – it passes the ASCII code 13 instead of the industry-standard -5 scancode). In no other cases did any of the keys, let alone the softkeys become usable. Again, these tests were VERY thorough and, in most cases, I’ve tried to make the MIDlets compatible with TAO Intent with at least two (Nokia and Sony-Ericsson source compatibility mode) input configurations. The output configuration, of course, was that of TAO.
Because of these very bad results, I don’t think you should waste any time with JavaMagic. It simply won’t work. This is why I don’t present you any tutorial for JavaMagic either. Even if you don’t know Russian, you’ll be able to follow the really thorough tutorial in the above-linked post, particularly now that I’ve provided you with two different "translations". But, again, it’s highly unlikely it’ll work with you.
Following is the chart of my JavaMagic tests:
Note that there are two other MIDlet conversion suites, Motomidman and FullJava, explained HERE (rendor, 30.10.06 00:35:31) (Babelfish; Google Translate). They, however, seem to help even less than JavaMagic.
1.3 Summary
In this chapter, I’ve given you a detailed description of why
the left/right softkeys of the vast majority of MIDlets refuse to work under TAO Intent and the fact that this can't be helped
there are MIDlets that can only be controlled with dialpads but NOT D-pads in all KVM's
there are MIDlets not controllable with anything, not even dialpads, under J9 (again, J9’s getGameAction() returns "Unknown" for all dialpad buttons – a very bad KVM implementation in this respect)
why some MIDlets don’t support the D-pad under TAO, while they do support it under all the alternative KVM’s
To fix all these problems (except for the softkey problems of TAO Intent, which, based on my tests, do seem to be unfixable), I’ve also explained you’ll need external button enhancer and/or ASCII and/or keycode "injectors", as opposed to what, so far, has been recommended (that is, on-screen keyboards / dialpads).
UPDATE (10/28/2007): XDA-Developers forum member artlan has posted an excellent, additional tutorial on some manual hacking. Well worth the reading!

TUTORIAL: Control issues of Java MIDlets – all secrets of button handling

Lately, with the advent of Opera Mini and the really excellent and highly recommended Gmail MIDlet and some quality games (see their list in the 10/19/2007 update of my 3D MIDlet article), there has been a tremendous increase in the demand for MIDlet-related information. This is certainly shown by the sheer number of MIDlet-related questions asked at XDA-Developers, probably the best, most lively Windows Mobile hardcore user community with the most posts. For example, today, I’ve answered at least 20 different MIDlet-related questions there. Quite a few, isn’t it?
Let me give you all another modest present: in addition to my already-published previews (for example, the 3D Gaming Bible, the 4pda.ru Download Bible etc.), another excerpt – a full chapter – from the forthcoming Bible. Yes, it’s coming and yes, I do try to get it ready tomorrow or the day after – everything, all accompanying screenshots and charts (the main chart; 3D games Compatibility Chart and JBenchmark Chart) are ready, I only need to consolidate all my thoughts into an all-in-one, still-somewhat-comprehensive Bible, which will, I promise, be MUCH better, will contain MUCH more information and MUCH more up-to-date than that of the Russian-only 4pda.ru. Now, look at the length of the 4Pda tutorial (and all the linked-in ones) to see how much information it contains Not very easy to come up with something that has even more info, is it?
Note that the MIDlet managers I refer to in the article can all be found in the main chart of the Bible.
1. Control issues
If you stick to either IBM J9 or TAO Intent (two well-known, established MIDlet managers with versions running even under WM2003(SE)), you’ll inevitably encounter major control problems with several titles. Either the WM5 softkeys or the D-pad won’t work, or none of them. If you, for some reason, stick to these MIDlet managers (also referred to as Kilobyte Virtual Machines, KVM’s), this chapter will be of extreme importance to you. Note that now that all WM5+ devices, Smartphones (Windows Mobile Standard), plain Pocket PC’s (Windows Mobile Classic) and Pocket PC Phone Edition (Windows Mobile Pro) devices alike support the, in general, vastly superior Esmertec and Jblend KVM’s, you should only do this if you really don’t have any chance of running Esmertec’s KVM’s or Jblend – that is, for example, if you have a WM2003 or WM2003SE Pocket PC or Smartphone.
However, even with the, in this regard, flawless Esmertec KVM’s and Jblend, you may still encounter problems with titles (mostly games) not supporting the D-Pad or situations (most importantly, Opera Mini and its modded version) where a MIDlet heavily depends on the hardware buttons. This means the chapter will be useful for non-TAO / J9 users as well.
There are three related (two of them being pretty huge and thorough) articles / tutorials at 4pda.ru explaining these problems and the way you can fix them. They all are linked from the main, first article in the main MIDlet manager thread. In general, they recommend the usage of a Chinese tool JavaMagic, which is supposed to help J9 and/or TAO users run their titles. In addition, the also recommend some always-on-screen numeric keypads to help numeric input and, finally, two other tools as well for MIDlet conversions. We’ll soon see whether JavaMagic is able to help at all and what you should do instead of using on-screen virtual keyboards. In addition, I – a veteran Java programmer and instructor – also explain what the control problems are caused by and why TAO and IBM J9 behave so strangely.
1.1 How it does work behind the curtains & fixing the problems with external hardware button assignment
First, let’s take a look at what problems you will face. This section will contain some references to Java; that is, the language the MIDlets are written in. Note that you can safely skip this section if you don’t know the language. If you do know it, or, at least, have some knowledge of how programming languages work, you might find this section pretty interesting.
A MIDlet, in general, implements the callback method ("function" in the traditional, non-OOP parlance) keyPressed(), which is called back when a button is pressed. This method is passed an integer (numeric) parameter denoting the actual ASCII character (or, with non-character input, scan, denoted by negative numbers) code of the button that has been pressed. If you’ve done any actual programming in any language (or are just computer-savvy), you will certainly recognize the ASCII character code values 48, 49, 50 etc. it typically has: yes, they correspond to the 0, 1 and 2 buttons, respectively (and the list continues).
Most MIDlets don’t directly act on this direct code, but give a call to the getGameAction() (a method in the superclass javax.microedition.lcdui.Canvas) to make the MIDlet manager convert this code to a symbolic constant. This is, in most cases, a much safer way to decide what has happened (what button was pressed). The sole reason for this is the following: D-pad-less phones (and many users) use dialpads (2 for up, 8 for down, 4 for left and 6 for right) instead of D-pads. This, unfortunately, results in different ASCII character / button scancodes returned. Using getGameAction() guarantees that these different codes (for example, except for TAO, the scancode -2 (with TAO, -57378) for the down arrow of the D-pad and the ASCII code 56 for the numeric button on the dialpad) are reported as DOWN events, independent of their original (numeric) value.
There are, unfortunately, some MIDlets that, at least in the menus, don’t adhere to this convention – that is, they don’t give an additional call to getGameAction() but try to directly process the parameter passed to keyPressed(). One example is Andreotti Racing (see "!!!3D_Andretti_ Racing_240x320.jar" in the main game compatibility chart), where the menus MUST be controlled by the dialpad (or numeric hardware keys), NOT the D-pad.
Also note that, regarding the special case of TAO, some games (for example, "!!3D_Micro_Counter_Strike_Beta.jar") might be hard-wired to both, most common D-pad and dialpad codes (again, -2 and 56 for downwards), instead of calling getGameAction(). These games will work just great with most MIDlet managers utilizing; however, TAO, which uses special D-pad scancodes (for example, -57378 for the "down" arrow, as opposed to the standard -2), D-pad-based control won’t work, only that of the (even virtual) dialpad. This is why this particular game can’t be controlled by the D-pad, only the hardware dialpad (or any software button input solution) under TAO, while, under all the other M3G-capable MIDlet managers (Nokia N95, Jblend, Jeodek M3G), you can use the D-pad for steering the car.
Fortunately, there is a very easy solution for all these problems. If you encounter a MIDlet that can only be controlled by (virtual) numeric keys (because, again, the game doesn’t use the additional getGameAction() call to be compatible with as many different KVM’s as possible), you might still add D-pad controllability by just using a button enhancer tool capable of redefining the four D-pad directions (currently, they’re PQzII, AEBPlus and the non-WM5-compliant buttonMax) and either the (slower) MortScript or the faster VJKeyPress to generate the actual keypresses – or, if you go with PQzII, the built-in keypress simulation feature.
This also applies to the great Web browser MIDlets Opera Mini and Opera Mini Mod, which add a lot of (with the Mod version, freely redefinable) shortcut functionality to (numeric) phone buttons. As they are inaccessible on Pocket PC’s without any kind of keyboard and pretty hard to access on phones with a slide-out keyboard (you always need to slide it open to be able to access the numeric row), in these cases, you WILL want to use external tools to simulate the dialpad button press using the hardware application buttons.
You can find extensive information on all this (assigning the simulation of dialpad keypresses to hardware application buttons or D-pad arrows) in the Button Enhancer Bible. Please do make sure you read it very thoroughly. Here, therefore, I don’t spend more time on this question.
1.1.1 On-screen dialpads – are they of any use?
As has already been mentioned, one of the 4pda tutorials (original (volta_john, 26.11.06 10:19:44); Babelfish; Google Translate) recommends installing on-screen dialpads for inputting numerals. I don’t think this is a good idea. First, you’ll need to run significantly smaller MIDlets than the native resolution of your screen so that the active MIDlet area and the always-displayed keyboard don’t overlap. This means you’ll need to stick to (at most) 176*220 MIDlets on your QVGA and QVGA or 352*416 (the hi-res version of Nokia’s traditional 176*208 screen) titles on your VGA Pocket PC’s. And, of course, you won’t be able to run MIDlets that stretch themselves dynamically to fill in the entire screen. This alone would make you forget the entire thing. Second, you’ll need to click on-screen buttons instead of just pressing the D-pad directions – as you otherwise would prefer. A pretty awkward way to control particularly games, isn’t it?
Note that you can avoid having to stick to significantly smaller MIDlets than your screen estate really is if you, as opposed to what the 4Pda tutorial recommends, a numeric input panel (or, if you don't mind the horizontal layout in no way representing a real phonepad) only brought up when necessary. I recommend assigning it to a hardware button (just assign <Input Panel> to a hardware app button in Settings / Buttons; this doesn't even require that you read and understand the Button Enhancer Bible); this will be particularly important with MIDlet managers that, on Pocket PC's, don't dispay the bottom bar and/or the icon to bring up the on-screen input panel any time (not only when a text input field has the focus.)
1.1.2 A full chart of all MIDlet manager scan/character codes & the return values of getGameAction()
I’ve also written a small MIDlet to display what the passed code before and after the getGameAction()-based translation are. As usual, I also provide you with the source of the MIDlet. The deployable JAR file is HERE. It’ll, first, display the numeric, and, then, the symbolic name of the return value of getGameAction(); finally, the original, unprocessed, original keycode. It also makes the system dynamically assign "Exit" to one of the two softkeys; the scancode of the other softkey (and, with Jblend, also the one which results in exiting; this is because of the differences in the callback processing order) will be displayed.
For example, upon pressing "2" on the dialpad, hardware or on-screen keyboard, if you see "1: UP: 50" printed on the screen, this means the following: getGameAction() returned the integer 1, which corresponds to the constant "UP". The original character code (it’s a positive number; therefore, it’s a real ASCII character code) 50 ("2" in ASCII). This is what you will see in all cases, with all MIDlet managers, except IBM J9, where this button, as with all other keypad numeric buttons, are unhandled and, therefore, no matter what numeric dialpad button you press, getGameAction() returns 0 ("Unknown"). Yes, you’ve read this right: the dialpad handling in IBM J9 is severely messed up: IBM J9 can ONLY be controlled via the D-pad, unlike with all the other MIDlet managers.
If you press the button 1, "0: Unknown: 49" means getGameAction() returned 0, which corresponds to the unhandled (unknown) case and the original character ASCII code was 49. This is the case with all MIDlet managers except Esmertec’s managers and Jblend, which assign one of the four gaming buttons, GAME_A, to the first dialpad button.
If you press the up direction on your D-pad, you’ll see the following with all MIDlet managers except TAO (the latter uses special scancodes):
"1: UP: -1"
This means getGameAction() returns 1, which, as we’ve already seen, corresponds to the "UP" symbolic constant. Finally, the scancode (it’s negative so it’s not a "real" character code) of the given D-pad direction is -1.
As has already been stated, TAO is behaving differently in this case (too); it’ll return
"1: UP: -57377"
instead. This, as has already been pointed out, is caused by TAO’s using entirely different scancodes than all the other MIDlet managers. Fortunately, this is correctly translated by getGameAction(). Still, if you try to play a game (for example, the already-mentioned Micro Counter Strike 3D Beta) that doesn’t give a call to getGameAction() but directly parses the actual argument of the keyboard handler (for "up", the ASCII code (50) of the dialpad 2 and/or the D-pad "up" scancode -1), it will most likely not work under TAO.
Note that the chart below, which shows how the different Windows Mobile (and, in addition, as a well-implemented, high-quality reference, the MIDlet manager coming with the Nokia’s current top-of-the-line, flagship model, the N95 and its newer versions like the N95-3 and the N95 8GB) MIDlet managers fare in this respect. Now, based on all explanations above, you’ll be able to understand what this all means.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
1.2 Strictly softkey issues & JavaMagic results
OK, now, from the D-pad and dialpad-related questions, let’s move on to the question of the WM5 softkeys. As you’ve probably realized if you’ve ever tried to deploy MIDlets under TAO, the right/left softkeys simply won’t work with most of them.
Note that the 4pda.ru folks state the TAO 11.x series, finally, fixed at least the softkey problems (as opposed to the 10.1 series); in this regard, I don’t think they are right.) Unfortunately, this is impossible to fix using the same method as above - that is, just assigning a scancode generator to the two soft buttons with a softkey-assignment-capable button enhancer or, if you don’t necessarily want them to be assigned to hardware softkeys, with any button enhancer – and even the built-in Buttons settings applet. The sole reason for this is that MortScript is only able to pass positive "scancodes" (that is, real characters) and the other two solutions, namely, PQzII and VJKeyPress, aren’t able to pass these particular scancodes either.
Unfortunately, these softkeys,
with several MIDlet managers (namely, the one coming with the Nokia N95, IBM J9, later – non-M3G-enabled – Esmertec Jeodek versions and TAO running on Pocket PC’s (but not on Smartphones)) don’t cause a callback to keyPressed() and,
in the rest of the MIDlet managers (that is, the ones where keyPressed() is called back) getGameAction() returns zero ("Unknown") upon trying to identifying them,
unlike with "traditional" direction, action and/or fire buttons where getGameAction() is the preferred way to see what really has happened and to guarantee compatibility with as many different MIDlet managers as possible. This all means MIDlets themselves must deal with direct scancodes and there're no helper methods (no getGameAction()-alikes) to guarantee cross-KVM compliance. As these codes are pretty much standardized, they have no problems with the Nokia / Esmertec / Jblend ones; this is why they do work. TAO, on the other hand, is, again, an exception, as it uses vastly different scancodes than any else MIDlet manager. This is why the softkeys of the vast majority of MIDlets, unless they have specifically been developed keeping TAO compliance in mind (the case with high-quality business / productivity apps like Opera Mini, the Gmail MIDlet etc.), will NOT work under TAO.
1.2.1 JavaMagic – is it really any good?
The related 4PDA.ru tutorial ((volta_john's post at 23.05.07 08:25:07) ; Babelfish; Google Translate) recommends the use of JavaMagic to fix this problem.
I’ve thoroughly tested JavaMagic with several games running on TAO with TAO unable to handle their softkeys (see their list in the main game compatibility chart). As it has turned out, in no configuration did TAO Intent become compatible with these titles. It was only in one case that the Action button became usable after the translation (TAO Intent uses a different keycode – it passes the ASCII code 13 instead of the industry-standard -5 scancode). In no other cases did any of the keys, let alone the softkeys become usable. Again, these tests were VERY thorough and, in most cases, I’ve tried to make the MIDlets compatible with TAO Intent with at least two (Nokia and Sony-Ericsson source compatibility mode) input configurations. The output configuration, of course, was that of TAO.
Because of these very bad results, I don’t think you should waste any time with JavaMagic. It simply won’t work. This is why I don’t present you any tutorial for JavaMagic either. Even if you don’t know Russian, you’ll be able to follow the really thorough tutorial in the above-linked post, particularly now that I’ve provided you with two different "translations". But, again, it’s highly unlikely it’ll work with you.
Following is the chart of my JavaMagic tests:
Note that there are two other MIDlet conversion suites, Motomidman and FullJava, explained HERE (rendor, 30.10.06 00:35:31) (Babelfish; Google Translate). They, however, seem to help even less than JavaMagic.
1.3 Summary
In this chapter, I’ve given you a detailed description of why
the left/right softkeys of the vast majority of MIDlets refuse to work under TAO Intent and the fact that this can't be helped
there are MIDlets that can only be controlled with dialpads but NOT D-pads in all KVM's
there are MIDlets not controllable with anything, not even dialpads, under J9 (again, J9’s getGameAction() returns "Unknown" for all dialpad buttons – a very bad KVM implementation in this respect)
why some MIDlets don’t support the D-pad under TAO, while they do support it under all the alternative KVM’s
To fix all these problems (except for the softkey problems of TAO Intent, which, based on my tests, do seem to be unfixable), I’ve also explained you’ll need external button enhancer and/or ASCII and/or keycode "injectors", as opposed to what, so far, has been recommended (that is, on-screen keyboards / dialpads).
UPDATE (10/28/2007): XDA-Developers forum member artlan has posted an excellent, additional tutorial on some manual hacking. Well worth the reading!

Categories

Resources