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

Macros et VBA Excel Discussion :

Tester si le clavier virtuel est ouvert VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut Tester si le clavier virtuel est ouvert VBA
    Bonjour,

    je travaille sur une macro Excel à destination d'une appli tactile.

    pour saisir les champs texte, j'ouvre le clavier virtuel Windows de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Private Sub champTexte_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    ShellExecute Application.hwnd, "open", "osk.exe", "", "", 1
     
    End Sub
    Or si le clavier virtuel est déjà lancé, il en ouvre un second ce que je ne souhaite pas.

    Merci pour votre aide,

    GLMDRX

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Manque ici une précision importante qui déterminera le choix de la vérification à faire :
    contrôles-tu :
    - uniquement l'ouverture d'une instance de ce clavier par le truchement de ton appli VBA/Excel ? (et solution alors très simple et légère, que nous verrons)
    ou
    - l'ouverture déjà existante de ce clavier, y compris par une application externe ? (et solution alors bien plus complexe et lourde)

    Dans un cas comme dans l'autre, cette discussion aurait trouvé sa place dans la section VBA/Excel et non Excel

    EDIT : une solution simple et légère existe également dans le cas 2 : Mais uniquement à condition que ton appli ne doit pas être distribuée et qu'elle ne sera exécutée que sur ta machine.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Le clavier virtuel est lancé par mon programme Excel.

    Une solution simple mais pas tres propre serait de créer un booleen du type clavierVisible que j'initialise a true quand je lance le clavier et a false quand je le ferme

    Pensez vous a une autre solution?

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Dois-je (important) interpréter ta réponse comme :
    "je ne veux "contrôler" que les instances du clavier visuel (et pas virtuel) ouvertes par mon application ?
    (la précision EST la précision)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim Clav As Long
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Private Sub champTexte_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    If Clav = 0 Then Clav = ShellExecute(Application.hwnd, "open", "osk.exe", "", "", 1)
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim Clav As Long
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Private Sub champTexte_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    If Clav = 0 Then Clav = ShellExecute(Application.hwnd, "open", "osk.exe", "", "", 1)
    End Sub
    Merci j'ai pris votre solution du coup

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut
    Citation Envoyé par unparia Voir le message
    Dois-je (important) interpréter ta réponse comme :
    "je ne veux "contrôler" que les instances du clavier visuel (et pas virtuel) ouvertes par mon application ?
    (la précision EST la précision)


    OUI je veux "contrôler" les instances du clavier visuel ouvertes par mon application

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Si la tentative de lancement du clavier par la fonction ShellExecute de la librairie Shell32 retourne une valeur inférieure ou égale à 32
    Si l'on affecte cette valeur à une variable (ici toto), :
    cette variable vaudra 0 si clavier non ouvert par ton appli. Elle vaudra de 0 à 32 inclus si tentgative infructueuse d'ouverture.
    et donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Private toto As Long
     
    Private Sub Command1_Click()
      If toto <= 32 Then
        toto = ShellExecute(Application.hwnd, "open", "osk.exe", "", "", 1)
      End If
    End Sub
    le bouton command1 ne lancera qu'une seule fois ce clavier, non ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/10/2008, 14h12
  2. Tester si un port TCP est ouvert
    Par Melodie dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 03/03/2008, 09h06
  3. Tester si une liste (SELECT) est ouverte ?
    Par Hibou57 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/07/2007, 18h59
  4. [VB6] (Pilote Isam) Tester si un fichier excel est ouvert
    Par Requin15 dans le forum VB 6 et antérieur
    Réponses: 30
    Dernier message: 20/03/2006, 17h57
  5. Tester si un fichier X est ouvert
    Par James64 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/10/2004, 15h48

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