con este código no tienes que hacer casi nada (está en C pero podes pasarlo a VB sin problemas, funciona con las apis del sistema):
while(1){
HANDLE cnh = FindFirstChangeNotification("c:\\", TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME);
if(cnh!=INVALID_HANDLE_VALUE){
while(1) {
DWORD wr = WaitForSingleObject(cnh, INFINITE);
DWORD dwMilSecs = 200; // arbitrary; enlarge for floppies
do {
FindNextChangeNotification(cnh);
wr = WaitForSingleObject(cnh, dwMilSecs);
} while(wr == WAIT_OBJECT_0);
//MessageBox(0,"Event intercepted, refresh contents!\n",0,0);
if(wr==WAIT_ABANDONED)
break;
}
FindCloseChangeNotification(cnh); // release notification handle
}
}
FindFirstChangeNotification quedará en espera (el programa se detendrá) hasta que haya alguna modificación en "c:\\" o el directorio que elijas, solo tendrías que averiguar si la modificación fue de una nueva carpeta (preguntando si existe la carpeta) sino volverá a empezar, tendrías que agregar alguna forma de terminar el código si no te interesa continuar la ejecución....
S2