Fórum Caracteres Especiais no buffer do teclado #367043

11/12/2008

0

Bom dia pessoal, estou usando a função PostKeyEx32 para enviar caracteres ao buffer do teclado...a mesma funciona mt bem...mas ao enviar caracteres como ´ç´, ´á´, por exemplo...

a mesma não funciona....aq segue o código da mesma..
Procedure PostKeyEx32(key: Word; const shift:
   TShiftState; specialkey: Boolean) ;
{
Parâmetros:
* key : código  virtual da tecla a ser enviada. Para teclas que possuem caracteres este será o código ANSI (Ord(character)) .
* shift : estado das teclas de modificação. É um conjunto, de modo que você pode especificar várias teclas (shift, control, alt, botões do mouse) todas juntas. O tipo TShiftState é declarado na unit Classes.
* specialkey: normalmente este valor deve ser False. Defina-o como True para especificar uma tecla no teclado numérico.
}
Type
   TShiftKeyInfo = record
     shift: Byte ;
     vkey: Byte ;
   end;
   ByteSet = set of 0..7 ;
Const
   shiftkeys: array [1..3] of TShiftKeyInfo =
     ((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
     (shift: Ord(ssShift) ; vkey: VK_SHIFT),
     (shift: Ord(ssAlt) ; vkey: VK_MENU)) ;
Var
   flag: DWORD;
   bShift: ByteSet absolute shift;
   j: Integer;
Begin
   for j := 1 to 3 do
   begin
     if shiftkeys[j].shift in bShift then
       keybd_event(shiftkeys[j].vkey,
       MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
   end;
   if specialkey then
     flag := KEYEVENTF_EXTENDEDKEY
   else
     flag := 0;

   keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
   flag := flag or KEYEVENTF_KEYUP;
   keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;

   for j := 3 downto 1 do
   begin
     if shiftkeys[j].shift in bShift then
       keybd_event(shiftkeys[j].vkey,
       MapVirtualKey(shiftkeys[j].vkey, 0),
       KEYEVENTF_KEYUP, 0) ;
   end;
end;
//******************************************************************************



E como usá-la..


PostKeyEx32(Ord (´A´), [], false))


gostaria d enviar caracteres especiais e acentuados..

alguém sabe como fazer isso com esta função...obrigado


Wdrocha

Wdrocha

Responder

Posts

26/12/2008

Khundalini

Primeiro, deve ser esclarecido que o Windows não possui um buffer de teclado. Isso é um conceito que cabe aos aplicativos baseados nos sistema operacional MS-DOS e seus similares compatíveis (PC-DOS, IBM-DOS, etc.)

O comportamento de aplicações Windows é controlado por meio de fila de mensagens. Todo o aspecto que envolve a execução da aplicação se dá por meio de mensagens. E o aspecto das teclas enviadas a uma aplicação é também feito por meio de mensagens (WM_KEYUP, WM_KEYDOWN, etc.)

Sobre a questão dos acentos, você precisa atentar para um detalhe chamado página de idioma. Dependendo do tipo de aplicação que vc está querendo controlar via envio de mensagens de teclado, seja ela aplicação do tipo aviso de comando (erroneamente chamada de aplicativo MS-DOS!) ou uma aplicação Windows, isto deve ser levado em conta, pois um determinado caracter acentuado (Exemplo: ´ç´) em uma página de idioma possui um código ASCII/Unicode, e em uma outra página de idioma, o mesmo caracter possui outro código ASCII/Unicode.

Pesquise sobre isso!

Boa sorte.

Sds.,
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar