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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 1914
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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 8029
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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