Click here to Skip to main content
15,886,137 members
Articles / Mobile Apps / Windows Mobile

Windows Mobile: Kiosk Mode Series - Part 2

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
11 Jun 2012CPOL3 min read 10.3K   2   2
Windows Mobile: Kiosk Mode Series - Part 2

In the first part of this series, I showed how to make your compact framework application full screen or remove the Start icon from the menu bar. Now, we will take a look at the task bar.

The task bar is at the top of your screen (except for fullscreen applications) and shows valuable information like the connection status, battery status or the current time.

Not Full Screen, Taskbar Not Locked

This is a kiosk mode risk. The user is able to click the symbols in the taskbar and gets a popup menu with some icons. These icons enable the user to change connection settings, power management settings and others. You probably do not want to allow the user to make changes to some or all of the possible changes.

Image 1

For example, clicking on the phone or signal strength icon will bring up this dialog:

Image 2

The user can then change connection settings and activate or deactivate radios. Possibly a source for a bunch of support calls, if the user accidentally changes connection settings.

Full Screen, No Taskbar

You can make your application fullscreen and all this status information is no more visible to the user. You should then provide the user with your own set of status information.

Image 3

Do not leave the user in an unknown state. He/she should at least know the battery and connection status.

Not Full Screen, Taskbar Locked

The simplest way to show the user status information but disallow any changes is to show the taskbar but in a disabled state.

The attached class FullScreen has a simple function to lock or unlock the taskbar:

C#
public bool enableTaskbar(bool bEnable)
{
    bool bRet = false;
    IntPtr hTaskbar = FindWindow("HHTaskBar", String.Empty);
    if (hTaskbar != IntPtr.Zero)
        bRet = EnableWindow(hTaskbar, bEnable);
    return bRet;
}

The demo application can be used to test the function:

Image 4

If “Lock Taskbar” is checked, a user cannot invoke the popup menu and will only hear a beep, when the taskbar is clicked. Disabling the taskbar is the simplest way to keep the user from using the taskbar.

Not Full Screen, Taskbar Not Locked, Using Custom Settings Applications

If one clicks any of the icons in the popup menu, Windows Mobile launches a defined application with a command line argument. The assignments are defined in the registry of the device. You can leave the taskbar enabled and present the user your custom status applications.

I call the popup menu of the taskbar also “titlebar pulldownlist”. In the class CustomTitleBar, I have implemented a function that replaces the Windows mobile handler application for an icon. For example, you can replace the handler application for the dataconnection icon (the most left near the Zoom icon) by setting the registry value
:TASKBAR_DATACONNECTION in key “HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Rai” to your own, custom, application.

HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Rai
    :TASKBAR_DATACONNECTION
        "0"="OEM_DataConnection"
        "1"="\windows\OEMTitleBarHandler.exe /DataConnection"
    :TASKBAR_RADIOSIGNAL
    :TASKBAR_VOLUME
    :TASKBAR_BATTERY
    :TASKBAR_CLOCK

See also MSDN.

Image 5

The below code snippet shows how to use the class to set a custom handler application.

C#
public static bool setCustomHandler(titleBarEvents titleName)
{
    string regName = ":" + titleName.ToString();
    string sKey = sSubKey + @"\" + regName;
    bool bRet = true;
    try
    {
        RegistryKey regKey = Registry.LocalMachine.OpenSubKey(sKey, true);
        if (regKey == null)
        {
            regKey = Registry.LocalMachine.CreateSubKey(sKey);
        }
        regKey.SetValue("0", "OEM_DataConnection", RegistryValueKind.String);
        regKey.SetValue("1", @"\windows\OEMTitleBarHandler.exe" + 
        " /" + titleName, RegistryValueKind.String);
        regKey.Flush();

        regKey.Close();
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Exception in setCustomHandler(): " + ex.Message);
        bRet = false;
    }
    return bRet;
}

The class is simple to use. After the custom handler is installed (no reboot required), you will get your custom app shown, if you click the dataconnection (or other) icon.

Image 6

C#
private void mnuSet_Click(object sender, EventArgs e)
{
    textBox1.Text = "";
    if(CustomTitleBar.setCustomHandler(CustomTitleBar.titleBarEvents.TASKBAR_DATACONNECTION))
        addText("setCustomHandler = OK");
    else
        addText("setCustomHandler = Failed");
    dumpSettings();
}

Image 7

At the top of the window of the demo app, you can read:

/TASKBAR_DATACONNNECTION

This is the command line argument passed to the titlebar handler application.

With the class CustomTitleBar, you can set, get and reset the handler applications.

Downloads

Full source with demo app available at code.google.com/p/weh653kiosmodes/source/checkout (you need a subversion client like TortoiseSVN or the VisualStudio AddOn AnkhSVN)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionSource Pin
JLandon29612-Aug-15 12:17
JLandon29612-Aug-15 12:17 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.