Windows CE General

A collection of general posts about Windows CE
Windows CE: Changing Static IP Address
A customer contacted me recently and asked me how to change a static IP address at runtime. Of course this is not something that I know how to do, but with a little bit of research I figure out how to do it. It turns out that the challenge is to request that the adapter update itself with the new IP Address. Otherwise, the change in IP address is a matter of changing the address in the registry for the adapter. The registry entry is something like: [HKEY_LOCAL_MACHINE\Comm\LA... "EnableDHCP"=dword:0 ......

Posted On Wednesday, October 24, 2012 9:00 PM | Comments (1)

Windows CE: C# Application to Format TFAT
Windows CE: C# Application to Format TFAT In Windows CE: Formatting TFAT I show how to format a disk with TFAT using C/C++ code. The customer that I wrote that for develops using C#, so I wrote a C# application to test the formatting code. To me, most formatting tools are just too difficult for the average user. In this case, the user will be someone working in the factory or field service. They just need to select a disk and request that it be formatted. The application dialog look like: It has ......

Posted On Monday, August 30, 2010 10:34 PM | Comments (3)

Windows CE: Formatting TFAT
A customer came to me for assistance in formatting an SD card with TFAT. I did a quick look in the control panel code to find how it formats disks as TFAT and told the customer to use FormatVolume() and set the FORMAT_OPTIONS dwFlags FATUTIL_FORMAT_TFAT flag. I assumed that it was that easy and left the customer to write the code. A few weeks later the customer came back to me and said that they just couldn’t get FormatVolume() to work, let alone format the disk as TFAT. So this time I dug deeper ......

Posted On Sunday, August 29, 2010 10:42 PM | Comments (7)

Windows CE: Disable the Taskbar for Full Screen Applications
In the article Windows CE: Setting an Application to Display Full Screen in C/C++ I discussed how to show an application full screen using C++. I discussed that for a kiosk application that the easiest way to disable the Explorer shell taskbar is to simply not have the Explorer shell launch when the system starts up. But there are cases where having the Explorer shell run underneath the kiosk app has value in some cases. The trouble is that the taskbar will still respond to special keys like the ......

Posted On Sunday, August 15, 2010 10:59 PM | Comments (0)

Windows CE: Setting an Application to Display Full Screen in C/C++
Many, maybe even most, Windows CE devices are single purpose devices that have an application that fills the entire screen. So of course setting the application to entirely fill the display is important. In this article we will explore setting an application to display full screen using C/C++. My plan is to create a simple application that fills the screen with white and displays two buttons, exit and explore. Those may be odd buttons for a kiosk application, but they will come in handy while working ......

Posted On Friday, August 6, 2010 10:47 PM | Comments (0)

Windows CE: Launching an Application when a Network Connects
I was working on a headless system recently and wanted to run cemgrc.exe when a network connection was made. That inspired me to write a little application to do it. I decided to make the application flexible, so I added a few requirements; be able to run from HKEY_LOCAL_MACHINE\Init, and read the application name and command line from the registry. Working backward, I wrote a function to read the registry to get the application name and command line and then start the application using CreateProcess(). ......

Posted On Thursday, August 5, 2010 9:07 PM | Comments (0)

Windows CE: Killing an Application
In Windows CE: Using ToolHelpAPI to list running processes, I showed how to use the ToolHelpAPI to get a list of running processes or applications. Someone recently asked in one of the newsgroups how to kill an application. The question included code using ToolHelpAPI to find a process, but the code had some problems. ToolHelpAPI does provide information about the processes, but the function for killing a process, TerminateProcess(), needs a HANDLE to the process. OpenProcess() can be used to get ......

Posted On Monday, December 14, 2009 1:30 PM | Comments (3)

Windows CE: Using RAPI to Run Applications (Part 3)
The CERunApp application can be downloaded from: Download CERunApp.exe The CERunApp source code can be downloaded from: Download CERunApp source code In Windows CE: Using RAPI to Run Applications (Part 1) and Windows CE: Using RAPI to Run Applications (Part 2) I wrote about using RAPI remotely start applications on a Windows CE device from a workstation. In Windows CE: Using RAPI to Run Applications (Part 2) I presented an application, CERunApp.exe, that downloads an application from the workstation ......

Posted On Thursday, December 10, 2009 3:06 PM | Comments (1)

Windows CE: Using RAPI to Run Applications (Part 2)
The CERunApp application can be downloaded from: Download CERunApp.exe Note: in Part 3 I have included an updated version of this exe The CERunApp source code can be downloaded from: Download CERunApp source code Note: in Part 3 I have included an updated version of the source code In Windows CE: Using RAPI to Run Applications (Part 1) I wrote about starting this project to create a copy of the Windows Mobile Developer Power Toys application RAPIStart. In this article I will continue by creating ......

Posted On Friday, October 30, 2009 3:24 PM | Comments (4)

Windows CE: Using RAPI to Run Applications (Part 1)
A few months ago I downloaded the Windows Mobile Developer Power Toys (Download details: Windows Mobile Developer Power Toys) because I had a need for CERDISP, the Windows CE Remote Display tool. At that time, I looked around at the other tools that were installed and played with RAPIStart.exe. RAPIStart.exe is a command line tool that lets you start applications on your device from your workstation using ActiveSync. A handy little tool, so I made a note to try to reproduce it and write a little ......

Posted On Thursday, October 29, 2009 2:48 PM | Comments (1)

Windows CE: Watchdog Timers
Watchdog timers have been coming up in discussions lately, so I thought it might be good to start a discussion about the use and misuse of watchdog timers in a preemptive multitasking operating system, like Windows CE. I am going to share my thoughts, but look forward to you, my reader, sharing your thoughts on the subject. I am going to focus this discussion on hardware watchdogs, totally ignoring the software watchdog that is included in Windows CE and discussed by Luca Calligaris in an article ......

Posted On Tuesday, September 29, 2009 8:03 PM | Comments (2)

Platform Builder: Compiler Optimization and Volatile
Many of you already know about the use of the C/C++ keyword volatile, but I was having a discussion with a colleague this afternoon and the topic came up. The colleague is a bright up and coming engineer who finds himself writing software, but really wanting to design hardware. He was telling me about a test that he wrote to estimate the CPU speed of a board. Simple little application, get the current milliseconds using GetTickCount(), then run a busy loop. When the loop completes call GetTickCount() ......

Posted On Tuesday, December 30, 2008 10:40 PM | Comments (0)

Windows CE: 7.0 Announced
Yesterday at the Embedded Systems Conference (ESC) Boston, Kevin Dallas the General Manager of Windows Embedded at Microsoft announced that there will be a major release of Windows Embedded CE 7.0 in Q2 2010. Well, that is entirely accurate; the release will be named Windows Embedded Compact 7.0. That is right, the name is changing from CE to Compact. This brings the naming in line with naming of other Windows Embedded products. This spring I attended the MVP Summit at Microsoft, an NDA event, and ......

Posted On Wednesday, September 23, 2009 10:46 PM | Comments (3)

Windows CE: Overview of Silverlight Application Development
The soon to be released Windows Embedded CE 6.0 R3 will contain a new Silverlight for Windows Embedded that will change the way great applications are developed. There are some videos available on the Windows Embedded WEB site that explain this new feature better than I can, but I want to give you a quick overview. Silverlight for Windows Embedded is not the same Silverlight that you may have seen being used by WEB sites. Instead it is a subset of the browser plug in designed to be used by stand ......

Posted On Wednesday, September 23, 2009 9:54 PM | Comments (1)

Windows CE: Soon to be Available – 6.0 R3
Yesterday at the Embedded Systems Conference (ESC) Boston, Kevin Dallas the General Manager of Windows Embedded at Microsoft announced that there will be a Windows CE 6.0 R3 release available within a month. The engineers tell me that the work is complete, now it is just a matter of getting it ready for us to download. The goal of the R3 release seems to be centered on usability. The new features are: Silverlight – or actually a subset with variation. This is not Silverlight for the browser, but ......

Posted On Wednesday, September 23, 2009 9:01 PM | Comments (0)

Windows CE: Suspend, What Really Happens?
What happens when a Windows CE device suspends? What does suspend mean? Let’s look at these, but not in the technical sense of examining all of the details and twists and turns, but in terms that an application developer and maybe a user may want to know. Suspend, also known as putting the device to sleep or on some devices turning it off, is a way to put a device in a state that it consumes very little electricity. This is important for battery operated devices, like PDAs and cell phones. The system ......

Posted On Monday, September 21, 2009 8:07 PM | Comments (11)

Windows CE: Printing in Color
The Windows CE printer driver (pcl.dll) is capable of printing in color, but it might not recognize that your connected printer supports color. When this occurs, the print dialog will not allow selecting color as a print option. The good news is that this can be corrected. There are a few ways to handle this: Use the default PCL Inkjet printer in the print dialog. It has been setup for color support. Modify the registry settings for the printer. Modify the printer driver to always support color printing. ......

Posted On Wednesday, September 2, 2009 8:10 PM | Comments (0)

Windows CE: Removing Event Notifications
So you used one of the notification functions, like CeRunAppAtEvent() or CeRunAppAtTime(), to request that an app or event be signaled when a system event occurs. Now you want to disable the event notification, well that is easy just call the same function again but with different parameters to disable it. Let’s look at this: // Ask the system to run repllog.exe when a cable is connected. CeRunAppAtEvent(TEXT("repll... NOTIFICATION_EVENT_RS232_DE... ... do other stuff // Ask the system ......

Posted On Tuesday, September 1, 2009 8:36 PM | Comments (2)

Windows CE: Outputting Copyrts.txt to the Debug Port
Windows CE: Outputting Copyrts.txt to the Debug Port Someone asked on the newsgroups recently about reading copyrts.txt from an application. This is really a simple task to do, but I decided to output the file to the debug port, which turned out to be way more interesting. The code below works to read the file into a buffer that is allocated to be the size of the file, so it reads the entire file in one call to ReadFile(). Of course to keep this simple, I left out any and all error handling – which ......

Posted On Friday, July 31, 2009 12:05 PM | Comments (2)

Windows CE: Event Data
Earlier I wrote about using Events in Windows CE (see Windows CE: Synchronization Objects – Events and Windows CE: Event Test Code) but I didn’t discuss event data. Events can have data associated with them so that one thread can pass a small piece of data to another thread. This is accomplished by calling SetEventData() and GetEventData(). The data is a DWORD, although that means that it can be a pointer to data. Of course the pointer only works if both threads are in the same process, but either ......

Posted On Friday, July 31, 2009 11:42 AM | Comments (1)

Windows CE: fatal error LNK1112:
I have seen questions about the Visual Studio error “fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'ARM'” quite a bit lately. Tonight it happened to me. I was working on a project that I had targeded against the PocketPC 2003 SDK. Then I added a new SDK, in this case a Windows CE 5.0 ARMV4I SDK, to the project and had it copy settings from the PocketPC 2003 settings. Unfortunatly, not copying the settings makes things worse. Adding the SDK looks like: The problem ......

Posted On Thursday, July 30, 2009 9:32 PM | Comments (1)

Windows CE: Event Test Code
Yesterday, I wrote about Windows CE Events in Windows CE: Synchronization Objects – Events. Today I thought I would write some sample code to demonstrate the behavior differences between event types (manual and auto reset) and the functions for signaling the event (PulseEvent() and SetEvent()). I started by defining some macros to make the code easier to read. The call to CreateEvent() takes some parameters that are simply TRUE or FALSE. When you are writing the code and reviewing the documentation ......

Posted On Wednesday, July 29, 2009 9:30 PM | Comments (2)

Windows CE: Editing the Registry
I have posted several articles about writing software to modify and read the registry (see Summary of Registry Posts.) But what if you aren’t a Software Engineer, or don’t want to write a program to make a simple change to the registry? There are several registry editors available: · Remote Registry Editor – this tool comes with the development tools for Windows CE. It allows users to edit the Windows CE registry on a PC via a connection to the Windows CE device. The connection can be through ActiveSync, ......

Posted On Monday, February 16, 2009 12:40 PM | Comments (2)

Windows CE: Monitor Power State Changes
I started writing this as a how to monitor for system resume. But then I thought that a more general function that monitors for power state changes would be more useful. Many applications have reasons to monitor for Suspend and Resume transitions. There isn’t a good general way to monitor for Suspend, but applications can be notified when the system resumes. I do think that it would be good for applications to be notified on suspend so that they can save data just in case of power loss during suspend. ......

Posted On Saturday, February 14, 2009 11:33 PM | Comments (6)

Windows CE: Guide to Setting Thread Priorities
Windows CE has supported 256 thread priorities since version 3.0. Microsoft increased the number of thread priorities at that time to enhance the Windows CE real-time performance. With so many thread priorities, how can a system engineer determine which threads to set at which priority? I am going to attempt to give some guidance for setting the thread priorities in the article. The thread priorities currently supported are 0 through 255. Zero is the highest priority and 255 is the lowest. What this ......

Posted On Friday, February 13, 2009 11:30 PM | Comments (6)

Windows CE: Synchronization Objects – Events
Events are one of the synchronization objects provided by the Windows CE kernel. Events are used to allow one thread to signal one or more threads that something happened. Examples: · Events are used by the kernel and drivers to handle system interrupts. When an interrupt occurs the kernel signals the driver by setting an event that the driver waits for. · Events are sometimes used to signal driver or services that registry settings have been changed by an application or Control Panel Applet. The ......

Posted On Tuesday, July 28, 2009 9:16 PM | Comments (10)

Windows CE: Creating a Control Panel Applet
A reader asked me this week if I had any documentation about creating a control panel application. This topic has been on my list for a year, so I maybe it is time to write about it. I only write code from a clean sheet of paper when I can’t find a good starting point. Luckily for me, this is a case where I can find a good starting point. I am going to start with one of the sample control panel applets available in the shared source code that comes with Platform Builder. I am also going to build ......

Posted On Monday, July 6, 2009 12:18 PM | Comments (6)

Windows CE: Keeping the Backlight On
Chris Tacke of OpenNetCF and I were talking about how to keep the backlight on in Windows CE 6.0 today. He had noticed that the function SystemIdleTimerReset() no longer kept the backlight on, but does keep the system running. I had noticed this a while back, but didn’t have time to look into it. I did have a solution though. The solution is to get an event name from the registry for an event that the power manager is monitoring. Then create the event and set it. Here is how I did it: #define GWE_REG_PATH ......

Posted On Wednesday, June 17, 2009 6:59 PM | Comments (12)

Platform Builder: Setting the Default Color Scheme at Boot
Among the questions that I received today, was “How can the default color scheme be changed?” The default color scheme is the one used with the system boots. It turns out that changing the default color scheme in an OS image isn’t very easy to do. A quick look in the registry might suggest that it should be easy. It looks like just changing the following registry setting would be enough to do it: [HKEY_CURRENT_USER\ControlP... "Current"=mui_sz:"<Scheme name>" But when you test ......

Posted On Saturday, April 4, 2009 8:37 PM | Comments (0)

Windows CE: ERROR: function @ Ordinal 342 missing
You try to run your application on a new Windows CE device for the first time and BAM you get hit with the following debug output: ERROR: function @ Ordinal 342 missing !!! Please Check your SYSGEN variable !!! So you are wondering what that means. Ordinal? SYSGEN variable? Sounds ominous doesn’t it? The first line says that the function at ordinal 342 is missing. What that means is that a function that your application or DLL plans to call is missing from the OS. If you are new to Windows CE, it ......

Posted On Monday, March 23, 2009 9:27 PM | Comments (0)

Windows CE: Determining if an API is Available
Many Windows CE systems are kiosk type devices, where the Software running on the systems starts when the system boots. This causes a new problem for some software developers: the API may not be ready to be used when the software starts. To add to the fun, not all Windows CE systems are equal so some APIs may never become available. Early versions of Windows CE provide a simple method to determine if an API is available, the function IsAPIReady(). IsAPIReady() is a handy method to determine if an ......

Posted On Sunday, March 22, 2009 10:34 PM | Comments (2)

Windows CE: Dumpbin
A customer contacted me today to ask for help with a Windows CE 3.0 device. Yes, Windows CE 3.0 is alive and kicking on thousands of systems in the field. They were trying to update a driver on the system but the driver wouldn’t load and run. The driver was from a third party who claimed that the driver would run on Windows CE 3.0. I asked a few questions. Is the driver for CE 3.0? Is the driver dependent on some DLL or APIs that aren’t available? Customers being customers, the best that he could ......

Posted On Wednesday, February 25, 2009 8:36 PM | Comments (6)

Windows CE: More on Starting an Application when the Device Boots
I have written several posts about starting an application when a Windows CE device boots. These posts have been fairly popular, but there are still some questions. The how to posts include: · Windows CE: Starting an Application when the System Boots which covers information needed by both application developers and Platform Builder users. · Windows CE: Programmatically Setting Up an Application to Auto Start which covers writing an application that sets itself up to run when the system boots. · ......

Posted On Saturday, February 7, 2009 11:49 PM | Comments (0)

Windows CE: Setting the System Path
When loading an exe or dll Windows CE searches the following folders to find the file to load: LoadLibrary searches for the dll in: · The path given in the call to LoadLibrary() · The directory that the current exe was loaded from · The \Windows folder · The ROM DLL files · A search path defined in the registry CreateProcess searches for the exe in: · The path given in the call to CreateProcess() · The \Windows folder · The root folder · A search path define in the registry The search path defined ......

Posted On Saturday, February 7, 2009 11:45 PM | Comments (3)

Windows CE: Priority Inversion and How I missed it
I have been working on a problem for a couple of weeks now. I even wrote about it in Windows CE: Finding an Out of Control Thread where I declared that I had found the thread that had the problem. It turns out that I was wrong, and I am willing to admit it. In Windows CE: Finding an Out of Control Thread I showed how I found the thread that was using 100% of the CPU time by finding the thread priority of the thread. I didn’t discuss it, but I did consider priority inversion and ruled that out. It ......

Posted On Saturday, January 31, 2009 9:18 PM | Comments (5)

Windows CE: Threads
All code executes within a thread in Windows CE. A thread contains a stack and a program counter among other things. A thread runs at a priority level from 0 to 255, with 0 being the highest priority. Higher priority threads run before lower priority threads and can therefore block lower priority threads from running. The priority level of a thread can be changed. When a thread is scheduled to run, it will run for a period of time known as quantum or until the thread gives up its quantum by blocking. ......

Posted On Wednesday, January 21, 2009 9:07 PM | Comments (4)

What is Windows CE?
Mike Hall at Microsoft recently posted a short video featuring Dion Hutchings, Technical Product Manager, talking about what Windows CE is. See Windows Embedded Blog : What is Windows CE ? - Here's Dion with the answer. to view the video. The wearable device that Dion shows is a Eurotech Zypad, The ZYPAD WL 11XX Wrist Worn Personal Computer is a powerful computing device designed to be worn comfortably on the user’s wrist for hands-free operation. The wearability and hands-free operation of the ZYPAD ......

Posted On Thursday, January 8, 2009 10:55 AM | Comments (0)

Windows CE: Runtime OS Version
GetVersionEx() is a method for retrieving the Windows CE Version at runtime. The following function, OutputWindowsCEVersion(), demonstrates how to call GetVersionEx() and output the version information to the debug port. void OutputWindowsCEVersion() { OSVERSIONINFO Version; Version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (GetVersionEx(&Version)) { RETAILMSG(1, (TEXT("Windows CE %d.%d build %d\n"), Version.dwMajorVersion, Version.dwMinorVersion, Version.dwBuildNumber )); RETAILMSG( 1, ......

Posted On Saturday, January 17, 2009 8:24 PM | Comments (0)

Windows CE: Compile Time OS Version
Every time Microsoft releases a new version of Windows CE, there are changes to the available APIs. Most of the time there are additions of new APIs, but sometimes an API becomes obsolete and rarely an API changes signatures. If you are like me, you probably want to maintain as little source code as possible. That means that the code needs to compile under the different versions while taking advantage of new features. Bldver.h provides a way to check for the Windows CE version at compile time. Bldver.h ......

Posted On Friday, January 16, 2009 11:06 PM | Comments (2)

Windows CE: Preventing Multiple Instances of an Application
There is often a good reason to allow only one instance of an application to run at any time. One example of this is the serial debug menu application that I present in Windows CE: Serial Debug Menu Summary. If that application were to have more than one instance the results would be unpredictable, unless you count user confusion. The input would randomly go to instance of the application based on which instance looked for input first. One way to prevent multiple application instances is to use a ......

Posted On Tuesday, January 6, 2009 8:57 PM | Comments (0)

Platform Builder: StallExecution() vs Sleep()
StallExecution() and Sleep() are two ways to add a delay to a driver. But they delay in different ways so be cautious when selecting one of them. StallExecution() is a CEDDK function, so it is not easily accessible outside of Platform Builder. There is a good reason for that. StallExecution() takes as an argument the number of microseconds to delay. Since Windows CE uses a millisecond timer, there is no way to block for a number of microseconds. That means that StallExecution() must run continuously ......

Posted On Sunday, January 4, 2009 10:36 PM | Comments (0)

Windows CE: Persisting Registry Changes from an Application
Windows CE devices may or may not persist the registry when power is removed or through a hard reset. The decision is up to the OEM to implement a way to persist the registry. So your device may lose your registry settings. The good news is that many Windows CE devices do have a way to persist the registry. Microsoft provides two methods for the OEM to implement registry persistence: 1. Hive based registry – in this method, the Filesys is set up with a non-volatile disk to save the registry. This ......

Posted On Thursday, December 18, 2008 8:43 PM | Comments (0)

Windows CE: Starting Explorer in a Specific Folder
Today, a few people were looking for how to start Explorer in a specific folder. I thought that it was an interesting request for two reasons; seemed like something that could easily be tried and the source code is available with Platform Builder. So first, I tried it. There are several ways to try it, I chose to use Run from the Start menu. In the dialog, I typed in “Explorer \Flash Disk” and there was the answer, Explorer started in the \Flash Disk folder. It took less time than a Google search. ......

Posted On Wednesday, December 17, 2008 9:54 PM | Comments (0)

Windows CE: Adjusting Audio Volume
The volume control panel applet in Windows CE controls the volume by dividing the possible volume by 5 and letting the user index between those settings. So it doesn’t allow for adjustment of to all of the possible volume levels. This makes sense because really the difference between a volume level of 60,000 and 60,001 is not really perceivable by the user. I thought that it would be interesting to replicate this behavior in a function. This function demonstrates how to get the current volume setting ......

Posted On Tuesday, December 16, 2008 10:54 PM | Comments (1)

Windows CE: Enumerating the Registry
There are several ways to export the registry from a Windows CE device including the Remote Registry Editor and third-party registry editors. The Remote Registry Editor requires a connection to the device and third-party registry editors typically require a display. I don’t always have a connection to the device or a display so I thought it would be interesting to enumerate the registry to export the registry to the debug port where I can capture it to a file. I set out to figure this out just based ......

Posted On Monday, December 15, 2008 7:32 PM | Comments (0)

Windows CE: Redirecting RETAILMSG to a File
I was working at home this weekend and I left my USB to Serial adapter at the office. My office is only 4 miles from home, but I didn’t feel like driving all the way there. But I almost did because I needed to capture the RETAILMSG output from an application that I was working on. I wasn’t using them so much for debugging, but instead to output some data. I decided to redirect the output and skip going to the office. The first thing that I did was to modify the application to use printf instead of ......

Posted On Sunday, December 14, 2008 11:10 PM | Comments (0)

Windows CE: Automatically Start Application with Command Line Parameters
I have covered automatically starting applications before (Windows CE: Starting an Application when the System Boots and Windows CE: Programmatically Setting Up an Application to Auto Start ), but I have been getting questions about how to start an application at boot time and pass the application some command line parameters. This usually seems like an odd request to me, but there are some cases where it is necessary, like when the application is from a third-party. HKEY_LOCAL_MACHINE\Init with ......

Posted On Friday, December 12, 2008 11:14 PM | Comments (6)

Windows CE: Dynamic Screen Rotation
Someone asked me today about rotating, or turning, the display on a Windows CE device. MSDN actually has a nice example of how to do this at Creating a Project for the Screen Rotation Application. But the example application takes some study to convert it to something really useful. It rotates the display 90 degrees each time the application is run, handy but not that useful because that isn’t really how applications typically rotate the display. Instead applications tend to know the angle that the ......

Posted On Wednesday, December 10, 2008 10:43 PM | Comments (2)

Windows CE: Enumerating CEDB Databases
Someone in the newsgroups recently asked about finding the database that sets up ActiveSync to run when a cable is plugged into a device. My first thought is to simply enumerate the user notifications, which I showed in a recent post, Windows CE: Enumerating User Notifications, and look for the RS232 detected event which launches repllog.exe. But then I thought that it might be interesting to enumerate the databases themselves. The following function, EnumerateDataBases(), will output the CEDB databases, ......

Posted On Saturday, December 6, 2008 3:10 PM | Comments (0)

Windows CE: Enumerating User Notifications
I put together the following OutputNotifications() function to show how to enumerate User Notifications. #include <Notify.h> void OutputNotifications() { HANDLE *hNotifications = NULL; DWORD NumNotifications; DWORD Count; DWORD BytesNeeded; CE_NOTIFICATION_INFO_HEADER *NIHeader; CE_NOTIFICATION_TRIGGER* Trigger; CE_USER_NOTIFICATION* UserNotification; void *pBuffer; // First call CeGetUserNotifications to find out how many notifications are available // by passing in zero as the second argument ......

Posted On Friday, November 28, 2008 10:20 PM | Comments (0)

Full Windows CE General Archive