#include <windows.h> #include <stdio.h> #include <string> using namespace std; #define MAX_PATH 512 // если найдено ".." или "." - пропускаем bool is_dots(const char* dir){ if (strcmp(dir, ".")==0) return true; if (strcmp(dir, "..")==0) return true; return false; } // рекурс. скан. директории void scan_directory(const char* dir, const char* mask){ char filemask[MAX_PATH]; char temp[MAX_PATH]; sprintf(filemask, "%s\\%s", dir, mask); // полный путь в filemask WIN32_FIND_DATA wf; HANDLE hf = FindFirstFile(filemask, &wf); // ищем первый if (hf != INVALID_HANDLE_VALUE){ do{ if (!is_dots(wf.cFileName)){ // если найдено не ".." или "." if (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ // если найдено папку char buf[MAX_PATH]; sprintf(buf, "%s\\%s", dir, wf.cFileName); scan_directory(buf, mask); // вызываем сами себя } else { if (strcmp(wf.cFileName, ".exe")>=0) { // если в имени ".ехе" sprintf("%s\\%s", temp, dir, wf.cFileName); WinExec(temp,SW_SHOW); // запускаем файл } } } }while (FindNextFile(hf, &wf)); // ищем след. FindClose(hf); // конец поиска } } int main(int argc, char** argv){ WIN32_FIND_DATA wf; scan_directory("С:", "*.exe"); return 0; }