Categories
Articles NETCF

All about RAPI

If you are writing a desktop application to talk to your device-side software, chances are you’ll need to work with the Remote API (RAPI). This article by Larry Roof describes RAPI and uses OpenNETCF’s Communication library to copy files, launch programs and query settings on the device.

Categories
Blogs

New blog in town

The Windows Mobile “Developer Experience” team have launched a new blog, Robert has already made a few posts regarding developing for Windows Mobile 2003 Second Edition.

Categories
Events

Back from San Francisco

I’ve got back home from MDC, my immediate task is to clear the backlog of emails and serious sleep deprivation! I’ll also be pulling together all my notes on the event for a Smartphone / Pocket PC Thoughts article.


The event included a great mixture of short term and longer-term announcements. Windows Mobile 2003 Second Edition brings support for a greater range of form factors for devices. After some deliberation I decided not to get my iPaq 2210 flashed as the beta image excluded any Bluetooth support, which would cripple the device which I use day-to-day. I have of course installed the Emulator images to target the platform. Longer term, Visual Studio 2005, .NET Compact Framework 2.0 and SQL Server Mobile are shaping up to be a powerful set of tools and technologies, and I can’t wait to play with the preview version of Visual Studio 2005 that was handed out!

Categories
MSDN NETCF

Smartphone files article gone live

Thanks to Geoff Schwab for the heads up. My article on working with files covering Storage Cards and File Dialogs is now up in the MSDN library.

Categories
NETCF

Free space on Storage Cards

You can determine the total size of a Storage Card and available free bytes using the GetDiskFreeSpaceEx API function. Below is a “mini-wrapper” around the function which returns a structure with the three return values. You’ll notice in this example I’m marshalling longs (64bit Integers), values greater than 32bit cannot be marshalled by value but can be marshalled by reference as in this case. The DiskFreeSpace struct contains three long members to hold the accessible free bytes, total bytes and total free bytes.

public static DiskFreeSpace GetDiskFreeSpace(string directoryName)
{
DiskFreeSpace result = new DiskFreeSpace();

if(!GetDiskFreeSpaceEx(directoryName, ref result.FreeBytesAvailable,

        ref result.TotalBytes, ref result.TotalFreeBytes))
{
throw new Win32Exception(Marshal.GetLastWin32Error(), “Error retrieving free disk space”);
}
return result;
}

public struct DiskFreeSpace
{
public long FreeBytesAvailable;

public long TotalBytes;

public long TotalFreeBytes;
}

[DllImport(“coredll”)]
private static extern bool GetDiskFreeSpaceEx(string directoryName,
ref long freeBytesAvailable,
ref long totalBytes,
ref long totalFreeBytes);


 


Or if you prefer Visual Basic:-



Public Function GetDiskFreeSpace(ByRef directoryName As String) As DiskFreeSpace


    Dim result As New DiskFreeSpace


    If GetDiskFreeSpaceEx(directoryName, result.FreeBytesAvailable, result.TotalBytes, result.TotalFreeBytes) = False Then


        Throw New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error(), “Error retrieving free disk space”)


    End If


    Return result


End Function


Public Structure DiskFreeSpace


    Public FreeBytesAvailable As Long


    Public TotalBytes As Long


    Public TotalFreeBytes As Long


End Structure


Private Declare Function GetDiskFreeSpaceEx Lib “coredll.dll” (ByVal directoryName As String, ByRef freeBytesAvailable As Long, ByRef totalBytes As Long, ByRef totalFreeBytes As Long)

Categories
Uncategorized

A day of upgrades

I followed Neil and Alex‘s lead and upgraded my blog to dasBlog too. Luckily because dasBlog is an evolution of BlogX the migration was pretty smooth. I may well tweak the theme slightly yet though because I miss my roadsign 🙂


