/*   サブフォルダ探索 1999/ 8/25 宍戸 輝光 */ #include #define MAX_DIR 256 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); void searchDir(char *,HWND); HINSTANCE hInst; HWND hwMain; int n; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; WNDCLASSEX wndclass ; hInst=hInstance; /* プロセスのハンドルを保存 */ wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "CWindow"; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx (&wndclass); hwMain=CreateWindow ("CWindow","サブディレクトリ探索", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,560,480, NULL,NULL,hInstance,NULL); ShowWindow (hwMain,iCmdShow); /* ウインドウを表示 */ UpdateWindow (hwMain); /* 再描画 */ while (GetMessage (&msg,NULL,0,0)) { /* メッセージループ */ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND hwBt,hwLst; switch (iMsg) { case WM_CREATE: hwBt=CreateWindow("Button","開始", /* 開始ボタン作成 */ WS_CHILD | WS_VISIBLE,8,8,96,32,hwnd, (HMENU)0,hInst,NULL); hwLst=CreateWindow("LISTBOX","LIST", /* リストボックス */ WS_CHILD | WS_VISIBLE | WS_BORDER |WS_VSCROLL, 16,64,512,256,hwnd,(HMENU)1,hInst,NULL); break; case WM_COMMAND: switch (LOWORD(wParam)) { case 0: /* 開始ボタン */ n=0; SendMessage(hwLst,LB_RESETCONTENT,0,0); searchDir("c:\\",hwLst); break; } break; case WM_DESTROY : PostQuitMessage(0); break; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } void searchDir(char *lpszDir,HWND hwLst) { /* サブディレクトリ探索 */ WIN32_FIND_DATA fFind; char lpszPath[MAX_PATH]; char lpszSDir[MAX_PATH]; HANDLE hSearch; if (n>=MAX_DIR) return; if (lpszDir[strlen(lpszDir)-1]!='\\') /* 最後が"\" か? */ lstrcat(lpszDir,"\\"); /* 検索するファイル名作成 */ lstrcpy(lpszPath,lpszDir); /* 探索パスを作成 */ lstrcat(lpszPath,"*.*"); hSearch=FindFirstFile(lpszPath,&fFind); /* 探索開始 */ if (hSearch==INVALID_HANDLE_VALUE) { /* 見つからなければ探索終了 */ FindClose(hSearch); return; } if ((fFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=0 && lstrcmp(fFind.cFileName,".")!=0 && lstrcmp(fFind.cFileName,"..")!=0){ /* サブディレクトリの処理 */ lstrcpy(lpszSDir,lpszDir); /* サブディレクトリのパス作成 */ lstrcat(lpszSDir,fFind.cFileName); SendMessage(hwLst,LB_ADDSTRING,0,(LPARAM)lpszSDir); n++; if (n