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

Dotnet Discussion :

Envoyer une touche clavier vers une application tiers


Sujet :

Dotnet

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Envoyer une touche clavier vers une application tiers
    Bonjour,

    Je pose les bases :

    - J'ai une application tiers développée sous adobe Air. C'est en fait une sorte de diaporama codé en dur qui s'affiche full-screen sur l'écran principal, l'appui sur n'importe quelle touche du clavier fait passer au Slide suivant. Bien sûr, je n'ai pas accès au Source.

    - Je souhaite démarrer cette application air depuis ma petite appli VB.net sur le second écran (envoi vers vidéoproj), puis envoyer un événement clavier à l'appli air depuis mon appli VB.net.

    Mon code pour démarrer l'application tiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            Dim proc = New Process()
            proc.StartInfo = New ProcessStartInfo("application_tiers\DIAPORAMA.air")
            proc.Start()
            proc.WaitForExit()
     
        End Sub
    Mon code pour envoyer un événement clavier vers l'application tiers (qui est censée être l'application active) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            SendKeys.Send("{ENTER}")
        End Sub
    Mon 1er soucis, c'est que le SendKeys ne fonctionne pas parce que le click sur mon appli vb redonne le focus à mon appli et non à l'application tiers.
    Mon second soucis, c'est que je ne connais pas air, et que je ne sais pas si je peux imposer l'affichage sur le second écran.

    Est-il possible que le click sur le bouton de mon appli vb redonne le focus à l'appli tiers avant d'effectuer le sendkeys ? Comment ? Est-ce que l'utilisation de SendKeys est judicieuse dans mon cas ?

    Comment imposer l'affichage de l'appli tiers en full-screen sur le second écran ?

    Merci de votre aide.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ProIsis Voir le message
    Est-il possible que le click sur le bouton de mon appli vb redonne le focus à l'appli tiers avant d'effectuer le sendkeys ?
    Avant le SendKeys, positionner la fenètre de l'application "Air" (connais pas ce truc) en foreground depuis le code de l'appli VB.

    Un truc comme cela : (à traduire en VerBeux ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		Process appMachin = new Process();
    			appMachin.StartInfo.FileName = @"lappMachin";
    			appMachin.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    			bool started = appMachin.Start();
    			if (started)
    			{
    				SetForegroundWindow(appMachin.MainWindowHandle);
    				SendKeys.Send("{enter}");
    			}

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci pour cette première réponse Bluedeep ;-)

    Alors, j'ai trouvé un peu d'aide sur le msdn, qui rejoint ta propre réponse, mais rien de concluant pour le moment.

    Au passage, le .air est un installateur, un peu comme le .msi, et il en résulte un dossier contenant le .exe qui m'intéresse (c'est du FLEX et ça s'appuie sur un fichier .swf).

    Voilà, mon code à présent :
    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
    31
    32
    33
    34
     
    Public Class Form1
     
        ' Get a handle to an application window.
        Declare Auto Function FindWindow Lib "USER32.DLL" ( _
            ByVal lpClassName As String, _
            ByVal lpWindowName As String) As IntPtr
     
        ' Activate an application window.
        Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _
            (ByVal hWnd As IntPtr) As Boolean
     
     
        Public proc As New Process()
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            proc = New Process()
            proc.StartInfo = New ProcessStartInfo("application_tiers\DIAPORAMA\DIAPORAMA.exe")
            proc.Start()
     
        End Sub
     
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim proc_is_on As IntPtr = FindWindow("DIAPORAMA", "DIAPORAMA.exe")
     
            If proc_is_on = IntPtr.Zero Then
                MsgBox("L'application tiers n'est pas démarrée.")
                Return
            End If
     
            SetForegroundWindow(proc_is_on)
            SendKeys.Send("{ENTER}")
        End Sub
    End Class
    Le FindWindows, en l'état, ne détecte pas l'application et m'affiche la msgbox...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    C'est Bon, mon code fonctionne, c'est juste le nom de la classe et le nom de la fenêtre qui n'étaient pas bons...

    Un petit coup de SPY++ et j'ai remis les pendules à l'heure :-)

    Donc, mon soucis N°1 (démarrer une application tiers et lui envoyer des events clavier) est résolu !

    Par contre, reste toujours le soucis de faire démarrer cette appli full-screen (c'est déjà le cas) sur l'écran secondaire et non sur l'écran principal...

    Si vous avez des infos, je suis preneur ;-)

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ProIsis Voir le message
    C'est Bon, mon code fonctionne, c'est juste le nom de la classe et le nom de la fenêtre qui n'étaient pas bons...

    Un petit coup de SPY++ et j'ai remis les pendules à l'heure :-)

    Donc, mon soucis N°1 (démarrer une application tiers et lui envoyer des events clavier) est résolu !

    Par contre, reste toujours le soucis de faire démarrer cette appli full-screen (c'est déjà le cas) sur l'écran secondaire et non sur l'écran principal...

    Si vous avez des infos, je suis preneur ;-)
    Pas d'infos là dessus mais après recherche sur le net,on trouve quelques discussions sur le sujet :
    http://superuser.com/questions/40811...nitor-arrangem

    http://www.realtimesoft.com/multimon...pic=7851&tmpl=

    Apparemment un outil appelé UltraMon a l'air de faire le taf (j'ai juste lu en diagonal).

    La recherche google avec "windows start a program on a specific monitor" retourne des résultats.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. msgbox comportant une touche OUI et une touche NON.
    Par DJ FA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2012, 22h18
  2. Réponses: 0
    Dernier message: 18/11/2011, 19h14
  3. Réponses: 0
    Dernier message: 07/06/2009, 12h31
  4. Réponses: 11
    Dernier message: 30/09/2008, 20h52
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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