Archive for the 'Windows' Category

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

Funny, Windows

Protezione da programmi pericolosi

Anche Windows XP si rende conto da solo che il maggiore pericolo alla sicurezza del sistema operativo è Esplora Risorse stesso :P Protezione programma

C, Source Code, Windows

Spegnere o riavviare il pc

Piccolo post per una funzione che spegne o riavvia il pc su Windows in c++.
La funzione viene chiamata con il parametro false se si vuole spegnere il pc, con true se invece si vuole riavviare, e ritorna false nel caso in cui per qualche motivo la procedura di spegnimento non sia andata in porto (per es. qualche processo ha negato lo shutdown).

Shut Down

Per spegnere il pc basta quindi invocare la funzione nel seguente modo:

if (!ShutDown(false))
{
	// spegnimento non riuscito
}

Parte del codice sorgente è di seguito:
Continue Reading »

C, Windows

Conoscere tutti i processi in esecuzione da una unità

Continuando sulla scia della gestione in c++ delle unità removibili, il post seguente tratterà di come conoscere tutti i processi in memoria, che siano stati lanciati da un drive in particolare. Questo può essere utile, ad esempio, per chiudere tutti i processi di un pendrive che si vuole “smontare”.

Processi

Per ottenere la lista dei processi in esecuzione windows mette a disposizione due metodi: uno derivante da windows 95 (TOOLHELP API), compatibile quindi con tutti gli s.o. di microsoft dal 95 in poi, ed un metoto introdotto in windows NT (PSAPI), compatibile con gli s.o. derivanti da esso (NT, 2000, XP e vista). Naturalmente, dato che la stragrande maggioranza dei utenti windows usa xp, o vista :( , nell’esempio qui sotto ho usato le PSAPI. Attenzione però, per potere includere il file psapi.h bisogna istallare il “Platform SDK”.
Continue Reading »

C, Source Code, Windows

Classe timer in c++

Partendo dall’articolo sui timer in c++, abbiamo creato una semplice classe che fa da wrapper alle funzioni di Windows e che permette facilmente di fare partire un nuovo timer, stopparlo, e decidere quale funzione chiamare quando il tempo del timer è scaduto.

Timer

Un semplice esempio di utilizzo della classe è il seguente:
Continue Reading »

C, Source Code, Windows

Come ricavare la lettera di un pendrive usb

Nell’articolo “Intercettare il collegamento e la rimozione di una periferica USB” avevo mostrato un piccolo esempio che indicava come eseguire del codice al collegamento, e alla rimozione di una periferica usb. Se volessimo eseguire un programma dalla penna usb, avremmo bisogno di:

Penna usb

  1. intercettare l’inserimento della penna;
  2. essere sicuri che la periferica inserita sia una “mass storage device”, e che contenga un”volume”;
  3. conoscere la lettera dell’unità del volume.

Continue Reading »

C, Source Code, Windows

Intercettare il collegamento e la rimozione di una periferica USB

Qualche mesetto fa mi sono chiesto se non ci fosse una maniera per lanciare automaticamente il mio MozUp quando inserivo il mio pendrive nel pc, un pò come succede quando inserisci un cd ed il sistema automaticamente legge il file autorun.inf e fa il suo mestiere… .

Logo usb

Naturalmente, anche se sul MozUp c’é un’opzione per generare il file autorun.ini,

Continue Reading »

News, Windows

Vista miope

Dopo Vista 3.1, continuo con le mie impressioni veloci su Windows Vista. C’è da premettere che non ho avuto moltissimo tempo per provarlo (in totale avrò fatto un paio di sessioni di circa un ora e mezzo l’una su un pc a casa di amici), ma bisogna anche ribadire che se nel giro di quel poco tempo ho trovato tutte queste magagne, Vista non è poi un sistema operativo così perfetto!! :D
Punto 1: Integrazione con i nuovi controlli

Windows-vista-Wordpad-con-grafica-schifosa

Vista ha i controlli più belli e luminosi, ma nonostante questo tra i programmi di base inclusi nel sistema operativo non tutti sono perfettamente integrati! Nell’immagine si vede benissimo come il Firefox risulti molto più integrato del Wordpad, che in teoria dovrebbe essere stato compilato per girare alla perfezione su Windows Vista!! Il Notepad è più integrato, ma è rimasto lo stesso di Windows 95, con la funzione “A capo automatico” disattivata di default… :f7:

Punto 2: Giochi succhia-RAM

Chess.exe occupa 100MB di RAMVista ha preinstallato un gioco di scacchi veramente grazioso con una grafica 3D molto carina. Il problema è che questo semplicissimo gioco di scacchi, già all’apertura occupa cento MB di RAM!!! Ci saranno una dozzina di modelli 3D caricati da massimo 50KB l’uno, più tre texture da massimo 400 KB l’uno, perchè caspita deve occupare 100 MB di RAM? A quanto pare l’ottimizzazione alla M$ è un optional! Che schifo!! :f1:

Tra l’altro ho provato a perdere una partita, e spunta subito una schermata in primo piano che dice “HAI PERSO, SCARSONE, MWHAHAHHAA”, che non fa vedere che cavolo è successo alla fine della partita, senza dare la possibilità all’utente che ha perso di studiare la posizione finale della scacchiera… bah…

Punto 3: l’Aero non decolla

Continue Reading »

C, Windows

Timer in c++

Per utilizzare un timer in c++ su Windows bisogna invocare il metodo SetTimer(), definito in windows.h.

UINT_PTR SetTimer(
// handle alla finestra associata al timer
HWND hWnd,
// ID che vogliamo associare al timer
UINT_PTR nIDEvent,
// tempo del timer in millisecondi
UINT uElapse,
// metodo da invocare allo scattare del timer
TIMERPROC lpTimerFunc
);

L’argomento hWnd è un handle alla finestra associata al timer: per semplicità inizialmente lo impostiamo a NULL.

La funzione ritorna sempre un uint che indica l’ID del timer creato. Se hWnd è NULL il secondo parametro verrà ignorato e non possiamo associare direttamente un ID al timer; l’ID ci verrà ritornato dalla funzione, e se questo è diverso da zero allora il timer è stato creato con successo. Se invece hWnd non è nullo, l’ID del timer verrà assegnato con il parametro nIDEvent.

Aggiungiamo quindi una variabile globale dove salviamo l’ID del timer creato:

uint m_timerID;

Continue Reading »

Windows

Vista 3.1

Oggi ho installato Vista a casa di amici e abbiamo scoperto che quando la Microsoft dice che le DirectX10 possono girare soltanto su Windows Vista perchè fortemente legate alle nuove funzionalità del sistema operativo sta semplicemente dicendo porcate, perchè quest’ultimo in realtà dipende ancora da Windows 3.1!!!! :f2:

Windows Vista 3.1

Come si nota dall’immagine infatti la schermata di selezione della directory è rimasta ancora quella di Windows 3.1!!! Su Windows Xp era già presente questo “bug” (Pannello di controllo->Font e aggiungete un carattere), ma la Microsoft non l’ha ancora corretto nonostante questa schermata risalga ormai ai tempi preistorici! :f8: