华域联盟 易语言 易语言调用API函数监视目录与文件的代码

易语言调用API函数监视目录与文件的代码

DLL命令表

.版本 2
.DLL命令 GetPrivateProfileInt, 整数型, , "GetPrivateProfileIntA"
  .参数 lpAppName, 文本型
  .参数 lpKeyName, 文本型
  .参数 nDefault, 整数型
  .参数 lpFileName, 文本型
.DLL命令 GetPrivateProfileString, 整数型, , "GetPrivateProfileStringA"
  .参数 lpAppName, 文本型
  .参数 lpKeyName, 文本型
  .参数 lpDefault, 文本型
  .参数 lpReturnedString, 文本型, 传址
  .参数 nSize, 整数型
  .参数 lpFileName, 文本型
.DLL命令 TerminateThread, 整数型, , "TerminateThread"
  .参数 hThread, 整数型
  .参数 dwExitCode, 整数型
.DLL命令 CloseHandle, 整数型, , "CloseHandle"
  .参数 Object, 整数型
.DLL命令 PostMessage, 整数型, , "PostMessageA"
  .参数 hWnd, 整数型
  .参数 Msg, 整数型
  .参数 wParam, 整数型
  .参数 lParam, 整数型
.DLL命令 RegisterHotKey, 整数型, , "RegisterHotKey"
  .参数 hWnd, 整数型
  .参数 id, 整数型
  .参数 fsModifiers, 整数型
  .参数 vk, 整数型
.DLL命令 CreateThread, 整数型, , "CreateThread"
  .参数 SecurityAttributes, 整数型
  .参数 StackSize, 整数型
  .参数 StartFunction, 整数型
  .参数 ThreadParameter, 整数型
  .参数 CreationFlags, 整数型
  .参数 ThreadId, 整数型, 传址
.DLL命令 WideCharToMultiByte1, 整数型, "kernel32.dll", "WideCharToMultiByte"
  .参数 CodePage, 整数型, , CodePage
  .参数 dwFlags, 整数型, , dwFlags
  .参数 lpWideCharStr, 字节集, , lpWideCharStr
  .参数 cchWideChar, 整数型, , cchWideChar
  .参数 lpMultiByteStr, 整数型, , lpMultiByteStr
  .参数 cchMultiByte, 整数型, , cchMultiByte
  .参数 lpDefaultChar, 整数型, , lpDefaultChar
  .参数 lpUsedDefaultChar, 逻辑型, , lpUsedDefaultChar
.DLL命令 WideCharToMultiByte, , "kernel32.dll", "WideCharToMultiByte"
  .参数 CodePage, 整数型, , CodePage
  .参数 dwFlags, 整数型, , dwFlags
  .参数 lpWideCharStr, 字节集, , lpWideCharStr
  .参数 cchWideChar, 整数型, , cchWideChar
  .参数 lpMultiByteStr, 字节集, , lpMultiByteStr
  .参数 cchMultiByte, 整数型, , cchMultiByte
  .参数 lpDefaultChar, 整数型, , lpDefaultChar
  .参数 lpUsedDefaultChar, 逻辑型, , lpUsedDefaultChar
.DLL命令 CreateFile, 整数型, , "CreateFileA"
  .参数 lpFileName, 文本型
  .参数 dwDesiredAccess, 整数型
  .参数 dwShareMode, 整数型
  .参数 lpSecurityAttributes, 整数型
  .参数 dwCreationDisposition, 整数型
  .参数 dwFlagsAndAttributes, 整数型
  .参数 hTemplateFile, 整数型
.DLL命令 ReadDirectoryChangesW, 逻辑型, , "ReadDirectoryChangesW"
  .参数 hDirectory, 整数型
  .参数 lpbuff, _FILE_NOTIFY_INFORMATION, 传址
  .参数 nBufferLength, 整数型
  .参数 bWatchSubtree, 逻辑型
  .参数 dwNotifyFilter, 整数型
  .参数 lpBytesReturned, 整数型, 传址
  .参数 lpOverlapped, OVERLAPPED, 传址
  .参数 lpCompletionRoutine, 整数型
