Sobre API correta a sofrer hook (gancho)
Olá, gostaria de criar um log para todos os documentos impressos no meu sistema, pensei em criar um hook na API que controla a impressão do sistema, a questão é saber qual API hookar... Desde já agradeço...
Bruno Belchior
Curtidas 0
Respostas
Micheus
05/07/2006
Pelo que já pesquisei sobre o assunto, acho que o mais parecido com o esquema de hook do sistema para o caso do gerenciamento de impressão é conseguido com o uso de FindFirstPrinterChangeNotification (é só o fio da meada, dê uma olhada no help do Windows SDK que acompanha o delphi). Com esta função vc cria um handle para monitorar uma determinada impressora e usando o flag PRINTER_CHANGE_JOB talvez vc consiga o que deseja. Ainda assim, não estou certo que possa funcionar corretamente com todas as versões do Windows.
Achei um link sobre a função: [url=http://cc.borland.com/Item.aspx?id=20307]Borland[/url]
Boa sorte.
Achei um link sobre a função: [url=http://cc.borland.com/Item.aspx?id=20307]Borland[/url]
Boa sorte.
GOSTEI 0
Michael
05/07/2006
Olá [b:79dd0c21bd]Bruno[/b:79dd0c21bd]!
Se optar pelo caminho da API Hooking, vc pode encontrar um programa exemplo que ´hooka´ as API´s de impressão do Windows junto com a biblioteca MadCodeHook, no site [url]www.madshi.net[/url]. Após a instalação, será criada uma pasta com fontes de demos, e um deles se chama PrintMonitor. Vc pode olhá-lo e descobrir qual API é mais últil para vc.
Observe que vc não precisa usar a MadCodeHook se não quiser. O código fonte, devidamente modificado, pode funcionar tbm com a biblioteca do Nildo (BmsAPIHook).
Existe um detalhe importante que vc deve ter em mente no caso de impressoras de rede. Neste caso, há mais de um computador envolvido no processo de impressão, geralmente o cliente e o servidor. Desta forma, as API´s que são chamadas no cliente são totalmente diferentes das chamadas no servidor de impressão. Do lado do cliente vc vai encontrar API´s como EndPage, por exemplo, e do outro funções associadas ao spooler de impressão.
A vantagem de rodar o programa no servidor é que nenhum cliente vai precisar ser hookado. Vc pode encontrar mais detalhes sobre este assunto no fórum da MadCodeHook, em [url=http://forum.madshi.net]forum.madshi.net[/url]. Faça uma pesquisa por ´print´ ou ´printer´ e irá encontrar bastante informação.
[]´s
Se optar pelo caminho da API Hooking, vc pode encontrar um programa exemplo que ´hooka´ as API´s de impressão do Windows junto com a biblioteca MadCodeHook, no site [url]www.madshi.net[/url]. Após a instalação, será criada uma pasta com fontes de demos, e um deles se chama PrintMonitor. Vc pode olhá-lo e descobrir qual API é mais últil para vc.
Observe que vc não precisa usar a MadCodeHook se não quiser. O código fonte, devidamente modificado, pode funcionar tbm com a biblioteca do Nildo (BmsAPIHook).
Existe um detalhe importante que vc deve ter em mente no caso de impressoras de rede. Neste caso, há mais de um computador envolvido no processo de impressão, geralmente o cliente e o servidor. Desta forma, as API´s que são chamadas no cliente são totalmente diferentes das chamadas no servidor de impressão. Do lado do cliente vc vai encontrar API´s como EndPage, por exemplo, e do outro funções associadas ao spooler de impressão.
A vantagem de rodar o programa no servidor é que nenhum cliente vai precisar ser hookado. Vc pode encontrar mais detalhes sobre este assunto no fórum da MadCodeHook, em [url=http://forum.madshi.net]forum.madshi.net[/url]. Faça uma pesquisa por ´print´ ou ´printer´ e irá encontrar bastante informação.
[]´s
GOSTEI 0
Bruno Belchior
05/07/2006
Olá [b:8d68d24f4f]Michael[/b:8d68d24f4f], antes mesmo de postar eu já havia estudado esse exemplo que você me informou, porém ele é apenas um monitor, mas já se tem um bom começo de informações. Agora, saindo um pouco da pergunta inicial, nesse exemplo eu não consegui depurar a DLL, coloquei o aplicativo como host na DLL e mandei carregar, mas o apliativo não é quem chama o hook, então ele não para nas CallBacks da DLL.
GOSTEI 0
Bruno Belchior
05/07/2006
Só pra complementar, o aplicativo vai ficar somente no servidor...
GOSTEI 0
Bruno Belchior
05/07/2006
Uma outra API que gostaria de descobrir qual hookar, é a que é executada quando quero mudar de diretório, abrir um diretório, emfim, entrar num diretório qualquer. Visto que não quero permitir isso...
GOSTEI 0