[WP7] Mon application pour le concours Windows Phone 7 !

Le 23 août 2010 à 10:05

Microsoft organise une compétition pour les développeurs Windows Phone 7 pour rechercher les killers-apps de demain. Les 7 finalistes passeront devant un jury composé de 6 personnes : Steve Ballmer (CEO Microsoft), Pierre Olivier Carles (CEO de Kipost et co-fondateur de Labotec, business angel), Jacques Antoine Granjon (fondateur de Vente-privée.com), Ouril Ohayon (co-fondateur d’AppsFire et co-fondateur du fonds Isai), Marc Simoncini (fondateur et président de Meetic et du fonds Jaïna) et Bruno Vanryb (fondateur et Président d’Avanquest Software).

L’application que je présente pour le concours (avec Lionel Reichert) est un traducteur d’image (avec reconnaissance optique des caractères) et de textes en une vingtaine de langues. On a aussi la possibilité d’écouter le texte traduit.

Vidéo :


Pour voter pour cette application, vous pouvez vous rendre sur la page officiel du concours et cliquer sur “j’aime” ! Merci !

Edit : on ne peut plus cliquer sur “j’aime” sur la vidéo sur Facebook, c’est aussi le cas de nombreuses vidéos sur le groupe “Développeurs.net”, pour pouvoir cliquer sur “j’aime” il faudra se rendre à présent sur cette page ! Merci ! 

A bientôt !

[Visual Studio 2010] Liste des raccourcis clavier

Le 11 août 2010 à 09:51

Des posters sont disponibles en téléchargement sur le site de Microsoft concernant les raccourcis clavier de Visual Studio 2010. Chaque langage à son poster : C#, C++, VB.NET, F# et les posters sont disponibles en “haute définition” ou en version A4.

image 
Le lien pour télécharger les posters ici !

A bientôt !

[.NET] Impersonation : changer d’utilisateur (WindowsIdentity) à la volée

Le 6 août 2010 à 15:51

Pour les besoins d’un projet, j’ai besoin d’utiliser temporairement un compte avec d’autres privilèges (par exemple, même si c’est faisable autrement, si vous avez besoin d’accéder à des ressources réseaux ou tout simplement, comme il sera montré dans l’exemple, d’accéder à un répertoire où l’utilisateur courant n’a pas les droits). Pour simplifier l’utilisation, j’ai crée une (simple) classe qui sera présentée ici.

Tout d’abord, voici la classe Impersonation, qui permet de changer d’utilisateur :

public class Impersonation : IDisposable
{
    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool 
        LogonUser(string lpszUsername, 
                  string lpszDomain, 
                  string lpszPassword, 
                  int dwLogonType, 
                  int dwLogonProvider, 
                  out IntPtr phToken);

    private const int LOGON32_PROVIDER_DEFAULT = 0;
    private const int LOGON32_LOGON_INTERACTIVE = 2;

    private WindowsImpersonationContext _impersonationContext;