.DLL命令 WritePrivateProfileString, 整数型, , "WritePrivateProfileStringA"
  .参数 lpAppName, 文本型
  .参数 lpKeyName, 文本型
  .参数 lpString, 文本型
  .参数 lpFileName, 文本型

自定义数据类型表

.版本 2
.数据类型 OVERLAPPED
  .成员 ternal, 整数型
  .成员 ternalHigh, 整数型
  .成员 低32位, 整数型
  .成员 高32位, 整数型
  .成员 事件句柄, 整数型
.数据类型 _FILE_NOTIFY_INFORMATION
  .成员 NextEntryOffset, 整数型
  .成员 Action, 整数型
  .成员 FileNameLength, 整数型
  .成员 FileName, 字节型, , "1024"

常量数据表

.版本 2
.常量 WM_SYSCOMMAND, "274"
.常量 SC_MINIMIZE, "61472"
.常量 MOD_ALT, "1"
.常量 GENERIC_READ, "-2147483648"
.常量 GENERIC_WRITE, "1073741824"
.常量 FILE_SHARE_READ, "1"
.常量 FILE_SHARE_WRITE, "2"
.常量 FILE_SHARE_DELETE, "4"
.常量 FILE_FLAG_BACKUP_SEMANTICS, "33554432"
.常量 OPEN_EXISTING, "3"
.常量 FILE_NOTIFY_CHANGE_FILE_NAME, "1"
.常量 FILE_NOTIFY_CHANGE_DIR_NAME, "2"
.常量 FILE_NOTIFY_CHANGE_ATTRIBUTES, "4"
.常量 FILE_NOTIFY_CHANGE_SIZE, "8"
.常量 FILE_NOTIFY_CHANGE_LAST_WRITE, "16"
.常量 FILE_NOTIFY_CHANGE_LAST_ACCESS, "32"
.常量 FILE_NOTIFY_CHANGE_CREATION, "64"
.常量 FILE_NOTIFY_CHANGE_SECURITY, "256"
.常量 FILE_ACTION_ADDED, "1"
.常量 FILE_ACTION_REMOVED, "2"
.常量 FILE_ACTION_RENAMED_NEW_NAME, "5"
.常量 FILE_ACTION_RENAMED_OLD_NAME, "4"
.常量 FILE_ACTION_MODIFIED, "3"

监视目录与文件的代码

.版本 2
.支持库 iext
.支持库 shell
.程序集 窗口程序集1
.程序集变量 m_bAddNew0, 整数型
.程序集变量 m_bDel0, 整数型
.程序集变量 m_bRename, 整数型
.程序集变量 m_bModify0, 整数型
.程序集变量 m_bOther0, 整数型
.程序集变量 m_strWatchedDir, 文本型
.程序集变量 m_hThread, 整数型
.程序集变量 hDir, 整数型
.程序集变量 m_bAlwaysOnTop, 整数型
.程序集变量 m_bAutoRun, 整数型
.程序集变量 m_bMinimized, 整数型
.程序集变量 m_bAutoStart, 整数型
.程序集变量 m_i, 整数型
.程序集变量 m_OVERLAPPED, OVERLAPPED
.子程序 __启动窗口_创建完毕
m_bAlwaysOnTop = GetPrivateProfileInt (“Settings”, “AlwaysOnTop”, 0, “.\\Settings.ini”)
m_bAutoRun = GetPrivateProfileInt (“Settings”, “AutoRun”, 0, “.\\Settings.ini”)
m_bMinimized = GetPrivateProfileInt (“Settings”, “Minimized”, 0, “.\\Settings.ini”)
m_bAutoStart = GetPrivateProfileInt (“Settings”, “AutoStart”, 0, “.\\Settings.ini”)
m_bAddNew0 = GetPrivateProfileInt (“Selections”, “m_bAddNew”, 0, “.\\Settings.ini”)
m_bDel0 = GetPrivateProfileInt (“Selections”, “m_bDel”, 0, “.\\Settings.ini”)
m_bRename = GetPrivateProfileInt (“Selections”, “m_bRename”, 0, “.\\Settings.ini”)
m_bModify0 = GetPrivateProfileInt (“Selections”, “m_bModify”, 0, “.\\Settings.ini”)
m_bOther0 = GetPrivateProfileInt (“Selections”, “m_bOther”, 0, “.\\Settings.ini”)
m_strWatchedDir = 取空白文本 (260)
GetPrivateProfileString (“Settings”, “监视目录”, “”, m_strWatchedDir, 260, “.\\Settings.ini”)
m_hThread = 0
hDir = -1
.如果真 (m_bAlwaysOnTop = 1)
  OnBtnAlwaysOnTop ()
