Tutorial-->API do Windows

Started by _Dr4k0_, 06 de June , 2006, 05:21:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

_Dr4k0_

API DO WINDOWS TUTORIAL -> Dark Side
(mailto:wallacediasferreira@hotmail.com">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.
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

_Dr4k0_

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.
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

_Dr4k0_

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..
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

Anonymous


Anonymous


Shady

Ponto, e movendo pra area de programacao :)


Mundus Vult Decipi

TGA

TGA

Sem 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..
"A IMAGINAÇÃO É MAIS IMPORTANTE QUE O CONHECIMENTO"
__________________________________________________________

anakim

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!!!
Why use Windows? If I have the door ;-)

_Dr4k0_

Vlw

pelos elogios

;)

espero poder continuar ajudando
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

Anonymous


HadeS

Ótimo post.

Muito bom mesmo, meus parabéns.

HadeS

rog

beleza

mas isso e uma rubtica C/C++

esse tuto e C ou e C++ ?

rog
realty.sys is corrupt :  reboot the universe (Y/N)

_Dr4k0_

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?
100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.