登录 注册 找回密码 开启辅助访问 商业用户中心 购物车有0件商品 切换到宽版
搜索
查看: 2199|回复: 0
打印 上一主题 下一主题

[源码] [系统]FindFile 寻找文件

[复制链接]
跳转到指定楼层
楼主
发表于 2010-10-24 09:40:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
贴上源码:
’FindFile.Bi


变量 共享 hInstance 为 HMODULE
变量 共享 hWnd 为 HWND
变量 共享 hThread 为 HWND
变量 共享 szTmp 为 字符型 * MAX_PATH
变量 共享 szFilter 为 字符型 * 16
变量 共享 i 为 整数型
常量 szDefPath = "C:\WINDOWS"
常量 szDefFile = "*.dll"
常量 szOpen = "打开"

#定义 IDD_DLG1                1000
#定义 IDC_EDTPATH             1005
#定义 IDC_LSTFILES            1002
#定义 IDC_STCFILES            1004
#定义 IDC_BTNSTART            1003
#定义 IDC_BTNSTOP             1001
#定义 IDOK2                   1023
#定义 IDC_EDTFILE             1006

‘==========================================
‘FindFile.Bas


#引用 仅一次 "windows.bi"
#引用 仅一次 "win/shellapi.bi"
#引用 "FindFile.bi"
子程序 FindFiles (传值 sFile 为 文本)
  变量 wfd 为 WIN32_FIND_DATA
  变量 hwfd 为 HWND
  变量 sPath 为 文本
  i = 倒找文本 (sFile , "\")
  如果 i 则
    sPath = 取左边 (sFile , i)
  结束 如果
  hwfd = FindFirstFile (sFile , @wfd)
  如果 hwfd < > INVALID_HANDLE_VALUE 则
    条件循环 TRUE
      如果 (wfd.dwFileAttributes 与 FILE_ATTRIBUTE_DIRECTORY)= 0 则
        如果 到小写 (取右边 (wfd.cFileName , 4))= szFilter 则
          szTmp = sPath &wfd.cFileName
          i = SendDlgItemMessage (hWnd , IDC_LSTFILES , LB_ADDSTRING , 0 , 转换类型 (LPARAM , @szTmp))
          SetDlgItemInt (hWnd , IDC_STCFILES , i , FALSE)
        结束 如果
      否则
        如果 wfd.cFileName < > "." 与 wfd.cFileName < > ".." 则
          szTmp = sPath &wfd.cFileName &"\*.*"
          FindFiles (szTmp)
        结束 如果
      结束 如果
      如果 FindNextFile (hwfd , @wfd)= FALSE 则
        退出 条件循环
      结束 如果
    条件循环尾
    FindClose (hwfd)
  结束 如果
结束 子程序
函数 ThreadProc (传值 hWin 为 HWND)为 整数型
  变量 hCtl 为 HWND
  变量 buff 为 字符型 * MAX_PATH

  hCtl = GetDlgItem (hWin , IDC_LSTFILES)
  SendMessage (hCtl , LB_RESETCONTENT , 0 , 0)
  GetDlgItemText (hWin , IDC_EDTPATH , @buff , 取尺寸 (buff))
  如果 取右边 (buff , 1)= "\" 则
    buff = buff &"*.*"
  否则
    buff = buff &"\*.*"
  结束 如果
  GetDlgItemText (hWin , IDC_EDTFILE , @szFilter , 取尺寸 (szFilter))
  szFilter = 文本中间 (到小写 (szFilter), 2)
  FindFiles (buff)
  hCtl = GetDlgItem (hWin , IDC_BTNSTOP)
  ShowWindow (hCtl , SW_HIDE)
  hCtl = GetDlgItem (hWin , IDC_BTNSTART)
  ShowWindow (hCtl , SW_SHOW)
  CloseHandle (hThread)
  hThread = 0
  返回 0
结束 函数
函数 DlgProc (传值 hWin 为 HWND , 传值 uMsg 为 UINT , 传值 wParam 为 WPARAM , 传值 lParam 为 LPARAM)为 整数型
  变量 为 整数型 id , 事件 , nInx
  变量 hCtl 为 HWND
  变量 rect 为 RECT
  变量 buff 为 字符型 * MAX_PATH
  判断 分支 uMsg
    分支 WM_INITDIALOG
      hWnd = hWin
      SendDlgItemMessage (hWin , IDC_EDTPATH , EM_LIMITTEXT , 64 , 0)
      SetDlgItemText (hWin , IDC_EDTPATH , @szDefPath)
      SendDlgItemMessage (hWin , IDC_EDTFILE , EM_LIMITTEXT , 16 , 0)
      SetDlgItemText (hWin , IDC_EDTFILE , @szDefFile)
      '
    分支 WM_CLOSE
      EndDialog (hWin , 0)
      '
    分支 WM_COMMAND
      id = 取低十六位 (wParam)
      事件 = 取高十六位 (wParam)
      判断 分支 事件
        分支 BN_CLICKED
          判断 分支 id
           分支 IDOK2
              如果 hThread 则
                TerminateThread (hThread , 0)
                CloseHandle (hThread)
              结束 如果
              EndDialog (hWin , 0)
              '
           分支 IDC_BTNSTART
              hThread = CreateThread (NULL , NULL , 转换类型 (任意 指针 , @ThreadProc), hWin , NORMAL_PRIORITY_CLASS , @id)
              hCtl = GetDlgItem (hWin , IDC_BTNSTART)
              ShowWindow (hCtl , SW_HIDE)
              hCtl = GetDlgItem (hWin , IDC_BTNSTOP)
              ShowWindow (hCtl , SW_SHOW)
              '
            分支 IDC_BTNSTOP

              TerminateThread (hThread , 0)
              CloseHandle (hThread)
              hThread = 0
              hCtl = GetDlgItem (hWin , IDC_BTNSTOP)
              ShowWindow (hCtl , SW_HIDE)
              hCtl = GetDlgItem (hWin , IDC_BTNSTART)
              ShowWindow (hCtl , SW_SHOW)
              '
          结束 判断
          '
        分支 LBN_DBLCLK
          nInx = SendDlgItemMessage (hWin , IDC_LSTFILES , LB_GETCURSEL , 0 , 0)
          SendDlgItemMessage (hWin , IDC_LSTFILES , LB_GETTEXT , nInx , 转换类型 (LPARAM , @buff))
          ShellExecute (hWin , @szOpen , @buff , NULL , NULL , SW_SHOWNORMAL)
          '
      结束 判断
    分支 WM_SIZE
      GetClientRect (hWin , @rect)
      hCtl = GetDlgItem (hWin , IDC_EDTPATH)
      MoveWindow (hCtl , 0 , 0 , rect.right-100 , 22 , TRUE)
      hCtl = GetDlgItem (hWin , IDC_EDTFILE)
      MoveWindow (hCtl , rect.right-100 , 0 , 100 , 22 , TRUE)
      hCtl = GetDlgItem (hWin , IDC_LSTFILES)
      MoveWindow (hCtl , 0 , 25 , rect.right , rect.bottom-40-25 , TRUE)
      hCtl = GetDlgItem (hWin , IDOK2)
      MoveWindow (hCtl , rect.right-100 , rect.bottom-35 , 97 , 31 , TRUE)
      hCtl = GetDlgItem (hWin , IDC_BTNSTART)
      MoveWindow (hCtl , rect.right-200 , rect.bottom-35 , 97 , 31 , TRUE)
      hCtl = GetDlgItem (hWin , IDC_BTNSTOP)
      MoveWindow (hCtl , rect.right-200 , rect.bottom-35 , 97 , 31 , TRUE)
      hCtl = GetDlgItem (hWin , IDC_STCFILES)
      MoveWindow (hCtl , 0 , rect.bottom-30 , 75 , 16 , TRUE)
      '
    分支 否则
      返回 FALSE
      '
  结束 判断
  返回 TRUE
结束 函数


  hInstance = GetModuleHandle (NULL)
  DialogBoxParam (hInstance , 转换类型 (字符型 指针 , IDD_DLG1), NULL , @DlgProc , NULL)

  ExitProcess (0)
  结束


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表