Falso enventos de comando [RESOLVIDO]

1. Falso enventos de comando [RESOLVIDO]

Luis
thebestbr

(usa Ubuntu)

Enviado em 12/01/2011 - 08:19h

Ola pessoal

fiz uma aplicacao q deve funcionar como um acesso remoto, como um vnc bm primitivo, o caso é, concegui gerar os eventos de teclado porem quando tento fazer um alt+f (para abrir a aba files de um programa por exemplo, nao funciona, o alt fica apertado porem ao enviar o f, a letra f eh impressa na tela ao inves de intender q eh um atalho

este eh meu codigo pra gerar o evento:

// captura o X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;

// indica a janela raiz para o display.
Window winRoot = XDefaultRootWindow(display);

// pega a janela que esta em focus do teclado.
Window winFocus;
int revert;
XGetInputFocus(display, &winFocus, &revert);

// envia um falso event de pressionamento de tecla.
if(p==1){
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, true, tecla, 0);
XSendEvent(event.display, event.window, true, KeyPressMask, (XEvent *)&event);
}
// envia um falso event de soltar a tecla.
if(p==0){
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, false, tecla, 0);
XSendEvent(event.display, event.window, true, KeyPressMask, (XEvent *)&event);
}
XCloseDisplay(display);


  


2. Re: Falso enventos de comando [RESOLVIDO]

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 12/01/2011 - 09:42h

Acho que seria mais proveitoso se enviasse todo o código (ou pelo menos onde é feita a captura e tratamento de teclado) para se ter uma ideia mais geral do assunto, pois, a princípio, o código enviado está parecendo vago para uma análise mais completa.


Embraces!


3. Re: Falso enventos de comando [RESOLVIDO]

Luis
thebestbr

(usa Ubuntu)

Enviado em 12/01/2011 - 10:22h

a parte da leitura do teclado nao precisa pois ela eh feita no windows e convertida para um codigo
este ai eh o codigo do linux, dai ele so recebe um int tecla que é o cod da tecla que eu achei no arquivo /usr/include/X11/keysymdef.h e tbm receb int p para dizer se presionou ou soltou a tecla.

a principio seria rodar este codigo com o cod de alt (65513) e pressionado, dpois cod de f (102)pressiona e solta e apos solta o alt, dai deveria abrir a aba files


4. Re: Falso enventos de comando [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 12/01/2011 - 10:33h

O ELgio lançou um artigo chamado "A mágica do dc" cujas informações certamente serão bastante úteis no seu caso, em especial por tratar-se de uma aplicação iniciada em Windows e finalizada no Linux.
Acho que será útil.


5. Re: Falso enventos de comando [RESOLVIDO]

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 12/01/2011 - 11:04h

Ao meu ver de duas, uma. Ou os eventos estão sendo mandados de forma errônea, ou eles estão sendo tratados de forma errônea. Você tem acesso ao código de tratamento dos eventos? Neste código está sendo tratado alt + f como uma tecla de atalho ou como apenas inputs separados? Qual API está usando no tratamento das janelas?

Embraces!


6. funcionou

Luis
thebestbr

(usa Ubuntu)

Enviado em 13/01/2011 - 11:05h

condegui fazer funcionar, somente trokei as funcoes utilizadas

{
// captura o X11 display.
Display *display = XOpenDisplay(NULL);
if(display == NULL)
return -1;
bool press;

if(p==1){
press=true;
}else
press=false;

KeyCode keycode = 0, modcode = 0;

keycode = XKeysymToKeycode (display, keysym);
if (keycode == 0) return 0;

XTestGrabControl (display, True);

/* Generate modkey press */
if (modsym != 0)
{
modcode = XKeysymToKeycode(display, keysym);
XTestFakeKeyEvent (display, modcode, press, 0);
}else{
/* Generate regular key press and release */
XTestFakeKeyEvent (display, keycode, press, 0);
}

XSync (display, False);
XTestGrabControl (display, False);
XCloseDisplay(display);
return 0;

}

esta funcao é igual a outra porem recebe como parametro um flag q diz se é uma trecla especial como alt ou ctrl.

vlw pela ajuda pessoal






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts