这段代码在xp下可以,估计在2000下也行
procedure pScanPath(mDirName: string; mGoalMenuItem: TMenuItem);
  var
    vSearchRec: TSearchRec;
    vPathName: string;
    K: Integer;
    vMenuItem: TMenuItem;
  begin
    vPathName := mDirName + '\*.*';
    K := FindFirst(vPathName, faAnyFile, vSearchRec);
    while K=0 do begin
      if (vSearchRec.Attr and faDirectory <> 0) and (Pos(vSearchRec.Name, '..') = 0) then begin
        vMenuItem := TMenuItem.Create(mMenu);
        vMenuItem.Caption := vSearchRec.Name;
        vMenuItem.Hint := mDirName + '\' + vSearchRec.Name;
        vMenuItem.ImageIndex := GetIconIndex(mDirName + '\' + vSearchRec.Name);
        vMenuItem.OnClick := mItemClick;
        mGoalMenuItem.Add(vMenuItem);
        pScanPath(mDirName + '\' + vSearchRec.Name, vMenuItem)
      end else if (Pos(vSearchRec.Name, '..') = 0) then begin
        vMenuItem := TMenuItem.Create(mMenu);
        vMenuItem.Caption := vSearchRec.Name;
        vMenuItem.Hint := mDirName + '\' + vSearchRec.Name;
        vMenuItem.ImageIndex := GetIconIndex(mDirName + '\' + vSearchRec.Name);
        vMenuItem.OnClick := mItemClick;
        mGoalMenuItem.Add(vMenuItem);
      end;
      K := FindNext(vSearchRec);
    end;
    FindClose(vSearchRec);
  end; { pScanPath }