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.
- les caractères en majuscules ou nécessitant l'appui de la touche Control ou ALT
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);
}
}
}