Caracteres Especiais no buffer do teclado
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..
E como usá-la..
gostaria d enviar caracteres especiais e acentuados..
alguém sabe como fazer isso com esta função...obrigado
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
Curtidas 0
Respostas
Khundalini
11/12/2008
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
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
GOSTEI 0