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

API, COM et SDKs Delphi Discussion :

Connaître le périphérique transmetteur


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut Connaître le périphérique transmetteur
    Bonjour à tous,

    Ma question est simple. Dans l’événement onkeypress d'un Tedit, comment connaître le périphérique transmetteur (clavier,douchette..) ? J'ai vu que l'objet Tapplicationevents sert à contenir les événements de l'application, mais je ne sais pas comment l'utiliser .

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Je ne suis pas sûr que ce soit possible. A ce niveau, en tout cas.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Deux discussions qui pourraient te donner des pistes
    http://www.developpez.net/forums/d38...igine-donnees/
    http://www.developpez.net/forums/d15...ur-code-barre/

    Cordialement

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Je crains que ce ne soit possible qu'en gérant les périphériques (de tête, donc syntaxe pê mal restituée) au niveau RawInput sur le modèle des drivers HID ou de la gestion de ce style d'I/O. Voir pê ici : http://www.usb.org/developers/hidpage/microhid/. Les n° de HID seront différents entre clavier et douchette, alors que leurs drivers oublieront l'origine en sortie.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    bonjour à tous et merci pour vos réponses. Malheureusement aucun des liens ne résout mon problème. Pour faire simple, est-ce que une application delphi peut trouver le périphérique transmetteur?

  6. #6
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Salut
    Si mes souvenirs sont exacts, pour Delphi, la douchette EST le clavier. En d'autres termes, il faut utiliser l'évènement Keypressed de la form.
    solilog

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Comme le dit tourlourou, il est possible de faire une distinction entre systèmes de saisie par RawInput. Voici un exemple.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    l'unité "JwaWinUser" n'existe pas dans delphi xe2

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par chekkal Voir le message
    l'unité "JwaWinUser" n'existe pas dans delphi xe2
    Librairie JEDI.

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Je comptais bien sur la mémoire et les compétences d'Andnotor sur ce sujet !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    j'ai télécharger la bibliothèque "JEDI", mais j'ai pas voulu l'installer en entier, alors j'ai récuperé cette procedure
    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
    procedure TForm1.WMInput(var Message :TMessage);
    var
      Data :PRawInput;
      Size :dword;
      i    :integer;
     
    begin
      Message.Result := 1;
     
      if Assigned(ActiveControl) then
      begin
        GetRawInputData(Message.LParam, RID_INPUT, nil, Size, SizeOf(TRawInputHeader));
        GetMem(Data, Size);
     
        if GetRawInputData(Message.LParam, RID_INPUT, Data, Size, SizeOf(TRawInputHeader)) = Size then
        begin
          //Est-ce un clavier ?.. (ça devrait, mais pour être sûr !)
          if Data.header.dwType = RIM_TYPEKEYBOARD then
          begin
            //...oui. Ce handle est dans notre liste ?..
            i := CheckListBox1.Items.IndexOfObject(pointer(Data.header.hDevice));
     
            //...oui. Est-il coché ?..
            if (i > -1) and CheckListBox1.Checked[i] then
            begin
              //...oui => Traitement du WM_KEYDOWN
              if Data.keyboard.Message = WM_KEYDOWN then
                ActiveControl.Perform(WM_CHAR, Data.keyboard.VKey, 0);
     
              Message.Result := 0;
            end;
          end;
        end;
      end;
    end;
    qui m’intéresse particulièrement parce-que je veut seulement récupérer le périphérique transmetteur,mais le problème maintenant c'est quoi "Message"

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Cette procédure seule ne sert à rien si tu ne demandes pas spécifiquement à recevoir WM_INPUT par RegisterRawInputDevices.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    mais comment l'utliser dans un onkeypress d'un Tedit.
    par ailleurs, j'ai trouvé cette partie d'instructions traitant du sujet sans utiliser JEDI,mais j'arrive pas à l'exploiter
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    type
      TMyCustomControl = class(TCustomControl)
        ..
      protected
        ..
        procedure CreateWindowHandle(const Params: TCreateParams); override;
        procedure WMInput(var Message: TMessage); message WM_INPUT;
      ..
      end;
     
    uses
      types;
     
    type
      tagRAWINPUTDEVICE = record
        usUsagePage: USHORT;
        usUsage: USHORT;
        dwFlags: DWORD;
        hwndTarget: HWND;
      end;
      RAWINPUTDEVICE = tagRAWINPUTDEVICE;
      TRawInputDevice = RAWINPUTDEVICE;
      PRawInputDevice = ^TRawInputDevice;
      LPRAWINPUTDEVICE = PRawInputDevice;
      PCRAWINPUTDEVICE = PRawInputDevice;
     
    function RegisterRawInputDevices(
      pRawInputDevices: PCRAWINPUTDEVICE;
      uiNumDevices: UINT;
      cbSize: UINT): BOOL; stdcall; external user32;
     
    const
      GenericDesktopControls: USHORT = 01;
      Keyboard: USHORT = 06;
      RIDEV_INPUTSINK = $00000100;
     
    procedure TMyCustomControl.CreateWindowHandle(const Params: TCreateParams);
    var
      RID: TRawInputDevice;
    begin
      inherited;
     
      RID.usUsagePage := GenericDesktopControls;
      RID.usUsage := Keyboard;
      RID.dwFlags := RIDEV_INPUTSINK;
      RID.hwndTarget := Handle;
      Win32Check(RegisterRawInputDevices(@RID, 1, SizeOf(RID)));
    end;
     
    type
      HRAWINPUT = THandle;
     
    function GetRawInputData(
      hRawInput: HRAWINPUT;
      uiCommand: UINT;
      pData: LPVOID;
      var pcbSize: UINT;
      cbSizeHeader: UINT): UINT; stdcall; external user32;
     
    type
      tagRAWINPUTHEADER = record
        dwType: DWORD;
        dwSize: DWORD;
        hDevice: THandle;
        wParam: WPARAM;
      end;
      RAWINPUTHEADER = tagRAWINPUTHEADER;
      TRawInputHeader = RAWINPUTHEADER;
      PRawInputHeader = ^TRawInputHeader;
     
      tagRAWKEYBOARD = record
        MakeCode: USHORT;
        Flags: USHORT;
        Reserved: USHORT;
        VKey: USHORT;
        Message: UINT;
        ExtraInformation: ULONG;
      end;
      RAWKEYBOARD = tagRAWKEYBOARD;
      TRawKeyboard = RAWKEYBOARD;
      PRawKeyboard = ^TRawKeyboard;
      LPRAWKEYBOARD = PRawKeyboard;
     
    //- !!! bogus declaration below, see winuser.h for the correct one
      tagRAWINPUT = record
        header: TRawInputHeader;
        keyboard: TRawKeyboard;
      end;
    //-
      RAWINPUT = tagRAWINPUT;
      TRawInput = RAWINPUT;
      PRawInput = ^TRawInput;
      LPRAWINPUT = PRawInput;
     
    const
      RIM_INPUT = 0;
      RIM_INPUTSINK = 1;
      RID_INPUT = $10000003;
      RIM_TYPEKEYBOARD = 1;
      RI_KEY_MAKE = 0;
      RI_KEY_BREAK = 1;
     
    procedure TMyCustomControl.WMInput(var Message: TMessage);
    var
      Size: UINT;
      Data: array of Byte;
      RawKeyboard: TRawKeyboard;
    begin
      if (Message.WParam and $FF) in [RIM_INPUT, RIM_INPUTSINK] then
        inherited;
     
      if not Focused and
          (WindowFromPoint(SmallPointToPoint(SmallPoint(GetMessagePos))) = Handle) and
          (GetRawInputData(Message.LParam, RID_INPUT, nil, Size,
          SizeOf(TRawInputHeader)) = 0) then begin
        SetLength(Data, Size);
        if (GetRawInputData(Message.LParam, RID_INPUT, Data, Size,
            SizeOf(TRawInputHeader)) <> UINT(-1)) and
            (PRawInput(Data)^.header.dwType = RIM_TYPEKEYBOARD) then begin
          RawKeyboard := PRawInput(Data)^.keyboard;
     
          if (RawKeyboard.VKey = VK_CONTROL) then begin
            if RawKeyboard.Flags and RI_KEY_BREAK = RI_KEY_BREAK then
              Cursor := crDefault
            else
              Cursor := crSizeAll; // will call continously until key is released
          end;
          // might opt to reset the cursor regardless of pointer position...
     
     
          if (RawKeyboard.VKey = VK_MENU) then begin
            ....
          end;
     
        end;
     
      end;
    end;

Discussions similaires

  1. Comment connaitre l'address IP d'un périphérique
    Par pierrot10 dans le forum Windows 7
    Réponses: 3
    Dernier message: 06/04/2016, 12h43
  2. comment savoir le périphérique transmetteur
    Par chekkal dans le forum Débuter
    Réponses: 6
    Dernier message: 22/12/2013, 11h48
  3. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 10h05
  4. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48
  5. Connaitre le nom des imprimantes
    Par bastien dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2002, 16h36

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