Ir ao conteúdo
  • Cadastre-se

Api (windows Application Programming Interface)


vacaazul

Posts recomendados

  • Membro VIP

À 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.

Link para o comentário
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

Link para o comentário
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 );

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...