IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

API Windows CE


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut API Windows CE
    Je tente de développer une application en c# destinée à tourner sur Windows CE 6.0

    Le problème que je rencontre c'est que je souhaiterais via cette application cacher la barre des taches windows... hors je suppose que la seule solution pour moi est d'utiliser l'API windows CE.

    Sur windows xp je sais comment faire en utilisant user32.dll et les fonctions FindWindows() et SetWindowPos().... mais sous windows CE je me retrouve devant un gros problème car user32.dll n'existe pas, j'essaye de trouver l'équivalent de ces deux fontions mais sans succès.

    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Salut; regarde ici puisque tu es un Csharpiste :
    http://social.msdn.microsoft.com/for...-9234baecd6e4/
    If you type Google into Google, you Can break the internet" - The IT Crowd

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    Merci pour ton lien cela m'a au moins permis d'identifier la dll qui pourrait m'être utile a savoir coredll.

    Malheureusement j'ai tester sans succes mon application de test permettant de cacher la barre des taches sous windows xp en remplaçant simplement "user32.dll" par "coredll.dll"... ca ne fonctionne, je n'ai aucun message d'erreur mais il ne se passe rien.

    Voila le code qui fonctionne parfaitement sous windows xp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     IntPtr handleW1;
            uint TOGGLE_HIDEWINDOW = uint.Parse("80", System.Globalization.NumberStyles.HexNumber);
            uint TOGGLE_UNHIDEWINDOW = uint.Parse("40", System.Globalization.NumberStyles.HexNumber);
    
    
            [DllImport("User32.dll")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            [DllImport("User32.dll")]
            static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
    
    
     private void cmdShow_Click(object sender, EventArgs e)
            {
                handleW1 = FindWindow("Shell_traywnd", "");
                SetWindowPos(handleW1, (IntPtr)0, 0, 0, 0, 0, TOGGLE_UNHIDEWINDOW);
            }
    
            private void cmdHide_Click(object sender, EventArgs e)
            {
                handleW1 = FindWindow("Shell_traywnd", "");
                SetWindowPos(handleW1, (IntPtr)0, 0, 0, 0, 0, TOGGLE_HIDEWINDOW);
            }
    le remplacement de user32.dll par coredll.dll ne semble pas suffisant...
    si quelqu'un a une idée je l'en remercie d'avance...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    uint TOGGLE_HIDEWINDOW = uint.Parse("80", System.Globalization.NumberStyles.HexNumber);
    On ne peut pas faire directement ceci en C#?
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    uint TOGGLE_HIDEWINDOW = 0x80;

    Et aussi: Est-ce normal que tu ne passes pas les flags SWP_NOxx ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Au passage, pour le DllImport, tu devrais rajouter SetLastError=true dans l'attribut.
    Ainsi, tu pourras utiliser Marshal.GetLastWin32Error() pour savoir pourquoi SetWindowPos() échoue...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    Concernant l'initialisation de TOGGLE_HIDEWINDOW tu avais effectivement raison ta facon de faire est beaucoup plus simple... (je précise que je débute débute en c#, a la base je faisais plutot du VB6 et en plus j'ai rarement utilisé les API...).

    Concernant Marshal.GetLastWin32Error() je précise que je développe pour le framework 2, j'ai l'impression que GetLastWin32Error() n'existe qu'a partir du framework 3.

    Je ne te cacherais pas que j'ai encore du mal avec les API aussi je suis aller voir sur msdn pour les flags SWP_NOxx. Je ne te cacherais pas que je ne suis pas certains d'avoir tout compris, ces flags sont-ils obligatoires ? . Mais a apriori cela fonctionnant sous XP je ne vois pas pourquoi cela ne fonctionnerait pas sous win CE.

    Par contre j'ai pris mon source sur le net en l'adaptant à mes besoins et je ne comprend pas ou on trouve les valeurs pour les flags (soit dans mon cas 0x40 et 0x80). Ces valeurs sont elles les mêmes pour windows xp et windows ce ?

    Merci

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par koktel_dfr Voir le message
    Concernant Marshal.GetLastWin32Error() je précise que je développe pour le framework 2, j'ai l'impression que GetLastWin32Error() n'existe qu'a partir du framework 3.
    Cette fonction existait déjà dans le Framework 1.1, et est marquée comme supportée par le .Net Compact Framework...

    Je ne te cacherais pas que j'ai encore du mal avec les API aussi je suis aller voir sur msdn pour les flags SWP_NOxx. Je ne te cacherais pas que je ne suis pas certains d'avoir tout compris, ces flags sont-ils obligatoires ? . Mais a apriori cela fonctionnant sous XP je ne vois pas pourquoi cela ne fonctionnerait pas sous win CE.
    Ben normalement, ils devraient être obligatoires, sinon ta fenêtre se retouve déplacée et avec une taille de 0x0...

    Par contre j'ai pris mon source sur le net en l'adaptant à mes besoins et je ne comprend pas ou on trouve les valeurs pour les flags (soit dans mon cas 0x40 et 0x80). Ces valeurs sont elles les mêmes pour windows xp et windows ce ?
    Aucune idée.
    Mais sous Win32, j'ai ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define SWP_SHOWWINDOW      0x0040
    #define SWP_HIDEWINDOW      0x0080
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    J'ai finalement réussi... presque deux jours pour ca bonjour la productivité
    Je trouve que ce n'est vraiment pas évident de trouver les bonnes info sur l'API windows CE, meme sur msdn, peut être est-ce moi qui ne suis pas doué mais bon...

    j'ai du remplacer "Shell_traywnd" par "HHTaskBar" mais lors du premier essaie bizarrement lorsque que je réaffichait la barre des taches après l'avoir caché une première fois elle ne prenait qu'un tier de l'écran (elle était coupée)... mais j'ai finalement trouvé une autre méthode très proche.

    Voici le code final au cas ou ca pourrait en interesser certains :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    public static class CETaskBarVisibility
             {
                 private const int SW_HIDE = 0x00;
                 private const int SW_SHOW = 0x0001;
    
                 [DllImport("coredll.dll", CharSet = CharSet.Auto)]
                 private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
                 [DllImport("coredll.dll", CharSet = CharSet.Auto)]
                 private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
    
                 [DllImport("coredll.dll", CharSet = CharSet.Auto)]
                 private static extern bool EnableWindow(IntPtr hwnd, bool enabled);
    
                 public static void ShowTaskbar()
                 {
                     IntPtr h = FindWindow("HHTaskBar", "");
                     ShowWindow(h, SW_SHOW);
                     EnableWindow(h, true);
                 }
    
                 public static void HideTaskbar()
                 {
                     IntPtr h = FindWindow("HHTaskBar", "");
                     ShowWindow(h, SW_HIDE);
                     EnableWindow(h, false);
                 }
             }
    Merci de votre aide, au final j'ai bien galéré, j'ai perdu pas mal de temps mais j'ai beaucoup appris... Cela dit les API c'est vraiment la galère quand on débute.

    mais au final

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [API Windows] Polices de caractères disponibles
    Par bebeours dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 08h28
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo