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

Langage Delphi Discussion :

Comment Désactiver un device ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut Comment Désactiver un device ?
    Bonjour a tous,

    J'ai utilisé la Jedi VCL pour lister tous les devices connectés à mon PC, voici le code qui permet de le faire :
    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
    procedure TForm1.Button1Click(Sender: TObject);
     
       function DeviceTypeToString(DeviceType: UINT): String;
       begin
         case DeviceType of
           RIM_TYPEMOUSE: Result := 'Mouse';
           RIM_TYPEKEYBOARD: Result := 'Keyboard';
           RIM_TYPEHID: Result := 'Other HID';
         else
           Result := 'Invalid device type';
         end;
       end;
     
    var NumDevices, MinBufferLength: UINT;
        DeviceList: array of RAWINPUTDEVICELIST;
        I: Integer;
        DeviceListEntry: RAWINPUTDEVICELIST;
        DeviceName: String;
    begin
      MinBufferLength := 0;
      NumDevices := 0;
     
      //Get number of devices
      GetRawInputDeviceList(nil, NumDevices, SizeOf(RAWINPUTDEVICELIST));
     
     //Prepare device list
      SetLength(DeviceList, NumDevices);
     
     //Fill device list
      GetRawInputDeviceList(@DeviceList[0], NumDevices,      SizeOf(RAWINPUTDEVICELIST));
     
      //Output info
      for I := Low(DeviceList) to High(DeviceList) do begin
        DeviceListEntry := DeviceList[I];
        Memo1.Lines.Add(DeviceTypeToString(DeviceListEntry.dwType));
        Memo1.Lines.Add('Handle: 0x' + IntToHex(DeviceListEntry.hDevice, 0));
     
      end;
    Mon problème, est d'avoir la possibilité de désactivé, dans mon exe, un device (douchette USB) parmis cette liste.

    Connaissez-vous une fonction MSDN ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    La réponse est simple : tu ne peux pas

    Par contre, tu l'as constaté, tu peux détecter les inputs de différentes manières.

    Dans l'ordre de gestion (sauf erreur) cela donne:

    • Evénements de la fiche,
    • (WM_TOUCH),
    • Raw input,
    • Hook,
    • Hook de bas niveau.


    Chacun agissant à différents niveaux et ayant ces avantages et inconvénients (modification du message, détection du device, détection du type de click (souris, touch, pen), multi-touch, etc.)

    L'exemple que tu donnes est en effet celui à utiliser pour détecter le device. A toi ensuite de mettre en route un procédé pour filtrer et gérer ces messages en remplacement de la gestion standard fournie par Delphi

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Merci tout d'abord pour votre réponse, c'est la première fois que j'utilise les MSDN, donc je suis un peux perdus.

    C'est cette information, que j'ai trouvé dans le site de microsoft, à laquelle je me suis basé :

    Through the dwFlags member of RAWINPUTDEVICE, an application can select the devices to listen to and also those it wants to ignore. For example, an application can ask for input from all telephony devices except for answering machines. For sample code, see Registering for Raw Input.
    Bon j'ai commencé par enregistrer les devices (supposons que se sont des keybords) :

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      RegisterList: array of RAWINPUTDEVICE;
      Idx: Integer;
     
    begin
      SetLength(RegisterList, 0);
     
        if KeyboardCheck.Checked then begin
        SetLength(RegisterList, Length(RegisterList) + 2);
        Idx := Length(RegisterList) - 1;
        // (generic?) Keyboard
        RegisterList[Idx].usUsagePage := $1;
        RegisterList[Idx].usUsage := $6;
        RegisterList[Idx].hwndTarget := Self.Handle;
     
      end;

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Là tu as rempli la structure d'enregistrement. Il manque encore l'appel proprement dit : RegisterRawInputDevices.

    Ensuite, il faut intercepter le message WM_INPUT, gérer les infos avec GetRawInputData et GetRawInputDeviceInfo et remplir les champs manuellement.
    Les messages de type WM_KEYDOWN, WM_KEYUP doivent être filtrés pour ne pas interférer avec la nouvelle gestion. Ce n'est pas automatique.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour Andnotor,

    Franchement Voici le max que j'ai pu faire :
    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      RegisterList: array of RAWINPUTDEVICE;
      Idx: Integer;
     
    begin
      SetLength(RegisterList, 0);
     
        if KeyboardCheck.Checked then begin
        SetLength(RegisterList, Length(RegisterList) + 2);
        Idx := Length(RegisterList) - 1;
        // (generic?) Keyboard
        RegisterList[Idx].usUsagePage := $1;
        RegisterList[Idx].usUsage := $6;
        RegisterList[Idx].hwndTarget := Self.Handle;
        RegisterList[Idx].dwFlags := RIDEV_INPUTSINK;
     
        //(generic?) Keypad
        RegisterList[Idx-1].usUsagePage := $1;
        RegisterList[Idx-1].usUsage := $7;
        RegisterList[Idx-1].hwndTarget := Self.Handle;
        RegisterList[Idx-1].dwFlags := RIDEV_INPUTSINK;
        end;
     
         if (Length(RegisterList) > 0) and
         (RegisterRawInputDevices(@RegisterList[0],
                               Length(RegisterList),
                               SizeOf(RAWINPUTDEVICE))) then begin
          Memo1.Lines.Add('Capturing mouse and keyboard...')
          end else begin
            Memo1.Lines.Add('Failed to register raw input devices!');
          end;
     
          SetLength(RegisterList, 0);
     
    end;
     
     (*
     * Description:
     *   Handles any incoming WM_INPUT messages.
     *
     *)
    procedure TForm1.OnRawInput(var Msg: TMessage);
    var  Input: RAWINPUT;
         BufferSize: UINT;
    begin
      //Find out the size of the raw input data
     GetRawInputData(Msg.LParam,
                     RID_INPUT,
                     nil,
                     BufferSize,
                     SizeOf(RAWINPUTHEADER));
     
     if GetRawInputData(Msg.LParam,
                        RID_INPUT,
                        @Input,
                        BufferSize,
                        SizeOf(RAWINPUTHEADER)) = BufferSize then begin
         //We may now process the raw input data, depending on its type.
         case Input.Header.dwType of
     
           RIM_TYPEKEYBOARD: HandleKeyboardInput(Input);
     
         end;
      end else begin
        //GetRawInputData has failed
        Memo1.Lines.Add('Failed to retrieve the raw input data.');
     end;
    end ; // procedure TfrmMain.OnRawInput(var Msg: TMessage);
     
    (*
     * Description:
     *   Processes raw input that came from a keyboard.
     *
     *)
    procedure TForm1.HandleKeyboardInput(Input: RAWINPUT);
     
      function GetKeyboardInputInfoString(Data: RAWKEYBOARD): String;
      const
        Sep = ', ';
      var
        Flags: String;
      begin
         Flags := '';
         if IsBitFlagSet(RI_KEY_MAKE, Data.Flags) then
           Flags := Flags + 'RI_KEY_MAKE' + Sep;
         if IsBitFlagSet(RI_KEY_BREAK, Data.Flags) then
           Flags := Flags + 'RI_KEY_BREAK' + Sep;
         if IsBitFlagSet(RI_KEY_E0, Data.Flags) then
           Flags := Flags + 'RI_KEY_E0' + Sep;
         if IsBitFlagSet(RI_KEY_E1, Data.Flags) then
           Flags := Flags + 'RI_KEY_E1' + Sep;
         if IsBitFlagSet(RI_KEY_TERMSRV_SET_LED, Data.Flags) then
           Flags := Flags + 'RI_KEY_TERMSRV_SET_LED' + Sep;
         if IsBitFlagSet(RI_KEY_TERMSRV_SHADOW, Data.Flags) then
           Flags := Flags + 'RI_KEY_TERMSRV_SHADOW' + Sep;
         Flags := '[' + Copy(Flags, 1, Length(Flags) - Length(Sep)) + ']';
     
         Result := 'MakeCode: 0x' + IntToHex(Data.MakeCode, 0) +
                   '  Flags: ' + Flags +
                   '  VKey: 0x' + IntToHex(Data.VKey, 0) +
                   '  Message: 0x' + IntToHex(Data.Message, 0) +
                   '  ExtraInfo: 0x' + IntToHex(Data.ExtraInformation, 0);
     
      end;
     
    begin
      Memo1.Lines.Add('Keyboard input from device 0x' +
                       IntToHex(Input.Header.hDevice, 0) + ': ' +
                       GetKeyboardInputInfoString(Input.keyboard));
     
    end;
     
    (*
     * Description:
     *   Returns true if the bits specified by "Flag" are set in the value specified
     *   by "Data".
     *
     *)
    function TForm1.IsBitFlagSet(Flag, Data: Word): Boolean;
    begin
      Result := (Data and Flag) = Flag;
    end;
    J'ai pas pu modifier manuellement le WM_INPUT, Bon mon soucis principale c'est de filtrer tous les messages d'un device donné. Je crois que c'est la procédure wndProc. mais je me bloque la dessus. j'ai pas de doc

    Please du help au niveau du code, Merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Pour que le traitement standard (WM_KEYDOWN, WM_KEYUP) ne soit pas effectué, il faut mettre dwFlags := RIDEV_NOLEGACY.

    Ensuite, ben... tu as déjà presque tout !

    Il faut encore contrôler que le hDevice soit autorisé à agir sur ton application (clavier mais pas douchette) et ensuite gérer les informations reçues. MakeCode est le ScanCode et VKey le virtual key code. Donc tout ce qu'il te faut pour traiter un caractère. Plus qu'à l'envoyer à l'ActiveControl

  7. #7
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour Andnotor,

    Le problème est que dwFlags := RIDEV_NOLEGACY agit sur toute une classe de device, moi j'en ai deux douchettes (même UsUsagePage et UsUsage) je veux filtrer une seule .

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Tu ne peux pas au niveau de l'enregistrement. Ce n'est qu'au traitement de WM_INPUT que tu peux faire le tri (tester hDevice), "rooter" les messages utiles et ignorer les autres.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Toujours le même problème le mot ignorer me gène un peux, car je ne trrouve pas les bonne méthodes

    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
    begin
     
      //trie de hDevice !!!!!!!!!!!
     
      if (Input.header.hDevice = 65637) then begin
        Memo1.Lines.Add('Keyboard input from device 0x' +
                       IntToHex(Input.Header.hDevice, 0) + ': ' +
                       GetKeyboardInputInfoString(Input.keyboard));
      end
      else begin
     
          // je ne trouve pas koi mettre ici pour ignorer la saisie des autres claviers.
     
      end;
     
    end;

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Bon j'ai fait un essai avec 2 claviers. Voilà ce que ça donne.

    Pour tester: un nouveau projet avec un CheckListBox pour la sélection du(des) clavier(s) et quelques TEdit et TMemo, uniquement pour le contrôle de saisie.

    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
    139
    140
    141
    142
    143
    144
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, CheckLst, JwaWinUser, Registry, StrUtils;
     
    type
      TForm1 = class(TForm)
        CheckListBox1: TCheckListBox;
        Memo1: TMemo;
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        function GetDeviceDesc(aName :string) :string;
        procedure WMInput(var Message :TMessage); message WM_INPUT;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    //Description du Device (Base des registres)
    function TForm1.GetDeviceDesc(aName :string) :string;
    var
      Reg :TRegistry;
     
    begin
      //Supprime \??\ et le GUID de fin
      aName := Copy(aName, 5, LastDelimiter('#', aName) -5);
      //Remplace # par \
      aName := StringReplace(aName, '#', '\', [rfReplaceAll]);
     
      Reg := TRegistry.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
     
        if Reg.OpenKeyReadOnly('SYSTEM\CurrentControlSet\Enum\' +aName)
        then Result := Reg.ReadString('DeviceDesc')
        else Result := '<Unknown>';
      finally
        Reg.Free;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      RawsList   :array of TRawInputDeviceList;
      RIDList    :array[0..0] of TRawInputDevice;
      RIDInfo    :TRidDeviceInfo;
      DeviceName :string;
      Count      :cardinal;
      Size       :dword;
      i          :integer;
     
    begin
      //Détermine le nombre de device
      GetRawInputDeviceList(nil, Count, SizeOf(TRawInputDeviceList));
     
      if Count > 0 then
      begin
        //Récupère la liste des devices
        SetLength(RawsList, Count);
        GetRawInputDeviceList(@RawsList[0], Count, SizeOf(TRawInputDeviceList));
     
        for i := 0 to Count -1 do
        begin
          //Récupère le type du device
          Size := SizeOf(TRidDeviceInfo);
          RIDInfo.cbSize := Size;
          GetRawInputDeviceInfo(RawsList[i].hDevice, RIDI_DEVICEINFO, @RIDInfo, Size);
     
          //Ne concerve que les claviers
          case RIDInfo.dwType of
            RIM_TYPEKEYBOARD : begin
                                 //Nom interne du device
                                 GetRawInputDeviceInfo(RawsList[i].hDevice, RIDI_DEVICENAME, nil, Size);
                                 SetLength(DeviceName, Size);
                                 GetRawInputDeviceInfo(RawsList[i].hDevice, RIDI_DEVICENAME, @DeviceName[1], Size);
     
                                 //Ne prend pas en compte les infos pour Terminal Server
                                 if StartsStr('\??\Root', DeviceName) then Continue;
     
                                 //Ajout à la liste (Object est rempli avec hDevice pour contrôle dans WM_INPUT)
                                 CheckListBox1.AddItem(GetDeviceDesc(DeviceName), pointer(RawsList[i].hDevice));
                               end;
          end;
        end;
     
        //Tous actif par défaut
        CheckListBox1.CheckAll(cbChecked);
     
        //S'enregistre pour la réception des messages clavier
        RIDList[0].usUsagePage := $01;
        RIDList[0].usUsage     := $06;
        RIDList[0].dwFlags     := RIDEV_NOLEGACY;  //Ne génère pas WM_KEYDOWN, WM_KEYUP !!!
        RIDList[0].hwndTarget  := Handle;
     
        if not RegisterRawInputDevices(@RIDList[0], Length(RIDList), SizeOf(TRawInputDevice)) then
          RaiseLastOSError;
      end;
    end;
     
    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;
     
    end.

  11. #11
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Merci bien Andnotor pour votre travaille que je vois excellent, c'est quelle version de delphi ?, car chez moi sous delphi7, StartsStr et chechListBox1.checkAll (cbChecked) ne marche pas.


    Merci

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    XE mais peu importe. Tu peux commenter ces 2 lignes

  13. #13
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour Andnotor,

    Merci infiniment pour votre bout de code, heureusement pour moi le traitement de la douchette était exactement comme celui du clavier.

    Pour cela on peut dire que c'est Résolu. Ca reste un petit souci: je vois pas pourquoi le focus du clavier est toujours sur la fenêtre ou il ya le code même si elle est fermée. De ce fait je ne peux travailler que sur une seule fenêtre du programe

    Merci

  14. #14
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Ce que je fait est, pour chaque nouvelle fiche je fais appelle au code, dans son évènement OnActivate

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 764
    Points : 13 386
    Points
    13 386
    Par défaut
    Citation Envoyé par sniperpro Voir le message
    Ce que je fait est, pour chaque nouvelle fiche je fais appelle au code, dans son évènement OnActivate
    Et bien c'est faux

    La seule chose que tu fais est de "hooker" inutilement plusieurs fois le clavier.
    Même si une fenêtre est inactive, TForm.ActiveControl est toujours valide et représente le Control qui aurait la focalisation si la fiche était active ! Ta frappe sera donc répercutée sur chaque fiche dans chaque contrôle "actif".

    If faudrait au minimum dans la gestion du WM_INPUT faire un test sur Screen.ActiveForm = Self pour se limiter à la fiche en cours.

    Mais place plutôt RegisterRawInputDevices sur une seule fiche et utilise Screen.ActiveControl. Cela te donnera le contrôle actif à travers toute l'application.
    Le mieux serait même d'avoir une fenêtre Message-only dédiée à cette tâche

  16. #16
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Bonjour à tous,

    Bon la question est posée sur le forum, mais c'est dédiée à Andnotor

    Je suis entrain d'exploiter ton code avec un lecteur de code à barre et c'est parfait pour le moment.

    Sauf que dans mon Edit, le lecteur ajoute un "C" à la fin que je ne comprends pas son origine : par exemple si le code à barre est : 115 le lecteur m'affiche 115C , sachant qu'il fonctionne normalement dans d'autre applications.

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    115C sacré morceau

    Citation Envoyé par sniperpro Voir le message
    sachant qu'il fonctionne normalement dans d'autre applications.
    D'autres applications que tu as écrites ?
    Si tu utilises un simple TEdit dans un projet de test sans rien d'autres, tu as le C ou pas ?
    Est-ce toujours C ou ça change selon si 115, 116 ...

    Tu utilise quelques type de code barre Alpha39, Code128 ?

  18. #18
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    D'autres applications que tu as écrites ?
    Bon je voulais dire même sur un éditeur de texte tel que bloc note, ca marche sans le "C"

    Si tu utilises un simple TEdit dans un projet de test sans rien d'autres, tu as le C ou pas ?
    En integrant le code de Andnotor, plus haut, dans le projet de test, j'ai le "C" dans le TEdit.

    Est-ce toujours C ou ça change selon si 115, 116
    Oui, j'en ai toujours le "C".

    Tu utilise quelques type de code barre Alpha39, Code128 ?
    J'utilise le type code39.

  19. #19
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Oh, c'était un paramétrage de la douchette (Suffix ON)

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

Discussions similaires

  1. Comment désactiver les actions automatiques de Windows ?
    Par j-phi dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 06/01/2005, 12h53
  2. [Serveur] Comment désactiver un "timeout" ?
    Par Johnbob dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 4
    Dernier message: 04/12/2004, 01h24
  3. [Warning] comment désactiver un Warning précis?
    Par bigboomshakala dans le forum MFC
    Réponses: 5
    Dernier message: 01/06/2004, 16h07
  4. Réponses: 8
    Dernier message: 24/07/2003, 10h45
  5. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 13h34

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