I’ve also flashed my iPaq 2210 with the latest 1.10 ROM (Thanks to Ed at Pocket PC Thoughts for the heads up). This includes a number of previous patches, sadly it has .NETCF SP1, not SP2 so that will still require a RAM install. However doing a ROM flash is always a good time to clean out the crud so my iPaq is nice and tidy (for the moment at least)

Categories
NETCF

New Controls article posted

I’ve posted a new
article
to OpenNETCF.org about hosting Native windows controls from within the
.NET Compact Framework. The approach used allows you to host the control within a
Control object and receive notification back from the control thus supporting Events.
The first control to use this technique was the HTMLViewer in the Smart Device Framework
v1.0, but this has already been supplemented with InkX and MonthCalendar controls
in our latest source code. The
bulk of the work required is encapsulated in the ControlMessageWindow so it is a fairly
quick process to implement new controls in this way.

I sincerely hope that we get some extra power in the .NET Compact Framework v2.0 such
as the ability to override the WndProc of the control itself, and built in support
for the Handle property. Of course it is only a week until the Mobility
Developer Conference
when more should become clear… I can’t wait!

Categories
NETCF

A consistent way to get native window handles (HWND)

In the full desktop framework all Controls and Forms expose the Handle property which
represents the native window handle of the control – this can be passed to API functions.
In the Compact Framework this property is not implemented. In the Smart
Device Framework
 we have created the OpenNETCF.Windows.Forms.IWin32Window interface
which matches the equivalent interface on the full framework. You can implement this
interface in your custom controls and forms to provide a standard way of exposing
the window handle.

Getting the handle to any control requires just one P/Invoked API function – GetCapture
which returns the window handle of the control with capture (able to receive mouse/stylus
input). First Capture is set on the control, then this API call will return the HWND
of the control, finally capture is optionally release from the control. The GetCapture
function is implemented in the OpenNETCF.Win32.Win32Window class,
or you can P/Invoke it directly. The following code illustrates adding IWin32Window
support to your control:-

[VB]

Imports OpenNETCF.Windows.Forms
Imports OpenNETCF.Win32

Public Class MyControl
    Inherits System.Windows.Forms.Control
    Implements IWin32Window
    

    Overridable ReadOnly Property Handle() As System.IntPtr
        Get
            Me.Capture = True

            Dim thishandle As IntPtr
            thishandle = Win32Window.GetCapture()
            Me.Capture = False
            Handle = thishandle
        End Get
    End Property
End Class


[C#]

using OpenNETCF.Windows.Forms;
using OpenNETCF.Win32;

public class MyControl : Control, IWin32Window
{
   public IntPtr Handle
   {
       get
       {
           this.Capture = true;
           IntPtr thishandle = Win32Window.GetCapture();
           this.Capture = false;
           return thishandle;
       }
   }
}

By using the Interface approach rather than adding in support for handles on an ad-hoc
basis you have a garunteed signature for your handle implementation. Therefore
if you have a method which requires a native window handle you can accept an IWin32Window
as an argument. We will be ensuring that all our OpenNETCF controls in the future
implement this interface so you can rely on the Handle property to get the native
window handle.

Categories
Native

eMbedded Visual C++ 4.0 Service Pack 3

http://www.microsoft.com/downloads/details.aspx?FamilyId=5BB36F3E-5B3D-419A-9610-2FE53815AE3B&displaylang=en

This latest service pack solves a number of issues
encountered when working with multiple CE.NET 4.x versions 4.0, 4.1 etc. the full
details are available on Amit’s weblog.

Categories
NETCF

Browse and search Source Code

To co-incide with our latest source-code release of the Smart
Device Framework
, we’ve implemented an online
source browser
which you can use to view our complete portfolio of code.

One of the features of this is the ability to search for keywords in the code. A good
example of why you might want to do this is when looking for a specific P/Invoke definition,
for example CreateProcess. Doing a search on “CreateProcess” results in a reference
in OpenNETCF.Diagnostics.Process
and we can see that on line 402 and 403 the function is declared.