Alternativa a BlockInput

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Bom dia,

Alguém tem alguma alternativa para efetuar o bloqueio total do teclado sem utilizar a função BlockInput da API do Windows?
Explico: Utilizávamos o TRAVATEC em nosso sistema, o qual se baseia nessa função, porém, após o Windows XP, ela só funciona
se executar o aplicativo com privilégios de administrador, ou com a UAC desativada.
Infelizmente nosso sistema não pode ser executado como administrador e não podemos desativar a UAC.
Tenho tentado criar uma função em C, que detecte o pressionamento de qualquer tecla (utilizando GetAsyncKeyboardState) e o
troque por nulo, ou algo do tipo, mas não obtive resultado.
Pesquisei bastante no fórum e no Google, mas apesar de ser um problema antigo, parece que ainda não existe solução.
Se alguém tiver alguma alternativa, gostaria de saber.

Obrigado,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Alternativa a BlockInput

Mensagem por Jairo Maia »

Olá André,

A idéia é bloquear somente o teclado, permitindo acesso ao sistema via mouse por exemplo? Ou seria algo como bloquear o acesso a tudo, teclado e sistema e periféricos.

Em meus sistemas de frente de caixa, se por alguma razão o atendente precisar se afastar do caixa (ir ao banheiro por exemplo), ele pressiona a tecla F6. O sistema aciona uma função solicitando a senha do atendente que está operando, e só libera se for digitado essa senha, ou a máquina for reiniciada com outra senha. Mas não sei se isso serve no seu caso.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Boa tarde Jairo,

Obrigado pelo retorno.
Na verdade, preciso de algo que funcione exatamente como a função BlockInput da API do Windows, mas
que não precise ser executada com privilégios de administrador, ou desativar a UAC.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Alternativa a BlockInput

Mensagem por Jairo Maia »

Olá André,

E se você usasse um laço para bloquear tudo. Por exemplo:

Código: Selecionar todos

Function Main()
 Local cOpcao := Space( 1 )

 Clear Screen

 While .t.

   @ 12, 35 Say "Bloquear teclado" Get cOpcao Picture "@!" Valid cOpcao $ "SN"
   Read

   If cOpcao = "S"
     BlockActions()
   EndIf

 EndDo

Return Nil

Function BlockActions()
 Clear Screen
 @ 12, 2 Say "Teclado e mouse travados. Pressione CTRL+BREAK ou clique no X para sair..."

 While .t.
  Inkey( 0 )
 EndDo

Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a BlockInput

Mensagem por JoséQuintas »

Afinal quer bloquear o que?
O teclado no seu aplicativo, ou o Windows inteiro?

Não entendi direito o que quer, ou pra que vai servir isso.
É um novo GPBPlugin? rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

José, usávamos a função BlockInput da API do Windows para bloquear qualquer ação via teclado ou mouse.
Essa função era necessária para homologar o TEF, já que desabilitar qualquer tipo de entrada durante a comunicação
era um pré-requisito.
Atualmente para que essa API funcione, o aplicativo tem que ser executado como adm, ou a UAC do Windows deve ser
desativada. Infelizmente não podemos recorrer a nenhum dos 2 casos.
Estou estudando há alguns dias as APIS GetKeyState, GetKeyboardState, GetASyncKeyState e GetASyncKeyboardState
juntamente com Hook de teclado para anular qualquer tecla pressionada, mas ainda não consegui desenvolver nada
satisfatório.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Alternativa a BlockInput

Mensagem por Kapiaba »

nem uma reposta no google foi satisfatória, somente como adm.

Código: Selecionar todos

#include <windows.h>
#include <winable.h>
#include <time.h>

int main() {
 BlockInput(true);
 while (clock() < 5000) {}
 BlockInput(false);
}

Código: Selecionar todos

#include <iostream>
#include <windows.h>
#include <winable.h>
int main() {
    BlockInput(true);
    Sleep(10000);
    return 0;
}
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a BlockInput

Mensagem por JoséQuintas »

Imaginando que seja pra travar o computador no aplicativo....
Só manter o foco no aplicativo.

Código: Selecionar todos

DO WHILE .T.
   hWnd:SetFocus()
   Inkey(0.1)
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Obrigado pelas respostas, mas o problema segue sem solução.
A intenção não é travar o foco no aplicativo, mas bloquear qualquer
entrada via teclado e mouse.
Vou continuar analisando as APIs disponíveis e caso encontre alguma
alternativa interessante, compartilharei aqui.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Alternativa a BlockInput

Mensagem por Jairo Maia »

Olá André,
André Corrêa escreveu:A intenção não é travar o foco no aplicativo, mas bloquear qualquer entrada via teclado e mouse.
Ok. Agora ficou claro.

Bom, talvez você já tenha visto, mas mesmo assim vai aqui esse link: BlockInput function. Tem exemplo em C++, C# e veb.net.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Obrigado Jairo,

Era o que usávamos, mas houveram essas mudanças que citei.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a BlockInput

Mensagem por JoséQuintas »

Qual o problema na que mencionei?

Abra uma janela que cubra todo desktop e prenda o foco nela.

Inclusive é assim que o programa do Itaú faz.

Aqui uso 3 monitores, e o programa do Itaú cobre TODOS durante o uso.
Desinstalei por causa disso.

Se vale como segurança para o Banco Itaú, porque não pra isso?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Obrigado José, o mouse eu consegui travar assim, vou fazer alguns testes dessa forma.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Alternativa a BlockInput

Mensagem por Itamar M. Lins Jr. »

Complicado... Não informou qual GUI/GT está usando.
Na Hwgui temos algumas funções...
Podemos perguntar isso ao pessoal do TEF ? Porque é um problema do SO não do aplicativo...
Como fazer isso sem mexer no UAC e ou sem privilégios de adm nas outras linguagens ?
E no Win10, será que irá funcionar isso ?
Prender foco via setfocus() ? usando qual GT ou GUI ? e como sair do laço(while) ? usamos o teclado ? então não travou o teclado...
E se o arquivo txt do TEF não chegar se houver erro na net ? etc...

Se o domínio da situação é controlada pelo aplicativo(programado) e esse precisa de privilégios do SO ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativa a BlockInput

Mensagem por André Corrêa »

Olá Itamar,

Estou utilizando o Xailer na verdade, mas é totalmente compatível com
Harbour/xHarbour.
Já testei no Win 7, 8 e 10. A situação é a mesma para todos.
A partir do Vista existe essa restrição. Já pesquisei muito na internet via
fóruns e motores de busca, mas até o momento, nada mesmo. Ninguém tem
outra solução.
Minha ideia é fazer um hook de teclado e via API trocar cada tecla pressionada por
nulo. Com o hook, cada tecla digitada é interceptada antes de ser repassada para qualquer
aplicação. Quanto ao mouse, é mais fácil travá-lo em um ponto da tela e desativar os cliques.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Responder