Click here to Skip to main content
6,597,576 members and growing! (22,566 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » Mobile Development » General     Intermediate

Using PocketPC Registry from C# Applications

By Extrim

The library for working with PocketPC registry
C++, C# 2.0, Windows, .NET CF, .NET, MobileVS2005, Dev
Posted:30 May 2007
Updated:7 Jun 2007
Views:23,391
Bookmarked:15 times
Unedited contribution
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
6 votes for this article.
Popularity: 2.33 Rating: 3.00 out of 5
2 votes, 33.3%
1

2

3
1 vote, 16.7%
4
3 votes, 50.0%
5
Pocket Registry Edit

Introduction

Registry is the system database for storing paires of Key and Value in the Windows operating systems. Windows CE system registry is organized as hierarchical (tree) structure. It is used to store configuration information for operating system, applications and hardware devices. Also, the registry contains information about installed applications, drivers and available hardware. Pocket PC registry is very similar to desktop Windows registry. You can use regedit utility to look at your desktop PC Structure.

Background

Pocket PC registry has four main root nodes & several additional:

  • HKEY_CLASSES_ROOT
  • HKEY_CURRENT_USER
  • HKEY_LOCAL_MACHINE
  • HKEY_USERS
  • HKEY_PERFORMANCE_DATA
  • HKEY_PERFORMANCE_TEXT
  • HKEY_PERFORMANCE_NLSTEXT
  • HKEY_CURRENT_CONFIG
  • HKEY_DYN_DATA

The functions for working with Pocket PC Registry, e.g. opening ROOT, creating keys and values, deleting nodes, enumerating childs are contained in coredll.dll system library. This set of functions are part of WinAPI.

Note from MSDN:
Windows APIs are dynamic-link libraries (DLLs) that are part of the Windows operating system. You use them to perform tasks when it is difficult to write equivalent procedures of your own.


To make use of PocketPC Registry API in the article we will consider DllImport attribute:

Note from MSDN:
The DllImport attribute provides a way to call functions in DLLs without type libraries. DllImport is roughly equivalent to using a Declare statement but provides more control over how functions are called.

Using the code

The library contains a single class CERegister, which contains functions for setting and getting string values from registry:

  • RegGetStringValue
  • RegSetStringValue

The example of their usage:

 PocketRegistry.CERegister.RegSetStringValue(PitReg.RegRoot.HKEY_CURRENT_USER, "pocketpc\\CERegistry", "StringValue", "123");

Here also, some brief examples of DllImport Attribute usage:

Creating Registry Key:

//

// RegCreateKeyEx 

//


[System.Runtime.InteropServices.DllImport("coredll.dll")]
        private static extern int RegCreateKeyEx(
            uint hKey, 
            string lpSubKey, 
            uint Reserved, 
            string lpClass, 
            uint dwOptions, 
            uint samDesired, 
            uint lpSecurityAttributes, 
            ref uint phkResult, 
            ref uint lpdwDisposition 
            ); 

Open Registry Key:

//

// RegOpenKeyEx 

//

System.Runtime.InteropServices.DllImport("coredll.dll")]
        private static extern int RegOpenKeyEx( 
            uint hKey, 
            string lpSubKey, 
            uint ulOptions, 
            uint samDesired, 
            ref uint phkResult 
            ); 

Querying Registry Value:

//

// RegQueryValueEx

//


[System.Runtime.InteropServices.DllImport("coredll.dll")]
        private unsafe static extern int RegQueryValueEx( 
            uint hKey, 
            string lpValueName, 
            uint lpReserved, 
            out uint lpType, 
            byte * lpData, 
            ref uint lpcbData 
            );     

There is a trick for getting string values. You should first retrieve the length of the value and then retrieve the value in the buffer:

private static string GetStringValue(uint Key, string Name)
        {    
            uint buflen = 0;
            uint type = 0;
            char []str = null;
            unsafe
            {    
                                //Get the length of the value:

                int r = RegQueryValueEx(Key,Name,0,out type,null,ref buflen);
                if (type!=(uint)RegType.REG_SZ) throw new Exception ("The key is not of string value");

                                //Create a buffer for the value:

                byte[] rez_buf = new byte ;

                                //Retrieve the value to the buffer

                fixed(byte *charpointer=&rez_buf[0])
                {
                    int rez = RegQueryValueEx(Key,Name,0,out type,charpointer,ref buflen);
                    if (rez != 0) throw new Exception ("Can't get value");
                }

                str = new char ;
                for (int i=0; i<buflen; i++)
                    str[i] = (char)rez_buf[i];

            }    
            return new string (str);
        }

Further Information

For further info you may refer MSDN

History

  • Submitted on 31 May 2007

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Extrim


Member
Please visit my website for more articles

I'm software developer & Ph.D. student

Occupation: Software Developer (Senior)
Location: Ukraine Ukraine

Other popular Mobile Development articles:

  • Writing Your Own GPS Applications: Part 2
    In part two of the series, the author of "GPS.NET" teaches developers how to write GPS applications suitable for the real world by mastering GPS precision concepts. Source code includes a working NMEA interpreter and sample high-precision application in C# and VB.NET.
  • Writing Your Own GPS Applications: Part I
    What is it that GPS applications need to be good enough to use for in-car navigation? Also, how does the process of interpreting GPS data actually work? In this three-part series, I will cover both topics and give you the skills you need to write a commercial-grade GPS application.
  • Learn How to Find GPS Location on Any SmartPhone, and Then Make it Relevant
    A step by step tutorial for getting GPS from any SmartPhone, even without GPS built in, and then making location useful.
  • iPhone UI in Windows Mobile
    It's an interface that works with transparency effects. As a sample I used an interface just like the iPhone one. In this tutorial I am explaining how simple is working with transparency on Windows Mobile.
  • Pocket 1945 - A C# .NET CF Shooter
    An article on Pocket PC game development
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 3 of 3 (Total in Forum: 3) (Refresh)FirstPrevNext
GeneralHey... PinmemberMember 37314523:23 29 Jun '09  
GeneralYou could just use Microsoft.Win32.Registry* PinmemberNeil Cowburn14:31 1 Jun '07  
GeneralRe: You could just use Microsoft.Win32.Registry* PinmemberExtrim6:51 3 Jun '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 7 Jun 2007
Editor:
Copyright 2007 by Extrim
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project