PDA

Ver Versão Completa : TUTORIAL -> API DO WINDOWS



dark_side
25 May 2006, 00:41
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: As funções estão organizadas por ordem alfabética.

Vamos começar:

Função Beep
Sintaxe: Beep(freqüência,duração);
Emite um sinal sonoro.


#include <windows.h>
int freq,duration=250,x;
int main()
{
for(x=1;x<2>=100;freq-=100)
Beep(freq,duration);
}
return 0;
}


Hehe, toca uma musiquinha.

Função CopyFile
Sintaxe: CopyFile(origem,destino,0);
Copia um arquivo.



#include <windows.h>
int main(){
CopyFile("c:\\exemplo.txt","c:\\windows\\copia.txt",0);
return 0;
}

Função DeleteFile
Sintaxe: DeleteFile(arquivo);
Deleta um arquivo.


#include <windows.h>
int main()
{
DeleteFile("c:\\exemplo.txt");
return 0;
}

Função EnableWindow
Sintaxe: EnableWindow(HWND,VALOR)
Permite habilitar ou disabilitar um objeto.
Onde:
HWND => Handle do objeto;
VALOR => true(1) - habilita ou false(0) - disabilita

Exemplo:


#include <conio.h>
#include <stdio.h.h>
#include <windows.h>
int main()
HWND janela;
{
janela = FindWindow(0,"Calculadora");
if(janela==0)
printf("Janela não encontrada.");
else
EnableWindow(janela,false);
getch();
return 0;
}

