Essa função InKey que eu codifiquei nessa dica é usei faz uns 5 ou 6 anos atrás pra implementar um ovo de páscoa em um software. Funcionou bem na época. A unit revisada ficou assim;
unit uKbdTools; interface procedure ClearInputMessages; function InKey(Secs: Double): integer; overload; function InKey(MSecs: LongWord): integer; overload; implementation uses Windows, Messages; // Limpa mensagens de entrada (teclado e mouse) da fila de mensagens do Windows. // Não existe no Windows a figura do buffer de teclado!!!! procedure ClearInputMessages; var Msg: TMsg; begin while PeekMessage( Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_QS_INPUT) do ; while PeekMessage( Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE or PM_QS_INPUT) do ; end; function InKey(Secs: Double): integer; var Msg: TMsg; TickCount: DWORD; MSecs: DWORD; lResult: BOOL; begin Application.ProcessMessages; Result := 0; MSecs := Trunc(Secs * 1000); TickCount := GetTickCount(); repeat lResult := PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_QS_INPUT) until (GetTickCount() - TickCount >= MSecs) or lResult; if lResult then Result := Msg.wParam; end; function InKey(MSecs: LongWord): integer; var Msg: TMsg; TickCount: DWORD; lResult: Boolean; begin Application.ProcessMessages; Result := 0; TickCount := GetTickCount(); repeat lResult := PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_QS_INPUT) until (GetTickCount() - TickCount >= MSecs) or lResult; if lResult then Result := Msg.wParam; end; end. Em tempo: (1)Sobre o que vc comentou a respeito de acessar discos rígidos, o terreno é árido e muito infértil. Vc vai ter que pesquisar e muito como ter acesso a um disco rígido em baixo nível passando por cima das prerrogativas do sistema operacional. Parei de pesquisar por conta do meu tempo como desenvolvedor e analista. (2)Nos meus tempos áureos de colaboração à finada (porém, excelente) revista Micro Sistemas, desenvolvi um utilitário em Turbo Pascal 5.5/6.0/7.0 que lia a MBR de um HD e salva as informações das partições, juntamente com os parâmetros do HD lidos da memória CMOS do setup, em um arquivo binário. Era uma maneira de tentar recuperar o setor de boot do disco em caso de algum problema ocasionado por vírus. Funcionou muito bem na época. Fora algumas coisas legais que eu consegui fazer em Clipper, como por exemplo criar classes de verdade para usar no Clipper 5.x. Resumo da ópera: Eu tb já fui escovador de bits! Até programas TSR em Pascal e Assembly eu já fiz! (Mas o que é TSR? Wikipédia, amigo!) ;) Sds. De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de EmbarcaDelphi Enviada em: quarta-feira, 27 de maio de 2009 20:23 Para: delphi-br@yahoogrupos.com.br Assunto: [delphi-br] Para: Rubem (você esqueceu?) E aí Rubem, Navegando na Net pesquisando por umas questões pouco difundidas eu me deparei com uma mensagem sua que iria retornar, a mensagem era de 2008. O link é este: http://cincobytes.net/simular-inkey-do-clipper-no-delphi/ Teve mais novidades a este respeito? Não sei em que situação poderia utilizar esta rotina, mas, acabei caindo nesse link. De vez em quando eu pego uma função da API do Windows (coisa que nunca usei e fiquei curioso) e vou navegando na internet para estudar, creio que poucas pessoas fazem isso. É pena que muitas coisas não se encontram no idioma português (meu inglês é muito fraco), mas vendo o código dá para ter uma idéia do que se trata, como não uso Banco de Dados, só busco por APIs e coisas de baixo nível. A pouco tempo atrás eu descobri como acessar uma partição EXT2 de dentro do Windows, podendo lêr ou gravar nesta partição, também na partição ReiserFS. Coisa que para muitos isso seria impossível, visto que só na linguagem C se faz., kkkkk. Estou fazendo uma proteção para meu programa e estou desenrolando, ainda falta muitos ajustes, como criar a partição EXT2. Só queria ver como criar uma partição pelo Delphi (FAT32 e EXT2), ainda estou pesquisando. Um dia acho algo. Se alguém souber alguma informação a respeito então será muito bem-vinda. Teve um colega aqui na lista que tava procurando, não sei se ele encontrou... Blz. [As partes desta mensagem que não continham texto foram removidas]