Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Envoyer une chaîne de caractères à une application

30/11/2008
Envoyer au bloc-notes ou à un navigateur tout un bloc de texte automatiquement est possible sur Windows en utilisant les API.

Cela reste même assez simple, dans l'absolu, à réaliser : il faut simuler l'appui des touches sur le clavier après avoir activé l'application concernée.
Cependant, quelques difficultés peuvent se poser pour :
- les caractères en majuscules ou nécessitant l'appui de la touche Control ou ALT
- les caractères accentués nécessitant l'appui de la touche ^/¨

Voici un script permettant de gérer tout cela : elle envoie à l'application active n'importe quel texte en prenant en compte les spécificités du français.

void envoieChaineVersApplicationActive(AnsiString Chaine)
    {
    // Caractères accentués : l'extraction de touche ne fonctionne pas
    AnsiString CarAvecAccents="âäêëîïôöûüÿ";
    AnsiString CarSansAccents="aaeeiioouuy";
    AnsiString CarToucheShift="01010101011";
    for (int i=1; i<Chaine.length; i++)
        {
        AnsiString Car=Chaine.SubString(i,1);
        int ValAscii=*(Car.c_str());
        int iTouche=VkKeyScan(ValAscii);
        if (iTouche==-1)
            {
            // Caractères accentués minuscules : ë, ê...
            int iPos=CarAvecAccents.AnsiPos(Car);
            if (iPos!=0)
                ValAscii=*(CarSansAccents.SubString(iPos,1).c_str());
            else
                // Caractères accentués majuscules : Ë, Â...
                {
                iPos=(CarAvecAccents.UpperCase()).AnsiPos(Car);
                if (iPos!=0)
                    ValAscii=*(CarSansAccents.SubString(iPos,1).UpperCase().c_str());
                }
           
            if (iPos!=0)
                {
                // Recherche la valeur de touche du caractère non accentué
                iTouche=VkKeyScan(ValAscii);
                // Touche Shift appuyée ?
                if (CarToucheShift.SubString(iPos,1)=="1")
                    keybd_event(VK_SHIFT, 0, 0,0);
                // Touche OEM
                keybd_event(VK_OEM_6,26,0,255);
                keybd_event(VK_OEM_6,26,KEYEVENTF_KEYUP,255);

                // Touche Shift appuyée ?
                if (CarToucheShift.SubString(iPos,1)=="1")
                    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
                }
            }
        if (iTouche!=-1)
            {
            if ( (iTouche & 256)>0) keybd_event(VK_SHIFT, 0, 0,0);
            if ( (iTouche & 512)>0) keybd_event(VK_CONTROL, 0, 0,0);
            if ( (iTouche & 1024)>0) keybd_event(VK_MENU, 0, 0,0);

            keybd_event(iTouche,0,0,0);
            keybd_event(iTouche,0,KEYEVENTF_KEYUP,0);

            // Relâche
            if ( (iTouche & 256)>0) keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
            if ( (iTouche & 512)>0) keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
            if ( (iTouche & 1024)>0) keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0);
            }
        }
    }
Dernière modification le 08/03/2019 - Quillevere.net

Rechercher sur le site

rss RSS info Informations