Hook de teclado. Pq tem que ser via DLL?
Olá sou novo neste fórum e gostei do nível mais técnico que outros que eu estava frequentando, pelo menos algumas msgs que eu ví.
A dúvida deve ser de nível médio, mas é o seguinte:
Pq para fazer um HOOK para capturar teclas, temos que colocar as funções de CallBack em uma DLL e não dentro do próprio programa?
[]s Robson
A dúvida deve ser de nível médio, mas é o seguinte:
Pq para fazer um HOOK para capturar teclas, temos que colocar as funções de CallBack em uma DLL e não dentro do próprio programa?
[]s Robson
Cyberrob
Curtidas 0
Respostas
Marcelo Saviski
08/10/2003
porque o windows só envia para nós, (o programa), o evento Key quando este é gerado pelo próprio programa registrado no windows
como uma Dll é mais independente do que um exe, e existe justamente para isso,
o Windows manda tudo quante é tranqueira de WindowProc para ela
como uma Dll é mais independente do que um exe, e existe justamente para isso,
o Windows manda tudo quante é tranqueira de WindowProc para ela
GOSTEI 0
Nildo
08/10/2003
Olá e bem vindo :D
Na verdade é porque você precisa injetar a DLL no sistema operacional inteiro, para que possa interceptar todas as mensagens que o windows envia. No caso seria que pressionou uma tecla. Se você está em um Edit por exemplo e aperta uma tecla, o windows envia a mensagem que apertou a tecla apenas para o Edit, e não para todas as janelas (Se fosse para todas voce poderia interceptar pelo seu EXE). Como sua DLL vai estar injetada em todo o OS, vai etsar no Edit também, e sua DLL vai receber a mensagem antes que o Edit, possibilitando assim que você altere o código da tecla pressionada ou mesmo bloquear essa mensagem. Se fosse possível injetar o EXE como uma DLL você poderia interceptá-la pelo próprio EXE. Mas como não pode então é pela DLL mesmo.
Espero que tenha entendido. QUalquer dúvida responde essa mensagem!
Na verdade é porque você precisa injetar a DLL no sistema operacional inteiro, para que possa interceptar todas as mensagens que o windows envia. No caso seria que pressionou uma tecla. Se você está em um Edit por exemplo e aperta uma tecla, o windows envia a mensagem que apertou a tecla apenas para o Edit, e não para todas as janelas (Se fosse para todas voce poderia interceptar pelo seu EXE). Como sua DLL vai estar injetada em todo o OS, vai etsar no Edit também, e sua DLL vai receber a mensagem antes que o Edit, possibilitando assim que você altere o código da tecla pressionada ou mesmo bloquear essa mensagem. Se fosse possível injetar o EXE como uma DLL você poderia interceptá-la pelo próprio EXE. Mas como não pode então é pela DLL mesmo.
Espero que tenha entendido. QUalquer dúvida responde essa mensagem!
GOSTEI 0
Beppe
08/10/2003
Porque se você quer um hook global(que recebe mensagens de todos os programas), ele poderá executar no contexto de qualquer thread, não apenas do teu programa, então o Windows requer que o código esteja numa dll.
Ataliba.
Ataliba.
GOSTEI 0