Un peu de mon expérience dans le monde .NET
# Thursday, February 11, 2010
Microsoft Surface & Windows 7 Phone
En passant à travers le programme des TechDay 2010, je remarque une session animé par Sacha Corti ayant comme sujet la nouvelle plateforme Window Mobile : Windows 7 Phone. Première bonne surprise.

Rapide tour sur le blog de Sacha Corti, et deuxième bonne surprise. Des photos de la surface chez Microsoft  Suisse.


Thursday, February 11, 2010 4:04:55 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Surface | Windows Mobile

# Wednesday, December 16, 2009
Smartphone sur le marché Américain
Les chiffres de comScore, concernant le nombre d’appareils téléphoniques en service en octobre 2009 aux Etats-Unis, sont tombés …

Première réflexion : la guerre des chiffres concernant les smartphones semble une bataille élitiste … En effet le nombre de smartphones, toutes marques confondues, ne représente que 15% du marché. Il semble donc que 85% des utilisateurs arrive à vivre sans boussole, GPS, connexion 3G et écran multi-touch !

Second réflexion : le grand gagnant dans la catégorie smartphone est belle et bien RIM avec son BlackBerry … A lire la blogsphere, il semble que seuls l’iPhone et Androïd existent.

Dernière refexion : Windows mobile est mort selon la blogsphere. Troisème platforme, juste derrière l’iPhone, mais largement devant Symbian et google (7 fois plus d’unités), Windows continue à progresser (+5% depuis le début de l’année), progression faible par rapport à l’ensemble du marché (+42%) ou à d’autre constructeur (l’iPhone est passé de 5 millions d’appareil au début de l’année à pratiquement 9 millions en octobre)
Wednesday, December 16, 2009 4:32:11 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Windows Mobile

# Monday, September 07, 2009
Gesture API Code Managé
Windows Mobile 6.5 introduit une nouvelle API prenant en compte le gestion des gestes. Les exemples fournis dans le SDK ne sont malheureusement disponible qu'en C++.

De nombreux exemples et codes open-source étaient disponible (notemment sous www.codeplex.com) pour géré ces gestes. L'API de Microsoft est désormais disponible pour le code managé, grâce à Alex Yakhnin et Ron Buckton qui ont crée un Wrapper, disponible sur le MSDN : http://code.msdn.microsoft.com/gestureswm.

Il est désormais possible de générer une nouvelle expérience utilisateur de manière "relativement" simple.
Monday, September 07, 2009 3:47:17 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0]  C# | Windows Mobile

# Thursday, September 03, 2009
iPAQ 214 sous Windows Mobile 6.5
HP n'offrant officiellement pas de mise à jour de l'OS (ni 6.1, ni 6.5 ...), les gens de XDA proposent des ROMs pour votre 214.

Tout est disponible au ROM centre de Brightant (http://forum.brighthand.com/showthread.php?t=270542)
Thursday, September 03, 2009 12:16:28 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0]  Windows Mobile

# Tuesday, May 26, 2009
iPAQ 614 sous Windows Mobile 6.5

Vous aez un iPAQ 614, vous savez que HP ne propose pas de mise à jour de l'OS (6.1 ou 6.5) et vous revez d'utiliser Windows Mobile 6.5 ? Alors faite un tour sur le site de XDA-Developers !

La procèdure de mise à jour est la suivante :

  1. S'assurer que l'iPAQ est bien à jour (OS & Firmeware). Tout est disponible sur le site d'HP
  2. Télécharger la ROM sur le site de XDA-Developers. Cette ROM n'est pas un mise à jour officiel de HP !
  3. Mettre le fichier FLASH.DIO sur la SD du téléphon. Attention, cette SD ne doit pas être plus grange que 2 GB.
  4. Eteinde l'appareil
  5. Presser en même temp le bouton "mute" et le bouton d'enregistrement de la voix, puis le bouton marche/arrêt.
  6. L'appareil va s'allumer via le SD loader et flasher votre téléphone
  7. Vous avez un appareil en Windows Mobile 6.5 qui doit ressemble à ça :


