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 Forms Discussion :

[C#][.NET] Commande Affiche le bureau


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Xno
    Xno est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut [C#][.NET] Commande Affiche le bureau
    Bonjour à tous!

    L'objet de ce post est que j'ai un petit souci dans une de mes applications .NET:

    J'ai une 1ère application, disons App1, qui sert à gérer entre autres d'autres applications. Elle est minimisée dès son démarrage et apparaît sous la forme d'un icône dans le systray. App1 sert à relancer certaines applications externes lorsque leur code de sortie n'est pas valide.

    Comme je veux laisser à l'utilisateur la possibilité de lancer une nouvelle application (gérée par App1) tout seul, il y a un raccourci vers ma 2ème application, disons App2, qui permet d'envoyer un message à App1 lorsqu'il y a une application externe à lancer. Je ne peux pas faire un raccourci directement sur App1 car elle est active tout le temps.

    Tout ça fonctionne trés bien, mais j'ai un problème avec le raccourci 'Afficher le bureau' qui se trouve dans le menu de démarrage rapide. Lorsque j'affiche le bureau, donc toutes les applications sont minimisées, puis que je clique sur le raccourci de App2, mon application externe est bien lancée par App1, mais ne s'affiche pas! Elle est comme minimisée.

    Voici le code que j'utilise pour lancer une application externe depuis App1 :

    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
     
    <div style="margin-left:40px">Process p = null;
    ProcessStartInfo psi = null;
     
    try
    {
    <div style="margin-left:40px">psi 			= new ProcessStartInfo();
    psi.FileName		= "notepad.exe";
    psi.Arguments		= "";
    psi.CreateNoWindow  	= false;
    psi.UseShellExecute 	= false;
     
    p = Process.Start( psi );
     
    p.WaitForExit();
     
    p.Close();
    p = null;</div>}
    catch
    {
    }</div>
    J'ai essayé avec le paramètre UseShellExecute à true pour voir, mais sans succès.

    Ce que je voudrais connaître, c'est que fait Windows lorsque l'utilisateur appuie sur le raccourci 'Afficher le bureau'?


    Merci.


  2. #2
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Youhou! ça m'intéressait aussi!
    réponse
    Bonne prog !

  3. #3
    Xno
    Xno est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut
    Merci pour ta réponse Bapt.ice !

    Cette fonction permet effectivement de switcher entre l'affichage du bureau et les fenêtres actives.

    Le souci est que cela ne résout qu'à moitié mon problème car je ne sais pas comment faire pour savoir si l'utilisateur a cliqué sur le raccourci ou pas, et donc dans quel état est le bureau. Car, en fait, il faudrait que j'appelle la méthode ToggleDesktop que si l'utilisateur a activé l'affichage du bureau au 1er plan.

    J'ai effectué quelques tests: Comme Windows fait un SetForegroundWindow sur le bureau lorsque l'on clique sur ce raccourci, j'ai essayé de comparer le handle du bureau avec le handle donné par la fonction GetForegroundWindow, mais je n'ai pas eu de résultats concordants.

    Solution trouvée: Cela va être de la bidouille, mais ça fonctionne, jusqu'à ce que Microsoft nous fournisse de vrais outils avec de vrais fonctions utiles... Je me suis rendu compte qu'en cliquant sur la barre des tâches avant le lancement de mon application externe, tout fonctionnait! Donc, juste avant que mon app1 lance mon appli externe, j'émule un clic gauche de la souris sur la barre des tâches. Mais attention, cela ne fonctionne pas sur tous les éléments de la barre des tâches!!!

    Voici le code:

    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
     
    IntPtr childHandle = FindWindowEx( IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", IntPtr.Zero );
    if( childHandle != IntPtr.Zero )
    {
    	childHandle = FindWindowEx( childHandle, IntPtr.Zero, "ReBarWindow32", IntPtr.Zero );
    	if( childHandle != IntPtr.Zero )
    	{
    		childHandle = FindWindowEx( childHandle, IntPtr.Zero, "ToolbarWindow32", IntPtr.Zero );
    		if( childHandle != IntPtr.Zero )
    		{
    			User32.SendMessage( childHandle, Constants.WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero );
    			Thread.Sleep( 100 );
    			User32.SendMessage( childHandle, Constants.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero );
    		}
    	}
    }
    Il faut aller chercher la zone où les applications se mettent lorsqu'elles sont actives. La fonction SendMessage est une fonction Interop, elle n'est pas native .NET. Idem pour mes WM_LBUTTONDOWN et WM_LBUTTONUP.

    Voilà, mon pb est résolu.

  4. #4
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Cool, ms j'y comprends pas grand chose, tanpis.
    Dsl hier j'avais mal lu ton problème, j'ai cependant une petite question idiote : est-ce que ton appli2 lancée par App1 est une WinForm, si oui as-tu vérifié dans les propriétés qu'elle s'ouvre en "agrandie"?
    En fait, tu as un raccourci sur ton bureau vers l'App1 avec, en paramètres, le path de l'App2 à lancé ? (c'était histoire de bien comprendre :p )
    A+

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

Discussions similaires

  1. [VB.NET] Command Name dans un datagrid
    Par Sadneth dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/11/2005, 11h11
  2. [CR][vb.net]access afficher une image
    Par dankes dans le forum SDK
    Réponses: 8
    Dernier message: 04/10/2005, 09h55
  3. [vb.net][html] afficher une page html dans une interface vb?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/09/2005, 17h31
  4. [VB.NET] [WinForms] Afficher un rectangle sur une image
    Par Noodles dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/12/2004, 10h36

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