Transformando Strings em series de KeyCodes  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Tou fazendo umas adaptacoes no Selenium (pra que ele possa fazer upload de arquivos em browsers que nao o Firefox), e esbarrei num probleminha meio chato: na java.awt.Robot tem um metodo keyPress(int keycode) que recebe aqueles KeyEvent.VK_*.

O problema eh que eu quero digitar uma String inteira, com o nome do arquivo. Eu teria que transformar algo como "C:\foo.jpg" em:



...o que parece relativamente simples, ate vc ver que nao tem nada na API que faca isso (e o mais proximo, Character.getNumericValue e equivalentes, nao te dao um keycode pra maioria das coisas nao-alfabeticas, como ':' e '.').

Fiquei travado nisso. Alguem tem alguma ideia?
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

O Danilo Sato eh um genio:

[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Foxlol
Virtual Machine Man
[Avatar]

Membro desde: 02/05/2006 10:17:47
Mensagens: 646
Localização: São José do Rio Pardo - SP
Offline

Uia o.O

This message was edited 1 time. Last update was at 14/01/2008 11:17:25


Sun Certified Java Programmer
Sun Certified Web Component Developer
Java EE 5 Business Component Developer Oracle Certified Professional
[MSN] [ICQ]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Er, retiro o que eu disse. O Danilo ainda eh esperto - bem mais que a galera da Sun, pelo jeito. A AWTKeyStroke nao faz bem isso que eu quero:



Voila, VK_UNDEFINED. Maldicao!

Se alguem tiver outra ideia, fico devendo uma breja.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
cassio
GUJ Master
[Avatar]

Membro desde: 19/06/2006 08:25:28
Mensagens: 1336
Localização: Caieiras-SP
Offline

api wrote:
WARNING: Aside from those keys that are defined by the Java language (VK_ENTER, VK_BACK_SPACE, and VK_TAB), do not rely on the values of the VK_ constants. Sun reserves the right to change these values as needed to accomodate a wider range of keyboards in the future.


api wrote:
static int VK_0
VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39)


api wrote:
static int VK_A
VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A)



http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html#VK_T

This message was edited 3 times. Last update was at 14/01/2008 12:04:31


Cássio Marques

Blog
cassio
GUJ Master
[Avatar]

Membro desde: 19/06/2006 08:25:28
Mensagens: 1336
Localização: Caieiras-SP
Offline

cv wrote:
Character.getNumericValue e equivalentes, nao te dao um keycode pra maioria das coisas nao-alfabeticas, como ':' e '.').


Também não sei se a sequência é seguida para os caracteres não-alfabéticos, mas não dá pra criar uma classe utilitária com um bloco estático mais ou menos assim?


E ter nessa classe um método estático do tipo


Talvez eu não tenha entendido direito seu problema...

Cássio Marques

Blog
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

...foi o que eu acabei fazendo, mas mesmo assim dei de cara com outra parede:



resulta em:

This message was edited 1 time. Last update was at 14/01/2008 12:26:32

[Email] [WWW] [Yahoo!] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Pelo que imagino, você teria de fazer algo parecido com o seguinte:

keyPress (VK_SHIFT)
keyPress(VK_SEMICOLON)
keyRelease(VK_SEMICOLON)
keyRelease(VK_SHIFT)

já que a tecla ":" não existe no teclado (só ";" e você precisa usar o Shift para acessar o ":". )
Estou supondo que você esteja usando o teclado americano; não sei se o inglês é tão diferente assim do americano.
(Eu sei que o teclado francês é "AZERTY" em vez de "QWERTY" e outras coisas mais estranhas).
(O teclado ABNT ou brasileiro tem um monte de teclas fora do lugar, mas o ":" continua sobre o ";". )


EDIT - Olhei e é sutilmente diferente quanto a alguns caracteres.
http://en.wikipedia.org/wiki/Keyboard_layout#UK_and_Ireland

This message was edited 2 times. Last update was at 14/01/2008 13:21:18

[WWW]
davidbuzatto
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

Realmente, existem algumas dessas barreiras... Alguns caracteres de pontuação ficam em intervalos diferentes...
O dois pontos e o ponto e vírgula ficam "455" unidades a mais que o código do caracter... Tentei verificar com mais caracteres, mas nada...

Por exemplo, o VK_COLON é ( ( ( int ) ':' ) + 455 ) == 513

Fiquei uma meia hora tentando pensar em algo, mas não tive nenhum idéia diferente das que vocês já postaram...

This message was edited 1 time. Last update was at 14/01/2008 13:11:55


Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
davidbuzatto
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

O mais perto que cheguei...



Mas faltam as pontuações, etc...

This message was edited 1 time. Last update was at 14/01/2008 13:36:19


Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
cassio
GUJ Master
[Avatar]

Membro desde: 19/06/2006 08:25:28
Mensagens: 1336
Localização: Caieiras-SP
Offline

Com isso dá pra ver o código de todas as constantes cujo nome começa com VK_ ...

This message was edited 2 times. Last update was at 14/01/2008 13:39:06


Cássio Marques

Blog
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Valeu, galera. A solucao final acabou meio como uma mistura do que o daviduzatto e o cassio sugeriram.

Ah, e thingol - matou a pau. O lance eh o mesmo pra (, ) e todos os caracteres do genero. Ainda nao testei o #, que no meu Mac eh feito com Alt+3, mas como # nao ocorre em nenhum dos arquivos que eu tenho que usar pra testar aqui, nao tem la tanto problema.
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
davidbuzatto
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

Disponha

Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

Caraca isso me lembra quando brincavamos de fazer jogo em pascal la por volta de 1996 e tinhamos que tratar as interrupções do teclado porquê o keycode tinha algumas bizarrices tipos essas ...

Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team