Pessoa, preciso bolquear o teclado do usuário durante uma operação no meu programa, alguém pode me dar uma ajuda quanto a isso, pesquisei um pouco na internet e vi que terei que usar JNI pra carregar a dll do windows e por ela bloquear o teclado, porém nunca usei esse recurso…alguém pode me ajudar ??? T+
Use JNA e declare a API BlockInput.
Entretanto, o usuário deve ser administrador da máquina (ou no caso do Windows Vista, o programa deve rodar com permissão de administrador, o que é mais chato.) Veja isso em:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=880586&SiteID=1
Vc nao poderia criar um KeyListener e filtrar qualquer tecla do usuario enquanto estiver processando ?
http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html
Bem caique não sei se funciona assim carregar uma dll do windows…
Bem pelo que eu sei, e já fiz algo em JNI…
Primeiro passo Procure ou faça vc mesmo um aplicacao em C ou C++ que faça a rotina que vc pretende
Segundo passo aí sim execute os passos para linkar a aplicacao C na sua aplicacao Java
Exemplo JNI - http://www.guj.com.br/posts/list/51822.java#272822
Link especificacao JNI - http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html
Eu sempre consegui bons exemplos de codigos C e C++ http://www.codeproject.com
apos vc da uma olhadinha nessas coisas me fale, pra ver no que posso te ajudar…
OK, obrigado por enquanto pessoal, já me deram uma luz, vou ver o que consigo e volto a postar, T+
Bem, eu uso assim com o JNative:
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
/**
*
-
@author sandro
*/
public class FuncoesNativas {/** Classe estática */
static{
}public static final boolean travaTeclado(boolean Blk) throws NativeException, IllegalAccessException
{
int Ret = 0;
JNative jn = new JNative(“user32.dll”, “BlockInput”);
jn.setRetVal(Type.INT);
jn.setParameter(0, “Blk” );
jn.invoke();
Ret = jn.getRetValAsInt();
jn.dispose();if(Ret == 1){ return true; }else{ return false; }
}
}
Vê se te serve…
Ok, posso usar a função BlockInput via JNA no Windows. Mas alguém tem alguma idéia de como eu conseguiria fazer alguma coisa semelhante nos Unix ou pelo menos no Linux?
Inté.
Voltando reabrir este tópico…
Amigos teste o código do caro amigo Cabazzo
Porém resultados “negativos” foram encontrados…
Exemplo:
Teste sem telas visuais ou implementações… Apenas com o código para Bloquear e Desbloquear.
Resultado: OK.
Teste com telas visuais e implementações… E código para Bloquear e Desbloquear
Resultado -> Bloqueando OK.
-> Desbloqueando Falha.
-> Travamento do Processo.
Espero que alguem tenha encontrado uma solução para isto…
Agradeço atenção de todos
Att. Jonas
“Redesenterrando o tópico” xD
TheKill, eu testei o código do colega Cabazzo mas pra mim ta dando o seguinte erro:
Exception in thread "main" java.lang.IllegalStateException: JNative library not loaded, sorry !
at org.xvolks.jnative.JNative.<init>(JNative.java:502)
at org.xvolks.jnative.JNative.<init>(JNative.java:427)
at zell.FuncoesNativas.travaTeclado(FuncoesNativas.java:22)
at zell.Teste.<init>(Teste.java:26)
at zell.Teste.main(Teste.java:116)
Tem como me dar uma ajuda ? xP
De qualquer forma eu agradeço a atenção!
o/
Putzzzz… eu tava lendo ainda pouco sobre os métodos native… já vi a burrada que eu fiz… eu não coloquei a dll da API no projeto xD
Agora foi de boa =)
De qualquer forma obrigado o/
Pessoal, eu utilizei o código acima, porém percebi que não estava destravando.
Então fiz algumas alterações de forma que destravasse.
Estou postando aqui para poder auxiliar os que precisarem.
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
public class DelsoftTravaTeclado {
/** Classe estática */
static{
}
public static final boolean TravaTeclado(boolean Blk) throws NativeException, IllegalAccessException
{
int Ret = 0;
JNative jn = new JNative(“user32.dll”, “BlockInput”);
jn.setRetVal(Type.INT);
if (Blk){
jn.setParameter(0,“Blk”);
}else{
jn.setParameter(0, 0);
}
jn.invoke();
Ret = jn.getRetValAsInt();
jn.dispose();
if(Ret == 1){
return true;
}else{
return false;
}
}
}
Att
Ana Claudia Ramos
Olá
quando eu trabalhava desenvelvendo para frente de caixa eu usava a dll da bematech
tinha uma função que funcionava direitinho.
não lembro dos detalhes mas se vc der uma pesquisada vai encontrar, ou se precisar de ajuda favor entrar em contato
ivonei.ti@gmail.com
Arquivo
Bemafi32.dll
Aqui eu explico direitinho como fazer isso: http://vantuiloliveira.blogspot.com/2011/10/java-travando-o-teclado.html
Estou usando a mesma idéia do acramos.
[]'s