    public Impersonation(string domain, string login, string password)
    {
        try
        {
            IntPtr tokenHdle = IntPtr.Zero;

            bool ret = LogonUser(login, domain, password, LOGON32_LOGON_INTERACTIVE, 
                                 LOGON32_PROVIDER_DEFAULT, out tokenHdle);

            Trace.WriteLine("Current user : " + WindowsIdentity.GetCurrent().Name);

            WindowsIdentity newIdentity = new WindowsIdentity(tokenHdle);
            _impersonationContext = newIdentity.Impersonate();

            Trace.WriteLine("Current user : " + WindowsIdentity.GetCurrent().Name);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

    #region IDisposable Membres

    public void Dispose()
    {
         _impersonationContext.Undo();
         Trace.WriteLine("Current user : " + WindowsIdentity.GetCurrent().Name);
    }

    #endregion
}

Dans l’exemple qui va suivre, j’ai crée un dossier Test où j’ai enlever tous les droits pour ne laisser qu’un compte temporaire (juste pour mon exemple) :

image


Donc bien entendu, si avec mon compte par défaut, je souhaite y accéder :


image

Maintenant nous allons essayer de créer un fichier dans ce dossier avec l’utilisateur où je n’ai pas les droits, puis tout de suite derrière on va utiliser la classe Impersonation pour pouvoir basculer vers l’utilisateur “MathieuTest” afin d’avoir l’autorisation de créer le fichier :

static void Main(string[] args)
{
    string userName, password;

    Console.WriteLine("Impersonation Sample");
    Console.WriteLine("--------------------");
    Console.WriteLine(@"Pour cet exemple, 
                        nous allons essayer de créer le fichier 
                        E:\Test\File.txt dont le dossier n'est accessible 
                        que pour un utilisateur");
    Console.Write("Essai n°1 : ");
    Console.WriteLine(Test());
    Console.WriteLine("Donc on va utiliser l'impersonation pour pouvoir 
                       utiliser temporairement \"son compte\" afin de pouvoir 
                       créer le fichier");
    Console.Write("Username : ");
    userName = Console.ReadLine();
    Console.Write("Password : ");
    password = Console.ReadLine();
    Console.Write("Essai n°2 : ");

    // On tente avec l'impersonation
    Impersonation impersonation = new Impersonation(string.Empty, userName, password);

    Console.WriteLine(Test());

    // On revient à l'utilisateur "en cours"
    impersonation.Dispose();



    Console.Read();
}

static string Test()
{
    try
    {
        File.Create(@"E:\Test\File.txt");
        return "Fichier crée";
    }
    catch (Exception e)
    {
        return @"/!\ Impossible de créer le fichier";
    }
}

Voici le résultat dans la console :

image

Pour télécharger les sources, c’est ici.

A bientôt !

[WPF] Personnaliser le curseur

Le 4 août 2010 à 19:12

L'un des gros avantages de WPF c’est la personnalisation complète de notre application. Dans le même style que mon article sur la personnalisation de la sélection de texte et du curseur d’insertion, voici comment changer le curseur de la souris.

Tout cela est très simple à faire, pour commencer je vais ajouter le fichier du curseur dans mon application :

image

Ensuite, il faut définir le App.ani comme “Resource” (de base il est défini sur “Aucun”, ce qui fera qu’à la compilation notre application risque de ne pas trouver le curseur) :

image

Ensuite, sur nos éléments de l’interface, il existe la propriété “Cursor”, pour exemple, je vais le définir sur l’ensemble de la fenêtre :

<Window x:Class="Curseur.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        Cursor="pack://application:,,,/Resources/Cursor/App.ani">
    <Grid>
        
    </Grid>
</Window>

Ce qui va donner à l’exécution :

image

Je peux bien sûr définir le curseur sur d’autres éléments tels que sur Textbox, ListBox… etc :).

Pour télécharger les sources, c’est ici.


A bientôt !

[C#] Simplifier l’utilisation de SecureString

Le 29 juillet 2010 à 06:54

Quand vous utilisez un String, celui-ci est stocké en clair en mémoire. Cela peut être problématique surtout quand vous avez besoin de travailler sur des informations sensibles (mot de passe, carte bancaire, licence… etc).

Pour cela, la classe SecureString (System.Security.SecureString), disponible depuis le framework .NET 2.0, permet de mettre en mémoire une chaîne de caractère de manière cryptée (utilisant DPAPI). De plus, avec SecureString vous contrôlez sa disposition en mémoire, ce qui n’est pas forcément le cas d’un “simple” String.

Par contre, son utilisation n’est pas aussi “simple” qu’un String. Pour cela je propose deux méthodes d’extensions :

Convertir un String en SecureString :

public static SecureString ConvertToSecureString(this string value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    char[] chars = value.ToCharArray();
    SecureString secureValue = new SecureString();

    foreach (char c in chars)
    {
        secureValue.AppendChar(c);
    }
    secureValue.MakeReadOnly();

    return secureValue;
}

Convertir un SecureString en String :

public static string ConvertToString(this SecureString value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    IntPtr ptrString = IntPtr.Zero;
    try
    {
        ptrString = Marshal.SecureStringToGlobalAllocUnicode(value);
        return Marshal.PtrToStringUni(ptrString);
    }
    finally
    {
        Marshal.ZeroFreeGlobalAllocUnicode(ptrString);
    }
}

Et l’utilisation (didactique, je ne le conseille pas en cas réel ! Ici c’est en “dur” ; alors que c’est à utiliser par rapport aux données entrées par l’utilisateur par exemple ;-))

String myPassword = "password"; // à ne pas faire ! Juste pour exemple
SecureString securePassword = myPassword.ConvertToSecureString();

Trace.WriteLine(securePassword.ConvertToString());

A bientôt !

A propos de l'auteur

Mathieu Perrein - Software Solutions Manager, Software Architect, Trainer MCT, MSP de 2010 à 2012.

 

MSP

 

MSP

MSP

 MSPD

MCT

 

Facebook

 

Ce blog est strictement personnel et les opinions exprimées ici n'engagent donc que moi, et pas mon employeur.

Tags

Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version de Flash Player.