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

Lazarus Pascal Discussion :

Piloter une application tierce : une bizarrerie que je ne m'explique pas [Lazarus]


Sujet :

Lazarus Pascal

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2015
    Messages : 23
    Par défaut Piloter une application tierce : une bizarrerie que je ne m'explique pas
    Bonjour à tous,
    le sujet à déjà été abordé et avant de poster j'ai lu ces posts relatifs à la question. Peut-être suis-je passé à côté de l'un d'eux.
    Voici mon souci : je souhaite piloter une application tierce(simulateur de vol) à partir d'un autre programme. Pour cela je dois simuler l'appuie de touches dans l'application tierce.
    Voici le source de l'unité qui est censé faire cela :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    unit u_scancode;
     
    {$mode objfpc}{$H+}
     
    interface
     
     
    procedure SendKeyPress(FScanCode, FCombinaison: integer; FAppli: string);
     
    implementation
     
    uses
      Windows, Forms;
     
    procedure SendKeyPress(FScanCode, FCombinaison: integer; FAppli: string);
    var
      whandle: hwnd;
      FVk_Code: integer;
    begin
      FVk_Code := MapVirtualKey(FScanCode, MAPVK_VSC_TO_VK); // conversion du scancode en Vk_Code correspondant;
      if Fvk_Code = 0 then
        Fvk_Code := 51;
      wHandle := findWindow(nil, 'Falcon BMS');
      SetForeGroundWindow(whandle);
      case Fcombinaison of
        0:
        begin // touche seule
          keybd_event(FVk_Code, FScanCode, 0, 0);// touche pressée
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);//Touche relevée
        end;
        1:
        begin // touche SHIFT
          keybd_event(VK_SHIFT, 42, 0, 0);
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_SHIFT, 42, KEYEVENTF_KEYUP, 0);
        end;
        2:
        begin // touche CTRL
          keybd_event(VK_CONTROL, 29, 0, 0);
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, 29, KEYEVENTF_KEYUP, 0);
        end;
        3:
        begin // touche SHIFT + CTRL
          keybd_event(VK_SHIFT, 42, 0, 0);
          SetForeGroundWindow(whandle);
          keybd_event(VK_CONTROL, 29, 0, 0);
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, 29, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_SHIFT, 42, 0, 0);
        end;
        4:
        begin // touche ALT
          keybd_event(MapVirtualKey(56, MAPVK_VSC_TO_VK), 56, 0, 0); //ALT
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(MapVirtualKey(56, MAPVK_VSC_TO_VK), 56, KEYEVENTF_KEYUP, 0);
        end;
        5:
        begin // touche SHIFT + ALT
          keybd_event(VK_SHIFT, 42, 0, 0);
          keybd_event(VK_LMENU, 56, 0, 0); //ALT
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_LMENU, 56, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_SHIFT, 42, KEYEVENTF_KEYUP, 0);
        end;
        6:
        begin // touche CTRL + ALT
          keybd_event(VK_CONTROL, 29, 0, 0);
          keybd_event(VK_LMENU, 56, 0, 0); //ALT
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_LMENU, 56, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, 29, KEYEVENTF_KEYUP, 0);
        end;
        7:
        begin // touche SHIFT + CONTROL + ALT
          keybd_event(VK_SHIFT, 42, 0, 0);
          keybd_event(VK_CONTROL, 29, 0, 0);
          keybd_event(VK_LMENU, 56, 0, 0); //ALT
          keybd_event(FVk_Code, FScanCode, 0, 0);
          keybd_event(FVk_Code, FScanCode, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_LMENU, 56, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_CONTROL, 29, KEYEVENTF_KEYUP, 0);
          keybd_event(VK_SHIFT, 42, KEYEVENTF_KEYUP, 0);
        end;
      end;
    end;
     
    end.
    A des fins de test, j'ai créé un programme afin de vérifier que le programme commandera bien le programme tiers (le simulateur de vol falcon BMS)
    Pour cela j'ai une liste de scancodes et de codes de combinaison de touches, SHIFT, ALT et CTRL associés (voir codage dans le source)
    Nom : Page-000178.png
Affichages : 297
Taille : 8,6 Ko
    La bizarrerie observée :
    1 - quand je double clique sur un item de la listbox du programme test, l'appui de la touche et de la combinaison (SHIFT, ALT, CTRL) est envoyé au programme tiers. Cela est bien vérifié dans le setup de ce dernier mais ... la commande n'est pas prise en compte en cours de vol.
    2 - Quand je clique sur le bouton test qui simule un appuie séquentiel sur toutes les touches de la liste box alors là les commandes sont reconnues en vol.

    Je ne m'explique pas pourquoi. Bien entendu, il faudrait que le programme tiers reconnaisse l'appuie d'une touche et d'une combinaison de touches SHIFT, ALT et CTRL.
    Une idée sur cette différence de fonctionnement observée à partir de la même routine ?

    Ci-joint les sources écrites sous codetyphon.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. ouvrir une application dans une application
    Par lolodev dans le forum Android
    Réponses: 0
    Dernier message: 21/10/2011, 08h57
  2. Réponses: 0
    Dernier message: 20/09/2011, 17h23
  3. Passer d'une application Java à une application web
    Par freddy000 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 02/01/2011, 14h57
  4. Réponses: 7
    Dernier message: 06/11/2008, 16h38
  5. [Joomla!] passer d'une application locale à une application web sur Joomla
    Par Gabrieel dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 15/05/2008, 18h38

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