Archive for the ‘Programming’ Category.
March 10, 2011, 15:31
Here is a simple application to connect to a serial port. The idea is based on the need of having an application to send demo print files to a virtual comm port connected to a bluetooth printer.
Update 16. March 2011: Added dialog to connect to BT printer by BT Address on Intermec devices. New source and binary at code.google.com.
Update 21. March 2011: Splitted source code and providing three different flavours:
CommAppCFSerial does serial comm only.
CommAppCFbtSearch provides BT connect (Intermec Devices only) and BT discovery
CommAppCF itself is a unstable working release
see code.google.com/p/win-mobile-code … Executables are in bin subdirs.
You can enter and send texts to or send a whole file to the port. Additionally you are able to send ASCII codes by using \xAB syntax, where AB is the hex code of the byte you would like to send.
There is nothing special with the code except the hex decoding/encoding and the possibility to send a file.

Continue reading ‘Mobile Development – Simple serial communication application’ »
March 8, 2011, 15:21
If you are running a kiosk mode app but need to provide the camercapture dialog on Windows Mobile 5 or later, you may need to disable the one or other click in the CameraCapture dialog.
This article uses a technique known as subclassing as already used and decribed in my StartButtonHookWM65 article. For the CameraCapture dialog the code has been revised and you can now subclass any known window class and disable clicks within the Windows Mobile menu bar.
private string _winClassName = "HHTaskbar";
public string winClassName
{
get { return _winClassName; }
set {
if (this.oldWndProc == IntPtr.Zero) //only allow change before subclassing
_winClassName = value;
}
}
...
/// <summary>
/// SubClassing: Install the wndproc hook
/// </summary>
/// <returns></returns>
private bool hookWindow()
{
//find the window to hook
IntPtr hWndHooked = FindWindow(_winClassName, IntPtr.Zero);
if (hWndHooked == IntPtr.Zero)
return false;
//enable the taskbar, not realy necessary
EnableWindow(hWndHooked, true);
//already installed?
if (oldWndProc == IntPtr.Zero)
{
//find the menu_worker window
IntPtr hwndMenu_Worker = FindWindow("menu_worker", IntPtr.Zero);
if (hwndMenu_Worker != IntPtr.Zero)
{
//get the child window which has the buttons on it
IntPtr hwndToolbar = GetWindow(hwndMenu_Worker, GetWindow_Cmd.GW_CHILD);
if (hwndToolbar != IntPtr.Zero)
{
_mHwnd = hwndToolbar; //store to remember
SubclassHWnd(hwndToolbar); //subclass the wndproc
}
}
}
return true;
}
As the call to CameraCaptureDialog will block and you can not subclass it before it is launched, I use a timer that will subclass the dialog assuming it will show after the call to .ShowDialog().
private System.Windows.Forms.Timer timer;
hwndutils subClassUtils;
private void ShowCamera()
{
CameraCaptureDialog cdlg = new CameraCaptureDialog();
cdlg.DefaultFileName="picture.jpg";
cdlg.InitialDirectory = "\\My Documents";
cdlg.Mode = CameraCaptureMode.Still;
cdlg.Owner = this.pictureBox1;
cdlg.StillQuality = CameraCaptureStillQuality.High;
cdlg.Title = "Take a picture and Select";
cdlg.Resolution = new Size(240, 320);
cdlg.VideoTypes = CameraCaptureVideoTypes.All;
//subclass main window with delay
subClassUtils = new hwndutils();
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = true;
DialogResult dRes = cdlg.ShowDialog();
...
void timer_Tick(object sender, EventArgs e)
{
subClassUtils.winClassName = "Camera View";
subClassUtils.CloseButtonDisabled = true;
System.Threading.Thread.Sleep(500);
if(subClassUtils.CloseButtonDisabled)
timer.Enabled = false;
}
In the line “subClassUtils.CloseButtonDisabled = true;” the subclassing (or the hook) will be activated and clicks on (OK) will not be accepted.

Code subclassing.cs download: [Download not found]
March 5, 2011, 18:35
Although I dont recommend this, it may be usefull if your kiosk mode app watches and manages the battery level: you can disable the low battery warning. Sometimes such hacks are hard to find, now there is one more location in internet.
In the registry find the key
[HKEY_CURRENT_USER\ControlPanel\Notifications\{A877D663-239C-47a7-9304-0D347F580408}]
This is the entry responsible for low battery warnings
Add a new REG_SZ key: “Default” with for example the text “Low Battery Warning”
"Default"="Low Battery Warning"
This entry is used to display the notification in the list of notifications in Start-Settings-Sounds&Notifications. To disable the notification itself it is not really necessary, but easier to control.
The Options entry in the registry defines which options your selected in Start-Settings-Sounds&Notifications, for example play a sound or display a user notification. Set Options to REG_DWORD=0x00 and there will be no notification when the battery goes down to 10% (depends on the device) and lower.
Here is the change in full:
REGEDIT4
[HKEY_CURRENT_USER\ControlPanel\Notifications\{A877D663-239C-47a7-9304-0D347F580408}]
"Options"=dword:00000000
"Default"="LowBattWarning"
You need to reboot the device after the change!
Only a small tipp
March 1, 2011, 23:23
Are you looking for a tool that periodically pings a list of hosts? Here is a toolset that will reschedule a ping utilitiy. This ping utility pings a list of hosts and will create notifications if one or most hosts failed to answer.
I have done this toolset with three separate applications. The scheduler and the notification tool are written in C/C++ win32 API cause this API provided the best access to all the possibilities of the used functions. The user notification API is only supported with basic functionality by CF2. The CEUserNotification API is not supported by CF2 at all.
Although OpenNetCF provides an C# interface to the used APIs, I did not like to include all the unneeded stuff. On the other hand the scheduler is fast and small written in C/C++. With C# I had problems with the notification, especially for removing existing notifications and why should the main tool reside in memory just for showing the notification.
The ping tool is written in C# targeting Compact Framework 2. C# was the easiest to implement the GUI.
All source is available thru one Visual Studio 2008 solution. Yes, you can mix C/C++ and CF2 within one solution.



Continue reading ‘Mobile Development-PingAlert: watch your servers’ »