[General Topics] Menneisyys:
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.