J'ai besoin d'envoyer des informations à une fenêtre tout en ayant la
possibilité de continuer à utiliser le clavier et/ou la souris.
Le test se fait avec notepad. A l'heure actuelle, cela fonctionne à
ceci près que toutes les minuscules sont transformées en majuscule,
que les chiffres se transforment en lettre et que les majuscules se
transforment en caractères spéciaux. Avant j'utilisais keyboard event
et je n'avais pas ce soucis.
Voici la fonction qui me permet de transformer et envoyer les
caractères saisis dans la fenêtre.
void Write(HWND Handle, char *Flux, int Size)
{
int i=0;
for ( i=0 ; i<Size ; i++ )
{
char CurrentLetter = Stream
[i];
// Chiffre
if ( '0' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x62, 0);
_sleep(40);
}
else if ( '1' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x61, 0);
_sleep(40);
}
else if ( '2' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x62, 0);
_sleep(40);
}
else if ( '3' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x63, 0);
_sleep(40);
}
else if ( '4' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x64, 0);
_sleep(40);
}
else if ( '5' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x65, 0);
_sleep(40);
}
else if ( '6' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x66, 0);
_sleep(40);
}
else if ( '7' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x67, 0);
_sleep(40);
}
else if ( '8' == CurrentLetter)
{
SendMessage(Handle, WM_CHAR, 0x68, 0);
_sleep(40);
}
else if ( '9' == CurrentLetter )
{
SendMessage(Handle, WM_CHAR, 0x69, 0);
_sleep(40);
}
// Caractères spéciaux
else if ( '@' == CurrentLetter )
{
keybd_event(VK_MENU,0,0,0);
keybd_event(VK_CONTROL,0,0,0);
keybd_event(0x30,0,0,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(0x30,0,KEYEVENTF_KEYUP,0);
_sleep(50);
}
else if ( '.' == CurrentLetter )
{
keybd_event(VK_SHIFT,0,0,0);
keybd_event(0xBE,0,0,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
keybd_event(0xBE,0,KEYEVENTF_KEYUP,0);
_sleep(40);
}
// Caractères usels
else {
SendMessage(Handle, WM_CHAR, VkKeyScan
(Stream[i]), 0);
_sleep(40);
}
}
}
Merci d'avance.
avec un NotePad ascii (non unicode) je n'observe pas cela.
> void Write(HWND Handle, char *Flux, int Size)
> {
> int i=0;
> for ( i=0 ; i<Size ; i++ )
> {
> char CurrentLetter = Stream[i];
>
> if ( '0' == CurrentLetter )
> SendMessage(Handle, WM_CHAR, 0x62, 0);
n'utilisez pas les "scan-codes" VK_NUMPADx ici, mais bien le caract�re
lui-m�me, soit (pour la plupart des lettres test�es):
SendMessage(Handle, WM_CHAR, CurrentLetter, 0);
Sylvain.
Je vous remercie une fois de plus. En remplaçant pour les lettres le
vkkeyscan de la lettre directement par la lettre, j'ai bien la donnée
retranscrite, cependant pour les chiffres j'ai toujours le même
problème. Et comme vous le disiez il ne faut pas utiliser l'unicode
mais l'ascii et les valeur 0x62.. 0x6X sont bien les codes ASCII des
chiffres pourtant.
Cordialement.
non, les chiffres '0' � '9' ont les codes 0x30 � 0x39 (les
constantes r�serv�s et non d�finies VK_0 � VK_9), les constantes
VK_NUMPAD0 � 9 correspondent aux codes d'un clavier num�rique seul
(utilis� en compl�ment du clavier non �tendu des portables)
Sylvain.
Je te remercie vraiment pour ton aide, en quelques réponses tu as fait
mieux qu'une dixaine de personne en 2 jours ! @+ & bonne continuation.
>
> Je te remercie vraiment pour ton aide, en quelques r�ponses tu as fait
> mieux qu'une dixaine de personne en 2 jours ! @+ & bonne continuation.
Ca confirme le proverbe :-)
Oui tout à fait. Merci encore.
//---------------------------------------------------
switch(CurrentLetter) {
case '0':
SendMessage(Handle, WM_CHAR, 0x62, 0);
break;
case '1':
SendMessage(Handle, WM_CHAR, 0x61, 0);
break;
case '3':
SendMessage(Handle, WM_CHAR, 0x62, 0);
break;
// caract�res usuels
default:
SendMessage(Handle, WM_CHAR, VkKeyScan(Stream[i]), 0);
}
// instruction ex�cut�e dans tous les cas
_sleep(40);
//---------------------------------------------------
voila voila :)
darkwall_37 a �crit :
>
> Je te remercie vraiment pour ton aide, en quelques r�ponses tu as fait
Plus propre et �l�gant, oui.
Pour la performance, �a d�pend du code g�n�r� par le compilateur.