云外归鸟工作室网站
标题:
[系统]FindFile 寻找文件
[打印本页]
作者:
kjgmj
时间:
2010-10-24 09:40
标题:
[系统]FindFile 寻找文件
贴上源码:
’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)
结束
欢迎光临 云外归鸟工作室网站 (http://www.ywgn.net/)
Powered by Discuz! X3