Função FindWindow
Sintaxe: FindWindow(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:


#include <conio.h>
#include <stdio.h.h>
#include <windows.h>
int main()
HWND janela;
{
janela = FindWindow(0,"Calculadora");
if(janela==0)
printf("Janela não 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 FindWindowEx
Sintaxe: FindWindowEx(JANELA_PRINCIPAL,0,CLASSE,NULL)

Esta função é a extensão da função FindWindow. Enquanto a função FindWindow é destinada a obter o HWND de uma janela, a função FindWindowEx, pode obter o HWND dos objetos presentes na janela, uma vez em que todos possuem HWND.

JANELA_PRINCIPAL => HWND da janela principal.
CLASSE => Classe do objeto.

Exemplo:


#include <conio.h.h>
#include <stdio.h.h>
#include <windows.h>
HWND janela,objeto;
int main()
{
janela = FindWindow(0,"Calculadora");
if(janela==0){
printf("Janela não encontrada."); }
else{
objeto = FindWindowEx(janela,0,"Edit",NULL);
printf("HWND do visor da calculadora: %d",objeto);
}
getch();
return 0;
}

Função GetAsyncKeyState
Sintaxe: GetAsyncKeyState(KEYASCII);

Uma função importante para o desenvolvimento de keyloggers, essa função é capaz de ?capturar? as teclas digitadas no computador.



#include <stdio.h.h>
#include <windows.h>
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 GetConsoleTitle
Sintaxe: GetConsoleTitle(buffer,tamanho);

Obtém o tàtulo da janela no console.



#include <stdio.h.h>
#include <windows.h>
char buffer[255];
int main()
{
GetConsoleTitle(buffer,255);
MessageBox(0,buffer,"Tàtulo",MB_OK);
return 0;
}


Função GetCurrentDirectory
Sintaxe: GetCurrentDirectory(tamanho,buffer)

Obtém o diretório atual.


#include <windows.h>
char dir[255];
int main() {
GetCurrentDirectory(255,dir);
MessageBox(0,dir,"Diretório:",MB_OK|MB_ICONINFORMATION);
return 0;
}


Função GetCursorPos
Sintaxe: GetCursorPos(PONTO);

Permite obter a posição do cusor do mouse.


#include <conio.h>
#include <stdio.h.h>
#include <windows.h>
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.

dark_side
27 May 2006, 01:50
Função GetForegroundWindow
Sintaxe: HWND = GetForegroundWindow()

Obtém o HWND da janela com FOCO.


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

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



#include <stdio.h>
#include <windows.h>
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 GetLocalTime
Sintaxe: GetLocalTime(systemtime);

Função responsível pela captura de data/hora local.


#include <conio.h>
#include <stdio.h>
#include <windows.h>
SYSTEMTIME tempo;

int main()
{
GetLocalTime(&tempo);
printf("%d/%d/%d",tempo.wDay,tempo.wMonth,tempo.wYear);
getch();
return 0;
}
Imprime a data no formato: DIA/MES/ANO.

Função GetSystemDirectory
Sintaxe: GetSystemDirectory(buffer,tamanho)

Obtém a pasta do sistema.


#include <windows.h>
char dir[255];
int main() {
GetSystemDirectory(dir,255);
MessageBox(0,dir,"Diretório:",MB_OK|MB_ICONINFORMATION);
return 0;
}


Função GetTempPath
Sintaxe: GetTempPath(tamanho,buffer)

Obtém a pasta dos arquivos temporírios.


#include <windows.h>
char dir[255];
int main() {
GetTempPath(255,dir);
MessageBox(0,dir,"Diretório:",MB_OK|MB_ICONINFORMATION);
return 0;
}


Função GetUserName
Sintaxe: GetUserName(Variível(string),tamanho(dword))

Permite obter o nome de usuírio do computador.

#include <windows.h>
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ção GetWindowsDirectory
Sintaxe: GetWindowsDirectory(buffer,tamanho)

Obtém a pasta do Windows.


#include <windows.h>
char dir[255];
int main() {
GetWindowsDirectory(dir,255);
MessageBox(0,dir,"Diretório:",MB_OK|MB_ICONINFORMATION);
return 0;
}


Função 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:

#include <conio.h>
#include <stdio.h>
#include <windows.h>
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 MessageBox
Sintaxe MessageBox(HWND,"TEXTO","TÍTULO",TIPO|ICONE)
Talvez seja uma das funções mais simples, essa função é responsível pela exibição dos famosos balões de avisos do WINDOWS.

Onde HWND é o HANDLE da janela onde o MessageBox serí mostrado, 0 para indefinido.


#include <windows.h>
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 MoveFile
Sintaxe MoveFile(origem,destino)
Move um arquivo.



#include <windows.h>
int main(){
MoveFile("c:\\exemplo.txt","c:\\windows\\copia.txt");
return 0;
}

dark_side
27 May 2006, 14:37
Função SetConsoleTitle
Sintaxe: SetConsoleTitle(TÍTULO)
Muda o tàtulo do console.

Exemplo:



#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleTitle("hi!");
getch();
return 0;}


Função SetCurrentDirectory
Sintaxe: SetCurrentDirectory(diretorio)

Altera o diretório atual.


#include <windows.h>
int main() {
SetCurrentDirectory("c:\\");
return 0;
}


Função SetCursorPos
Sintaxe: SetCursorPos(x,y);

Permite alterar a posição do cursor mouse.


#include <windows.h>
int main()
{
SetCursorPos(0,0);
return 0;
}
Muda o cursor do mouse para a posição mais elevada da tela.

Função SetFocus
Sintaxe: SetFocus(HWND)
Retorna o foco em uma janela.

Exemplo:



#include <conio.h>
#include <stdio.h>
#include <windows.h>
HWND janela;
int main()
{
janela = FindWindow(0,"Calculadora");

if(janela==0)
SetFocus(janela);

getch();
return 0;}


Função SetWindowText
Sintaxe:SetWindowText(HWND,TEXTO);

Altera o texto de um objeto de acordo com seu HWND.


#include <windows.h>
HWND calc;
int main()
{
calc = FindWindow(0,"Calculadora");
if(calc!=0)
SetWindowText(calc,"HI!!!");
return 0;
}


Função Sleep
Sintaxe: Sleep (milisegundos)
Função muito útil que consiste em definir uma pausa de milisegundos no programa.


#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main()
{
Sleep(3000);
printf("3 segundos se passaram...");
getch();
return 0;
}

Função ShowWindow
Sintaxe: ShowWindow(Modo)
Permite alterar o modo de visualização de uma janela.
Temos diversos Modos, os mais comuns são:
SW_HIDE => Oculta a janela
SW_MAXIMIZE => Maximiza a janela
SW_MINIMIZE => Minimiza a janela
SW_SHOW => Modo normal




#include <stdio.h>
#include <windows.h>
HWND calc;
int main()
{
calc = FindWindow(0,"Calculadora");
ShowWindow(calc,SW_HIDE);
getch();
return 0;
}
Oculta a janela da calculadora.

Função SwapMouseButton
Sintaxe: SwapMouseButton(VALOR)
Altera a configuração do botão do mouse.

Para valor temos:

1(true) => Mouse canhoto.
0(false) => Mouse destro.



#include <stdio.h>
#include <windows.h>
int main()
{
SwapMouseButton(1);
Sleep(5000);
SwapMouseButton(0);
return 0;
}
Inverte o mouse e o restaura.

H4C
31 May 2006, 02:10
nossa mano, parabens

mkswd
02 Jun 2006, 14:00
Ótimo tópico!
Parabéns...

_Dr4k0_
04 Jun 2006, 14:58
Excelente!

dark_side
04 Jun 2006, 16:33
Hi,
Obrigado pelos comentírios.
Estou reorganizando as funções, em breve novas serão adicionadas aqui.
Bye.

cyber_X
09 Jun 2006, 22:56
Nossa, parabéns...
muito bom o tópico!

dark_side
11 Jun 2006, 00:23
Hi,
Quando tiver tempo, edito essas mensagens para dar lugar às funções.
Bye.

danett
13 Jun 2006, 13:03
Legal esse topico, parabens!

celio_developer
15 Jun 2006, 22:18
ta muito bão os posts Dark Side...continua aeh...ta ajudando bastante....

dark_side
16 Jun 2006, 03:22
Hi, pretendo continuar sim, como meu acesso à internet é através de conexão discada, tenho a oportunidade de postar mais aos fins de semana. Brevemente eu posto a continuação. Vlw.
Bye.

Khristian
20 Jun 2006, 10:45
Hi dark, x)

tem alguma função que retorne a tecla pressionada? Eu acho que fazer um kl usando GetAsyncKeyState ficaria meio pesado, não?

abraço, parabens pelo tópico ;)