Tuesday, May 26, 2009 1:15:39 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0]  Windows Mobile

# Tuesday, May 19, 2009
iContact
La version 0.93 de l'outil iContact est disponible chez supware. Toujours gratuit, et même avec le code source !
Tuesday, May 19, 2009 1:02:21 PM (GMT Daylight Time, UTC+01:00)  #    Comments [1]  Windows Mobile

# Friday, November 28, 2008
Gestion des contactes sous Windows Mobile

Pour tous ceux possédant un téléphone fonctionnant avec Windows Mobile, je vous suggère un outil gratuit, iContact, qui remplacera avantageusement celui de base fournit par Microsoft.

 


Friday, November 28, 2008 4:01:17 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Windows Mobile

# Wednesday, January 30, 2008
Troubleshhoting problèmes avec Merge Replication

Récement, j'ai experimenté quelqeus soucis avec un POC Merge Replication :

80004005 : Failure to connect to SQL Server

Le Merge Replication n’abouti pas. L’erreur ‘OpenDB failed getting pub version 28627’ est loguée dans le fichier SQLCESA30.LOG.

Liste des contrôles à effectuer :

  • S’assurer que le serveur de réplication fonctionne correctement :
    http://nomduserveur/ssce/sqlcesa30.dll?diag
  • Contrôler dans le fichier log (C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Server\SSCE\SQLCESA30.LOG) que l’entrée ‘Hr=00000000 SQLCESA30.DLL loaded 0’

Vérifier le transport en effectuant des ‘ping’ entre Publisher, Distributor &Replication.

  • Si un des serveur ne répond pas, vérifier que le firewall est à off.

Vérifier que les différents serveurs (Publisher, Distributor & Replication) communiquent correctement :

  • depuis le serveur de réplication :
    o osql –S PUBLISHER –E
    o osql –S DISTRIBUTOR –E
  • etc sur les autres serveurs ...

Si la communication ne fonctionne pas, vérifier dans ‘SQL Server Surface Area Configuration’ que les connections locales et distantes sont autorisées.


Wednesday, January 30, 2008 3:43:54 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Merge Replication | SQL-Server 2005 | Windows Mobile

# Friday, January 18, 2008
SQL Server Compact Merge replication

Je compulse actuellement le livre Windows Mobile Data Synchronization with SQL Server and SQL Server Compact 3.1 de Rob Tiffany, principalement pour appréhender la synchronisation de données entre un PPC et une base centralisée.

 

Rob donne un coup de projecteur sur une utilisation assez surprenante du Merge Replication. Comme 99% des personnes, je pense à cette technologie pour maintenir à jour des données et structures sur un PPC et une base SQL-Server centralisée. Rob pousse la réflexion plus loin et propose d’utiliser cette technologie pour pousser toutes sortes d’information sur le PPC. Et donc pourquoi pas des applications ou des policies ?

 

L’exemple est trop simple et on se demande pourquoi ne pas y avoir pensé avant …

 

Le PPC est abonné (Subscription) à un article (Article). Au niveau physique, le PPC est abonnée à une table avec un champ. Un niveau serveur, on renseigne ce champ avec l’application (en binaire). A la prochaine connexion, l’application est poussée sur la PPC par le serveur de réplication. Supposons qu’un agent tourne sur le PPC et se charge d’installer les applications trouvées dans cette table, et le tour est joué ! Même principe pour des settings systeme ...

 

C’est tellement simple que j’ai presque envie de faire le test !

Stéphane


Friday, January 18, 2008 3:42:24 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Windows Mobile | SQL-Server

# Monday, January 07, 2008
Windows Mobile 7 en ... 2009 !

