Newsgroup: it.comp.programmare.win32
Titolo: Chi mi aiuta con questa dll????

Ho creato una semplice applicazione di cui vedete la WndProc qui di seguito
:
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	TCHAR szHello[MAX_LOADSTRING];
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
	switch (msg)
	{
 
		case WM_CREATE:
			SetTimer(hWnd, 1, 1, NULL);
			hGlobalInst=LoadLibrary(TEXT("hkey.dll"));
		break;
		case WM_COMMAND:
			wmId = LOWORD(wParam);
			wmEvent = HIWORD(wParam);
			// Parse the menu selections:
			switch (wmId)
			{
				case IDM_ABOUT:
				   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
				   break;
				case IDM_EXIT:
				   DestroyWindow(hWnd);
				   break;
				default:
				   return DefWindowProc(hWnd, msg, wParam, lParam);
			}
			break;
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			// TODO: Add any drawing code here...
			RECT rt;
			GetClientRect(hWnd, &rt);
			DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
			EndPaint(hWnd, &ps);
			break;
		case WM_TIMER:
			KeyboardHookProc();
		break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, msg, wParam, lParam);
   }
   return 0;
}
mentre qui di seguito il codice della dll
#include "stdafx.h"
#include "hkey.h"
#include <stdio.h>
static HHOOK hKeyboardHook=0;
HWND hDlg=NULL;
HKEY_API LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM
lParam)
{
	const KEY_UP=0x80000000;
	const KEY_WAS_DOWN=0x40000000;
	if(nCode<0)
		return CallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
	if(nCode==HC_ACTION)
	{
		if(!(lParam & KEY_WAS_DOWN))
		{
			MessaggeBox(...char catturato...)
		}
	}
	return CallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
}
BOOL APIENTRY DllMain( HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID
lpReserved)
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
hKeyboardHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardHookProc,hModule,0);
 
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
 
		case DLL_PROCESS_DETACH: break;
    }
    return TRUE;
}
// This is an example of an exported variable
HKEY_API int nHkey=0;
// This is an example of an exported function.
HKEY_API int fnHkey(void)
{
	return 42;
}
// This is the constructor of a class that has been exported.
// see hkey.h for the class definition
CHkey::CHkey()
{
	return;
}
Purtroppo non capisco dove sbaglio, se l'hook lo settassi all'interno di una
DialogBox il giochino di catturare tutti
i tasti premuti (fintanto che che l'applicanzione che gestisce la Dialog Box
ha il focus) della tastiera funziona,al contrario se voglio catturare tutti
i tasti di tutti i thread nn funziona
nulla.
Qualcuno potrebbe darmi una mano????
Danke.
Alex
--------------------------------
Inviato via 
http://usenet.libero.it

Prova a fare il setwindowhook nel create del finestra e non nell'attach
della dll.
Chiaramente la callback deve rimanere una funzione esportata dalla dll.
Se metti l'hook sull'attach ti crei dei casini perchè la dll è iniettata in
tutti i processi che sparano eventi di tastiera. Ti trovi un catena di n
hook che ti mangiano risorse per fare tutti la stessa cosa.