Calkines
20 Jun 2006, 11:00
Oi sera que voce pode disponibilizar um site ou algum lugar para eu poder baixar as bibliotecas" windows.h, winreg.h " to usando o turbo c++ mais eli nao vem com elas ;/
obrigado

dark_side
22 Jun 2006, 21:07
Hi dark, x)

tem alguma função que retorne a tecla pressionada? Eu acho que fazer um kl usando GetAsyncKeyState ficaria meio pesado, não?

abraço, parabens pelo tópico ;)
Hi,
Em C, a função getch() contida no 'conio.h' retorna a tecla digitada, exemplo:
char ch;
ch = getch();

Porém esta função, so consegue obter estas teclas quando o programa estiver com o foco. A função GetAsyncKeyState, por sua vez, é capaz de "capturar" a tecla digitada independente se o programa em questão esteja com o foco ou não.
O programa não fica pesado ao ponto de ser notível no sistema.
Vlw.
Bye.

dark_side
22 Jun 2006, 21:10
Oi sera que voce pode disponibilizar um site ou algum lugar para eu poder baixar as bibliotecas" windows.h, winreg.h " to usando o turbo c++ mais eli nao vem com elas ;/
obrigado
Hi,
não sei se estou enganado, mas o turbo c++ não suporta estas bibliotecas. Seria aconselhível que você obtesse outro compilador, como o DEV C++ por exemplo, que não é pesado e tem suporte às bibliotecas referidas.
Bye.

Bruno Candido
25 Jun 2006, 23:41
MUUUITO bom o topico xD
parabéns ^^

evilk3nn3d6
06 Jul 2006, 02:05
Muito bom o tópico ^^.