Ir ao conteúdo
  • Cadastre-se
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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
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

×