API DO WINDOWS TUTORIAL -> Dark Side
(
wallacediasferreira@hotmail.com)
Hi,
É de suma importância que um programador em ambiente WINDOWS tenha um conhecimento mínimo de sua API. Visando isso, resolvi postar um pequeno tutorial identificando e exemplificando as funções mais comuns.
Notas importantes:
1) O que é API?
API – Application Programming Interface ou Interface de Programação de Aplicativos é um conjunto de funções básicas e padrões que auxiliam a interação entre seu programa e o sistema operacional, ao limpar sua lixeira por exemplo, você está chamando por uma função da API, ou mesmo vale no processo de criação de arquivos e pastas, caixas de mensagens, dentro outros.
2) Quais as vantagens de programar em conjunto com a API?
Bem, trabalhar com funções do Windows traz diversas vantagens, como facilidade em gerar programas gráficos e ter acesso às tarefas básicas do WINDOWS, ter um certo controle sobre os componentes do computador como mouse, teclado e cd-rom, trabalhar com impressoras, lixeira, disco rígido, etc.
3) O que é necessário saber previamente?
O requisito básico para um entendimento maior do tutorial, é que você tenha um conhecimento razoável em alguma linguagem de programação em ambiente WINDOWS.
4) Qual linguagem será usada?
Usarei C como linguagem de programação, devido ao fato de ser uma linguagem popular e de fácil aplicação à API, geralmente, apenas é necessário incluir o HEADER windows.h, para podermos utilizar as funções oferecidas.
OBS: Postarei de 5 a 6 funções por vez, sempre atualizando o tópico quando possível.
Vamos começar:
Função 1: MessageBox
Talvez seja uma das funções mais simples, essa função é responsável pela exibição dos famosos balões de avisos do WINDOWS.
Sintaxe: MessageBox(0,"TEXTO","TÍTULO",TIPO|ICONE);
Citação:
#include
int main()
{
MessageBox(0,"Balão!","Hi",MB_OK|MB_ICONEXCLAMATION);
return 0;
}
Os seguintes valores são permitidos para o 'TIPO':
MB_OK -> OK.
MB_OKCANCEL -> OK,CANCELAR.
MB_ABORTRETRYIGONE -> ANULAR, REPETIR, IGNORAR.
MB_YESNOCANCEL -> SIM, NÃO, CANCELAR.
MB_YESNO -> SIM, NÃO.
MB_RETRYCANCEL ->REPETIR, CANCELAR.
Valores para 'ÍCONE':
MB_ICONERROR -> ERRO
MB_ICONQUESTION -> AJUDA
MB_ICONWARNING -> EXCLAMAÇÃO
MB_ICONINFORMATION -> INFORMAÇÃO
Função 2: FindWindow
Sintaxe: GetForegroundWindow(0,"TÍTULO")
É uma funcão muito interessante, podemos obter o número de identificação(HWND) de um aplicativo baseado em seu título.
Exemplo:
Citação:
#include
#include
#include
int main()
HWND janela;
{
janela = FindWindow(0,"Calculadora");
if(janela==0)
printf("Janela nao encontrada.");
else
printf("HWND da janela: %d",janela);
getch();
return 0;
}
No exemplo acima, defimos 'janela' como um dado 'HWND' que receberá o número ID do aplicativo, no caso a 'calculadora', em seguida, será verificado o valor de 'janela
' e caso seja 0 (HWND não encontrado) exibe uma mensagem, caso diferente de 0, exibe o HWND.
Função 3: GetForegroundWindow
Sintaxe: HWND = GetForegroundWindow()
Obtém o HWND da janela com FOCO.
Citação:
#include
#include
#include
char janela[255];
HWND foco;
int main(){
foco = GetForegroundWindow();
sprintf(janela,"O Hwnd da janela e': %d",foco);
printf(janela);
getch();
return 0;
}
Obtemos o HWND da janela em questão, e imprimos o seu valor, lembrando que HWND é um valor numérico sendo possível lê-lo com '%d' ou '%i'.
Função 4: GetWindowText
Sintaxe: GetWindowText(HWND,Variável(string),tamanho)
Permite obter o título de uma janela através do seu HWND.
Tomando como base o código anterior, temos:
Citação:
#include
#include
#include
char janela[255];
HWND foco;
int main(){
foco = GetForegroundWindow();
GetWindowText(foco,janela,255);
printf("O titulo da janela de HWND: %d, e' %s",foco,janela);
getch();
return 0;
}
Obtemos e imprimos o título da janela com FOCUS.
Função 5: GetUserName
Sintaxe: GetUserName(Variável(string),tamanho(dword))
Permite obter o nome de usuário do computador.
Citação:
#include
char nome[255];
DWORD size=255;
int main()
{
GetUserName(nome,&size);
MessageBox(0,nome,"Nome do usuário",MB_OK|MB_ICONINFORMATION);
return 0;
}
No exemplo acima, criamos a variável 'nome' para armazenar o dado, e um dado tipo 'DWORD' contendo o tamanho, em seguinda, é mostrado o valor obtido.
Funçao 6: SetConsoleTitle
Sintaxe: SetConsoleTitle("TÍTULO");
Altera o título da janela de console;
Citação:
#include
int main()
{
SetConsoleTitle("HI!");
getch();
return 0;
}
Muda o título para 'HI!'
Muito bem, por enquanto é só, dúvidas ou outras questões serão bem-vindas, vlw.
Bye.
Hi,
Continuando...
Função 13: GetKeyState
Sintaxe: GetKeyState(KEYASCII);
Retorna o valor do estado de uma tecla, 0 (NÃO PRESSIONADA) ou 1 (Pressionada).
Essa função é interessante para quem quer desenvolver seu próprio keylogger.
Citação:
#include
#include
int tecla = 20,valor;
int main()
{
valor = GetKeyState(tecla);
switch(valor)
{
case 0:
printf("Caps Lock esta desligado.");
break;
case 1:
printf("Caps Lock esta ligado.");
}
getch();
return 0;
}
O programa irá mostrar se a tecla CAPS LOCK, cujo valor ASCII é igual a 20, está desligada ou ligada.
Para conhecer os valores ASCII das outras teclas, procure por VIRTUAL KEYS ou por uma tabela ASCII.
Função 14: GetAsyncKeyState
Sintaxe: GetAsyncKeyState(KEYASCII);
Outra função importante para o desenvolvimento de keyloggers, essa função é capaz de 'capturar' as teclas digitadas no computador.
Citação:
#include
#include
#include
int x,retorno;
int main()
{
while(1){
Sleep(1);
for(x=65;x<=90;x++){
retorno = GetAsyncKeyState(x);
if(retorno==-32767)
printf("%c",x);
}
}return 0;
}
Esse programa irá mostrar as LETRAS digitadas no teclado.
Função 15: GetSystemTime
Sintaxe: GetSystemTime(systemtime);
Função responsável pela captura de data/hora local.
Citação:
#include
#include
#include
SYSTEMTIME tempo;
int main()
{
GetSystemTime(&tempo);
printf("%d/%d/%d",tempo.wDay,tempo.wMonth,tempo.wYear);
getch();
return 0;
}
Imprime a data no formato: DIA/MES/ANO.
Função 16: SetCursorPos()
Sintaxe: SetCursorPos(x,y);
Permite alterar a posição do cursor mouse.
Citação:
#include
int main()
{
SetCursorPos(0,0);
return 0;
}
Muda o cursor do mouse para a posição mais elevada da tela.
Função 17: GetCursorPos()
Sintaxe: GetCursorPos(PONTO);
Permite obter a posição do cusor do mouse.
Citação:
#include
#include
#include
POINT ponto;
int main()
{
GetCursorPos(&ponto);
printf("Horizontal: %d\nVertical: %d",ponto.x,ponto.y);
getch();
return 0;
}
Obtem e mostra a posição do cursor na tela.
Bye.
Função 18: RegOpenKey
Sintaxe: RegOpenKey(CHAVE,SUBCHAVE,VARIAVEL);
Permite obter acesso à uma ou mais chaves no registro.
Onde, para CHAVE temos:
HKEY_CLASSES_ROOT;
HKEY_CURRENT_USER;
HKEY_LOCAL_MACHINE;
HKEY_USERS;
HKEY_CURRENT_CONFIG.
SUBCHAVE -> seriam todas as outras 'pastas' contidas nas anteriores.
VARIAVEL -> variável que irá guardar o valor (numérico) da chave requisitada.
Citação:
#include
#include
#include
#include // Biblioteca adicional.
HKEY chave; //tipo de dado
int main()
{
RegOpenKey(HKEY_CURRENT_USER,"SOFTWARE",&chave);
printf("Valor: %d",chave);
RegCloseKey(chave); //Outra função -> API
getch();
return 0;
}
Abre e fecha o acesso à chave.
Função 19: RegCloseKey
Sintaxe: RegCloseKey(VARIAVEL);
Apenas fecha a chave.
Função 20: RegCreateKey
Sintaxe: RegCreateKey(CHAVE_PRINCIPAL,CHAVE_A_SER_CRIADA,VARIAVEL);
Cria uma subchave no registro.
Citação:
#include
#include
HKEY chave;
int main()
{
RegCreateKey(HKEY_CURRENT_USER,"MinhaChave",&chave);
return 0;
}
Função 21: RegDeleteKey
Sintaxe: RegDeleteKey(CHAVE_PRINCIPAL,CHAVE_A_SER_DELETADA);
Deleta uma subchave do registro.
Citação:
#include
#include
int main()
{
RegDeleteKey(HKEY_CURRENT_USER,"MinhaChave");
return 0;
}
Função 22: RegSetValueEx
Sintaxe: RegSetValueEx(CHAVE,VALOR,0,TIPO,VALOR,TAMANHO);
Para 'TIPO':
REG_SZ -> Valor da seqüência (texto);
REG_BINARY -> Valor binário
REG_DWORD -> Valor DWORD
REG_MULTI_SZ -> Valor de seqüência múltipla
REG_EXPAND_SZ -> Valor de seqüência expansível
Citação:
#include
#include
HKEY chave;
int main()
{
RegOpenKey(HKEY_CURRENT_USER,"MinhaChave",&chave);
RegSetValueEx(chave,"valor1",0,REG_SZ,"teste",5);
return 0;
}
No exemplo mostrado, é criado um valor texto: valor1, contendo 'teste'.
Função 23: RegQueryValueEx
Sintaxe: RegQueryValueEx(CHAVE,VALOR,0,DWORD->TIPO,BUFFER,DWORD->TAMANHO);
Citação:
#include
#include
#include
#include
HKEY chave;
char buffer[255];
DWORD tipo,tamanho=255;
int main()
{
RegOpenKey(HKEY_CURRENT_USER,"MinhaChave",&chave);
RegQueryValueEx(chave,"valor1",0,&tipo,buffer,&tamanho);
printf("Valor: %s Tipo: %d",buffer,tipo);
getch();
return 0;
}
Pega o conteúdo e tipo de dado do valor: 'valor1'.
Função 24: RegDeleteValue
Sintaxe: RegDeleteValue(chave,valor);
Citação:
#include
#include
HKEY chave;
int main()
{
RegOpenKey(HKEY_CURRENT_USER,"MinhaChave",&chave);
RegDeleteValue(chave,"valor1");
return 0;
}
Deleta o nosso valor...
Continua depois...
Bye.
Fonte: peguei com o Dark_Side pelo msn..
mandaste bem. parabens
By Xskull.
Bom _Dr4k0_!!!
Abraços
Ponto, e movendo pra area de programacao
TGASem Dúvida nenhuma, esse foi o tópico mais produtivo no darkers até hoje(Pelo menos para mim),

parabéns pelo tuto cara..
Abraços..
bom post..., + axu q se for falar tudo no forum da api do windows dara uma eternidade aconselho ao pessoal q ta afim saber sobre api do windows ir no site da microsoft e baixar o Help API REFERENCE, q tera tudo oq tu quiser, e para quem tem delphi tem a documentacao da API do Windows inteira muito boa, flws!!!
Vlw
pelos elogios

espero poder continuar ajudando
Parabéns!
Mto bom
Ótimo post.
Muito bom mesmo, meus parabéns.
HadeS
beleza
mas isso e uma rubtica C/C++
esse tuto e C ou e C++ ?
rog
Quote from: "rog"beleza
mas isso e uma rubtica C/C++
esse tuto e C ou e C++ ?
rog
Quote4) Qual linguagem será usada?
Usarei C como linguagem de programação, devido ao fato de ser uma linguagem popular e de fácil aplicação à API, geralmente, apenas é necessário incluir o HEADER windows.h, para podermos utilizar as funções oferecidas.
Entendeu?