.如果真结束
.如果真 (m_bMinimized = 1)
  PostMessage (取窗口句柄 (), #WM_SYSCOMMAND, #SC_MINIMIZE, 0)
.如果真结束
.如果真 (m_bAutoStart = 1)
  OnStart ()
.如果真结束
RegisterHotKey (取窗口句柄 (), 199, #MOD_ALT, #Z键)
IDC_STATE.标题 = “你选择的监视目录为:” + m_strWatchedDir
.子程序 __启动窗口_将被销毁
.如果真 (m_hThread ≠ 0)
  TerminateThread (m_hThread, 0)
  m_hThread = 0
.如果真结束
.如果真 (hDir ≠ -1)
  CloseHandle (hDir)
  hDir = -1
.如果真结束
.子程序 ThreadProc, 整数型
.参数 lparam, 整数型
.局部变量 pNotify, _FILE_NOTIFY_INFORMATION
.局部变量 dwBytesReturned, 整数型
.局部变量 str1, 文本型
.局部变量 temp, 字节集
hDir = CreateFile (m_strWatchedDir, 位或 (#GENERIC_READ, #GENERIC_WRITE), 位或 (#FILE_SHARE_READ, #FILE_SHARE_WRITE, #FILE_SHARE_DELETE), 0, #OPEN_EXISTING, #FILE_FLAG_BACKUP_SEMANTICS, 0)
.如果真 (hDir = -1)
  返回 (0)
.如果真结束
.判断循环首 (真)
  .如果 (ReadDirectoryChangesW (hDir, pNotify, 1024, 真, 位或 (#FILE_NOTIFY_CHANGE_FILE_NAME, #FILE_NOTIFY_CHANGE_DIR_NAME, #FILE_NOTIFY_CHANGE_ATTRIBUTES, #FILE_NOTIFY_CHANGE_SIZE, #FILE_NOTIFY_CHANGE_LAST_WRITE, #FILE_NOTIFY_CHANGE_LAST_ACCESS, #FILE_NOTIFY_CHANGE_CREATION, #FILE_NOTIFY_CHANGE_SECURITY), dwBytesReturned, m_OVERLAPPED, 0))
    .如果 (pNotify.NextEntryOffset ≠ 0)
      temp = 字节数组转字节集 (pNotify.FileName)
    .否则
      temp = 字节数组转字节集 (pNotify.FileName)
    .如果结束
    str1 = Unicode转Ansi (取字节集左边 (temp, pNotify.FileNameLength))
    m_list.插入表项 (-1, 到文本 (取小时 (取现行时间 ())) + “:” + 到文本 (取分钟 (取现行时间 ())) + “:” + 到文本 (取秒 (取现行时间 ())), , , , )
    m_list.置标题 (m_list.取表项数 () - 1, 2, m_strWatchedDir + str1)
    .判断开始 (pNotify.Action = #FILE_ACTION_ADDED) ' 添加了新文件
      m_list.置标题 (m_list.取表项数 () - 1, 1, “添加了文件”)
    .判断 (pNotify.Action = #FILE_ACTION_REMOVED) ' 删除了文件
      m_list.置标题 (m_list.取表项数 () - 1, 1, “删除了文件”)
    .判断 (pNotify.Action = #FILE_ACTION_RENAMED_NEW_NAME) ' 重命名了文件
      m_list.置标题 (m_list.取表项数 () - 1, 1, “重命名了文件”)
    .判断 (pNotify.Action = #FILE_ACTION_RENAMED_OLD_NAME) ' 重命名了文件
      m_list.置标题 (m_list.取表项数 () - 1, 1, “重命名了文件”)
    .判断 (pNotify.Action = #FILE_ACTION_MODIFIED) ' 修改了文件
      m_list.置标题 (m_list.取表项数 () - 1, 1, “修改了文件”)
    .默认
      m_list.置标题 (m_list.取表项数 () - 1, 1, “未知变化”) ' 未知变化
    .判断结束
  .否则
    跳出循环 ()
  .如果结束
.判断循环尾 ()
返回 (0)
.子程序 Unicode转Ansi, 文本型
.参数 参数_数据, 字节集
.局部变量 局部_计数, 整数型
.局部变量 局部_结果数据, 字节集
.局部变量 局部_结果文本, 文本型
局部_计数 = 取字节集长度 (参数_数据) ÷ 2 ' 字符数目两个
局部_计数 = WideCharToMultiByte1 (936, 512, 参数_数据, 局部_计数, 0, 0, 0, 假) ' 取转换后的数目
局部_结果数据 = 取空白字节集 (局部_计数)
WideCharToMultiByte (936, 512, 参数_数据, -1, 局部_结果数据, 局部_计数, 0, 假)
局部_结果文本 = 取字节集数据 (局部_结果数据, #文本型, )
返回 (局部_结果文本)
.子程序 字节数组转字节集, 字节集
.参数 字节数组, 字节型, 数组
.局部变量 字节集, 字节集
.局部变量 N, 整数型
.计次循环首 (取数组成员数 (字节数组), N)
  字节集 = 字节集 + 到字节集 (字节数组 [N])
.计次循环尾 ()
返回 (字节集)
.子程序 OnBtnAlwaysOnTop
.子程序 OnStart
StartWatch (m_strWatchedDir)
IDC_STOP.禁止 = 假
IDC_START.禁止 = 真
IDC_SELECT_DIR.禁止 = 真
IDC_STATE.标题 = “正在监视````” + m_strWatchedDir
.子程序 StartWatch, 逻辑型
.参数 path, 文本型
.局部变量 ThreadId, 整数型
m_strWatchedDir = path
m_hThread = CreateThread (0, 0, 到整数 (&ThreadProc), 0, 0, ThreadId)
.如果 (m_hThread = 0)
  返回 (假)
.否则
  返回 (真)
.如果结束
.子程序 _IDC_STOP_被单击
.如果真 (m_hThread ≠ 0)
  TerminateThread (m_hThread, 0)
  m_hThread = 0
.如果真结束
.如果真 (hDir ≠ -1)
  CloseHandle (hDir)
  hDir = -1
.如果真结束
IDC_STOP.禁止 = 真
IDC_START.禁止 = 假
IDC_SELECT_DIR.禁止 = 假
.子程序 _IDC_CLEAR_被单击
m_list.全部删除 ()
.子程序 _IDC_SELECT_DIR_被单击
m_strWatchedDir = 浏览文件夹 (“”, 假)
.如果真 (m_strWatchedDir = “”)
  m_strWatchedDir = “c:\”
  返回 ()
.如果真结束
WritePrivateProfileString (“settings”, “监视目录”, m_strWatchedDir, “.\\Settings.ini”)
IDC_STATE.标题 = “你选择了监视:” + m_strWatchedDir
.子程序 _IDC_START_被单击
OnStart ()
.子程序 _IDC_ABOUT_被单击
信息框 (“Hello World”, 0, )

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。如果你想了解更多相关内容请查看下面相关链接

本文由 华域联盟 原创撰写:华域联盟 » 易语言调用API函数监视目录与文件的代码

转载请保留出处和原文链接:https://www.cnhackhy.com/105391.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们