Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
vacaazul

Api (windows Application Programming Interface)

Recommended Posts

Olá pessoal.

Qual procedimento devo seguir para conseguir uma "API" que tenha como função bloquear a tecla (teclado) Print Screen?

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

À principio, a API Win32 que você poderia é a RegisterHotKey (lib USER32.DLL).

Não sei o que você pretende, mas teria que ver se você quer manter essa tecla desabilitada durante toda a execução do Windows, ou apenas quando sua aplicação estiver rodando. Se for durante toda a execução do Windows, teria que fazer um programa separado para iniciar com o Windows e rodar em segundo plano, ou então iniciar como um serviço (mas aí é mais complicado) se for rodar em Win2000, NT, etc.

No Visual Basic, o uso seria simples assim (colocando num Form):

Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long

Private Sub Form_Load()

    Call RegisterHotKey(hwnd, 0&, 0&, vbKeySnapshot)

End Sub

A tecla é liberada novamente quando o programa é encerrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse caso, se for bloquear o Print Screen só no sua APP, nem precisaria usar a dll... (programa abaixo)...

Lembrando que é bem fácil burlar isso com programação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é um Hook e onde arranjo exemplos?

Tipo, se eu for fazer em assembly ficaria mais ou menos como? Não precisa entrar muito em detalhes que eu ainda estou aprendendo (sei o básico, apenas).

para fazer a .dll eu poderia utilizar a API RegisterHotLiB? Se sim, como eu definiria o hwnd?

É isso :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, acho que você teria que dar uma olhada de como o Windows funciona internamente, para entender o que é um Hook... mas tentando explicar o básico, um Hook é capturar mensagens...

Se der, depois eu coloco um exemplo de como bloquear teclas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

APP para bloquear o print screen...

Obs: eu só coloquei o principal... pois eu tirei várias coisas que tinham...


#include<windows.h>
#include<stdio.h>
#include<winuser.h>

LRESULT CALLBACK WindowFunc( HWND, UINT, WPARAM, LPARAM );

char szWinName[]="Janela";

void *regproc;

void CADInit();

DWORD rt;

char lpszBuffer[100];

bool autentic=FALSE;

int numero23=0;

FARPROC  KeylogHookProc;
HINSTANCE KeylogDLL;
HHOOK  KeylogHook;

int WINAPI WinMain( HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode ) {
HWND hwnd;
mensagem mensagem;
WNDCLASS wcl;


wcl.hInstance=hThisInst;
wcl.lpszClassName=szWinName;
wcl.lpfnWndProc=WindowFunc;
wcl.style=0;
wcl.hIcon=LoadIcon( NULL, IDI_APPLICATION );
wcl.hCursor=LoadCursor( NULL, IDC_ARROW );
wcl.lpszMenuName=NULL;
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
wcl.hbrBackground=( HBRUSH )GetStockObject( BLACK_BRUSH );


if( !RegisterClass( &wcl) )
 return 0;

hwnd=CreateWindow(
     szWinName,
     "Exemplo de bloquear PRINT SCREEN",
     WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT,
     CW_USEDEFAULT,
     400,
     100,
     HWND_DESKTOP,
     NULL,
     hThisInst,
     NULL
);


ShowWindow( hwnd, SW_SHOW );
UpdateWindow( hwnd );



while( GetMessage(&mensagem, NULL, 0, 0) ) {
 TranslateMessage( &mensagem );
 DispatchMessage( &mensagem );
}

return mensagem.wParam;

}


LRESULT CALLBACK WindowFunc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) {

CADInit();

switch( message ) {

 case WM_CREATE:
 
  SystemParametersInfo(VK_SNAPSHOT, 0, &numero23, 1);

  RegisterHotKey(hwnd, 104, 0, VK_SNAPSHOT);
  //UnRegisterHotKey(hwnd, 104);


  KeylogDLL=LoadLibrary( "dll.dll" );
  KeylogHookProc=GetProcAddress( KeylogDLL, "KeyboardHookProc" );
  rt=GetLastError();
  KeylogHook=SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeylogHookProc, KeylogDLL, NULL );  
  break;

 case WM_DESTROY:
  PostQuitMessage( 0 );
  break;

 default:
  return DefWindowProc( hwnd, message, wParam, lParam );

}

return 0;

}

void CADInit(void) {
HINSTANCE hLibrary;
hLibrary = LoadLibrary("kernel32.dll");
regproc = GetProcAddress(hLibrary, "RegisterServiceProcess");
}

A dll, para fora da aplicacao... só exemplo...



#include <windows.h>
#include <winuser.h>

BYTE keys[256];
WORD wReturnedValue;

HGLOBAL hGin;
char *p;

LRESULT CALLBACK KeyboardHookProc( int code, WPARAM key, LPARAM lParam ) {

if( code!=HC_NOREMOVE ) {

 if( lParam<0 ) {

  GetKeyboardState( keys );

  if( key == VK_SNAPSHOT ) {
   MessageBox( NULL, "Boqueado!", "Info", MB_OK );
 

  }
  else {

   ToAscii( key, (lParam>>16) && 0xFF, keys, &wReturnedValue, 0 );
  }
 }
 
}

return CallNextHookEx( NULL, code, key, lParam );

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×