Archive for the 'C++' Category

C++, Programming

Aprire una soluzione Visual Studio 2008 con Visual Studio 2005

Qualche settimana fa avevo creato una soluzione con Visual Studio 2008 Express Edition, configurando tutto l’ambiente di lavoro, opzioni del linker c++ etc…. Dopodichè mi sono accorto di poter scaricare Visual Studio 2005 Professional Edition gratuitamente da msdn academy e allora, dopo aver formattato qualche giorno fa, ho preferito installare questo. Appena ho provato ad aprire il progetto che avevo creato, purtroppo Visual Studio mi ha risposto picche: è IMPOSSIBILE per lui aprire una soluzione creata con Visual Studio 2008, perché il file di progetto e soluzioni sono stati creati con una nuova versione del programma, quindi (in teoria) il formato del file sarà diverso…!!!

Errore di Visual Studio: Impossibile aprire il file di soluzione perché è stato creato con una versione più recente dell\'applicazione
Ero molto intristito dall’idea di dover ricreare il progetto da zero e reimpostare tutte le variabili e le opzioni di compilazioni (ci avevo perso un oretta a fare compilare il mio progettino che utilizza Ogre) e allora, perso per perso, ho provato a fare una cosa: ho modificato con un editor di testo il file della soluzione, nella speranza di poter ingannare il programma.

Continue Reading »

C++, Source Code, Windows

Intercettare tasti in c++

Per intercettare la pressione dei tasti in c++, è sufficente “agganciarsi” agli eventi del sistema operativo tramite il metodo SetWindowsHookEx delle API di windows:

HHOOK SetWindowsHookEx(
    int idHook,
    HOOKPROC lpfn,
    HINSTANCE hMod,
    DWORD dwThreadId
);

Il parametro hook specifica a che tipo di eventi bisogna agganciarsi, il secondo parametro invece è il nome alla funzione da chiamare quando viene generato l’evento. Per ulteriori dettagli consultare la relativa voce su MSDN.

g_hKeyboardHook = SetWindowsHookEx (WH_KEYBOARD_LL,
	LowLevelKeyboardProc,
	hInstance, 0);

Nel nostro caso come hook settiamo la costante WH_KEYBOARD_LL per intercettare gli eventi generati dalla tastiera. Il metodo LowLevelKeyboardProc sarà quindi qualcosa del genere:

// hook per la tastiera
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
	// p->vkCode contiene il codice del tasto premuto

	if ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN))
	{
		// è stato premuto il tasto
	}

	if ((nCode == HC_ACTION) && (wParam == WM_KEYUP || wParam == WM_SYSKEYUP))
 	{
 		// è stato rilasciato il tasto
 	}

	return CallNextHookEx(0,nCode,wParam,lParam);
}

A cosa può servire?
Nel mio caso l’ho usato per registrare tutte le pressioni della tastiera e del mouse per salvare una macro con le azioni eseguite, per poi farle rieseguire con lo stesso tempismo da un altro programmino (per poter svolgere azioni ripetitive). Tra l’altro se a qualcuno interessa un programma del genere, e mi arrivano abbastanza feedback, mi sa che pubblicherò i sorgenti e i binari. :)
Un’altra idea interessantemalvagia è quella di costruire dei keylogger per salvare tutto ciò che l’utente scrive.

Download C++ Intercept keyboard events. Downloads: 138