Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SendMessage & MAJUSCULE

2 views
Skip to first unread message

darkwall_37

unread,
Jun 18, 2009, 1:24:05 PM6/18/09
to
Bonjour,

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.

Sylvain SF

unread,
Jun 18, 2009, 2:10:21 PM6/18/09
to
darkwall_37 a �crit :
>
> 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.

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.

darkwall_37

unread,
Jun 18, 2009, 4:41:26 PM6/18/09
to
On 18 juin, 20:10, Sylvain SF <sylv...@boiteaspam.info> wrote:
> darkwall_37 a écrit :
>
>
>
> > 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.

>
> 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.

Sylvain SF

unread,
Jun 18, 2009, 5:02:27 PM6/18/09
to
darkwall_37 a �crit :
>
> [..] 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.

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.

darkwall_37

unread,
Jun 18, 2009, 5:54:25 PM6/18/09
to
On 18 juin, 23:02, Sylvain SF <sylv...@boiteaspam.info> wrote:
> darkwall_37 a écrit :
>
>
>
> > [..] 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.
>
> 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.

domi

unread,
Jun 18, 2009, 7:10:52 PM6/18/09
to
darkwall_37 wrote:

>
> 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 :-)

http://minilien.com/?AFB1a6EevR

Jean Paul

unread,
Jun 18, 2009, 7:43:25 PM6/18/09
to
On 19 juin, 01:10, domi <d...@dom.com> wrote:
> darkwall_37 wrote:
>
> > 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 :-)
>
> http://minilien.com/?AFB1a6EevR

Oui tout à fait. Merci encore.

Glav

unread,
Jun 20, 2009, 4:44:39 AM6/20/09
to
Petit conseil si je puis me permettre : pour ce genre de conditions
r�p�t�es, un switch est plus efficace en performances et moins p�nible �
�crire qu'une suite de if :

//---------------------------------------------------

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

domi

unread,
Jun 20, 2009, 9:55:27 AM6/20/09
to
Glav wrote:
> Petit conseil si je puis me permettre : pour ce genre de conditions
> r�p�t�es, un switch est plus efficace en performances et moins p�nible �
> �crire qu'une suite de if :

Plus propre et �l�gant, oui.
Pour la performance, �a d�pend du code g�n�r� par le compilateur.

0 new messages