Plus d'informations sur les nombreuses nouveautés annoncés pour Windows Mobile 7
Monday, January 07, 2008 12:02:17 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  Windows Mobile

# Friday, August 10, 2007
Windows Mobile en mode Kiosk

Voici l'article que j'ai publié sous www.codeproject.com, résultat de mon expérience suite au développement d'un POC ...

Introduction

Windows Mobile is a great production device. But by default, the device give access to all functionalities (e-mail, contacts ...) and in particular context, you will probably be interested to restrict end-user access to some of these functionalities.

You'll have two options:

  • Integrate in the standard Sheel
  • Customize the system in kiosk mode

    I'll focus on the second option. In order to set the system in kiosk mode, we'll have to:

  • Write an application with a screen which will work like the 'Today' screen
  • Control the hardware button to restrict access to Windows Mobile functionalities
  • Of course, have the application launch at startup
  • This is a non exhaustive list...

    Background

    I will not focus on Compact Framework development and OS low level library interaction. But keep in mind the .Net Compact Framework Artchitecture:

  • Framework
  • Common Language Runtime
  • Windows CE

    You will then understand why we reference microsoft.windowsce.forms for low level functionality

    I also use OpenNETCF www.openNETCF.com for reading/writing registry. Library is fully explained on their web-site.

    Using the code

    Our first task is to create a new Smart Device project from Visual Studio. As mentioned in the introduction, we'll set properties of the default Form Form1.cs in order to create a 'Today' like screen. You can do it using the properties windows or by code :

    public frmKiosk()
    {
        InitializeComponent();
    
        ControlBox = false;
        FormBorderStyle = FormBorderStyle.None;
        MaximizeBox = false;
        MinimizeBox = false;
        WindowState = FormWindowState.Maximized;
    }
    

    Now, we'll have to control hardware button. This is done using the Microsoft.WindowsCE.Form.MessageWindows. This class will allow us to intercept Windows Messages and decide how to handle them (internal routine, raising events to be handled by other class, or ... do nothing). This will allow us to intercept messages send by hardware button and simply decide to not react to them!

    The logic is quite simple:

  • Create a class which will inherit from MessageWindows. Override the WndProc method to catch windows message and implement our own business logic. We will intercept only HOTKEY message, but the same code could be use to handle all windows message type (full list here: http:\\www.pinvoke.net)
  • Unregister the hardware button : by default, message raised by hardware button are handled by the default process
  • Register the hardware button : message raised by hardware button will be handled by our custom MessageWindows

    The code of our custom MessageWindows will be like this:

    public class internalMessageWindow : MessageWindow
    {
            // Which message type ?
            public const int WM_HOTKEY = 0x0312;
    
            Form referedForm;
    
            public internalMessageWindow(Form referedForm)
            {
                this.referedForm = referedForm;
            }
    
            protected override void WndProc(ref Message msg)
            {
                switch (msg.Msg)
                {
                    case WM_HOTKEY:
                        // Do no reply to this key ...
                        return;
                }
                base.WndProc(ref msg);
            }
    }
    

    We have now to link our form with our custom WindowsMessage

    FormCode
    {    
        internalMessageWindow messageWindow;
        public Form Constructor()
        {
            this.messageWindow = new internalMessageWindow(this); 
        }        
    }
    

    And unregister/register hardware buttons using UnregisterFunc1 and RegisterRecordKey from coredll.dll (see http:\\www.pinvoke.net for signature detail

    FormCode
    {    
        public Form Constructor()
        {
            ...
            RegisterHKeys.RegisterRecordKey(this.messageWindow.Hwnd);
        }        
    }
    public class RegisterHKeys
        {
            [DllImport("coredll.dll", SetLastError = true)]
            public static extern bool RegisterHotKey
            ...
            and
            private static extern bool UnregisterFunc1
            ...
            
            public static void RegisterRecordKey(IntPtr hWnd)
            {
                UnregisterFunc1(KeyModifiers.Windows, (int)KeysHardware.Hardware1);
                RegisterHotKey(hWnd, (int)KeysHardware.Hardware1, KeyModifiers.Windows, (int)KeysHardware.Hardware1);
                
                // Repeat for every single hardware button you wan to handle
            }
        }
    

    Now, we need to force our application to start avery time the Windows Mobile is started. This could be done using the CeRunAppAtEvent function of the coredll.dll library. This function allows linking an application to a specific event of the device. In our context, we'll link our application to the Wakeup event. This mean that every time the device is started, the Wakeup event will be raised, an as we will like our application with this event, our application will be started.

    To link application to event, we'll use this code:

    Win32.CeRunAppAtEvent(_kioskName, NotificationEvent.Wakeup);
    

    And we'll use this code to 'unlink' application / event:

    Win32.CeRunAppAtEvent(_kioskName, NotificationEvent.Wakeup);
    

    So now, we have a start page, which appears every time the device is started. And we have also caught button events to disable hardware interaction. Final step is to allow end-user to launch specific application and wait that this application to be closed to return to our start page.

    This is a quite easy step, using ProcessStartInfo class. This will allows us to start an application in a new process and put our current application in a waiting state, waiting that a specific process exit.

    To start a new process, we'll use this code, which will return the process handler:

    private static Process LaunchApp(string filename)
    {
        ProcessStartInfo s = new ProcessStartInfo();
        s.FileName = filename;
        s.UseShellExecute = true;
        return Process.Start(s);
    }
    

    And we have just to add routine to start an application, waiting the process to exit, with this code:

    private void but_Click(object sender, EventArgs e)
    {
        this.Hide();
        Process ela = LaunchApp(application2);
        ela.WaitForExit();
        this.Show();
    }
    

    Things to be aware

  • Hard reset of the device is not handled. Doing an hard reset will unsubscribe the application from the Wakeup event.
  • This solution is not portable ! Form is designed for a specific resolution (240x320 in this sample) and device with the default four hardware buttons. Installing it a device with other specification will fail.

    How to

    Handling non standard hardware button
    The sample is based on default device, with four buttons. If your target device has more buttons, or that MessageWindow didn't catch button interaction, you'll have to validate your button code. Use Registry Editor (Remote Registry Editor) and go in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell\Keys\. You will see multiple "Folders", corresponding to your hardware keys, like 40C1, 40C2, ... Convert the last two letters to Decimal and you will get your button key (C1=193,C2=194,...)

    Conclusion

    This sample is far from a production product, but show that handling specific device like PocketPC is quite easy. Interacting with such hardware need a little bit of pinvoke, as compact framework encapsulates some but not all functionalities. Any comments/proposition are welcomes

    Reference

  • MSDN : Get an Application to Automatically Start When a mobile Device Wakes Up?

    History

  • 08/10/2007: Posted to CodeProject

  • Friday, August 10, 2007 12:43:10 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0]  Windows Mobile

    # Wednesday, August 08, 2007
    Windows Mobile Registry editor

    Windows Mobile (US)

    Je travail actuellement sur un projet ayant comme cible des Windows Mobile 6.

    Mon premier soucis à été de trouver un moyen "simple" d'éditer la base de registre de ces machines.
    Mobile Registry Editor permet d'éditer comfortablement la base de registre du device connecté via ActiveSync.
    Remote Registry Editor et fournit avec le SDK, et fonctionne selon le même principe que le produit ci-dessus.
    Registry Editor for Windows CE est un logiciel trouvé sur www.CodeProject,com, qui s'installe sur le PocketPC et permet d'éditer directement se base de registre

    Pour explorer les fenêtres actives du PocketPC, le produti Windows CE Remote Spy est fournit avec le SDK.

    La suite demain.

    Stéphane


    Wednesday, August 08, 2007 2:52:14 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0]  Windows Mobile