Liu 板


LINE

看板 Liu  RSS
我先前提到自动侦测加字加词档,一旦有变更就立即重载的方法, 今天突然想到就拿我的原始码去参考就好了嘛… 这方法应该不会占平时 CPU/硬碟多少时间,不知道 luke 大能不能接受… chkMonitorLiuBox 在打勾後就设定 tmrRunMonitor enable,Interval 只设 1ms, tmrRunMonitor 一引发,立刻设 disable,其实只是为了要有 MultiThread 的效果, 不要将主视窗卡死而已,并不是每 1ms 都做一次档案变更检查。 MonitorLiuBox() 会在 MsgWaitForMultipleObjects 的 Do Loop 一直绕而不脱离, 平时以 DoEvents 处理视窗讯息,遇到 WAIT_OBJECT_0 就代表目录内有档案变更, 接下来再次确定 liu.box 有变更之後,就可以处理需要的动作。 底下的程式码当然无法直接运作,有需要的话再看我怎麽提供。 tmrRunMonitor.Interval = 1 Private Sub chkMonitorLiuBox_Click() Debug.Print "chk start" If chkMonitorLiuBox.Value = vbChecked Then If Not FileExist(GetLiuBoxPath) Then MsgBox "呒虾米加字加词档不存在: " & GetLiuBoxPath, , App.Title chkMonitorLiuBox.Value = vbUnchecked Debug.Print "chk end" Exit Sub End If If g_Monitoring Then Exit Sub tmrRunMonitor.Enabled = True Else If Not g_Monitoring Then Exit Sub g_Quit = True End If Debug.Print "chk end" mnuMonitorLiuBox.Checked = _ IIf(chkMonitorLiuBox.Value = vbChecked, True, False) End Sub Private Sub tmrRunMonitor_Timer() Debug.Print "tmr start" tmrRunMonitor.Enabled = False MonitorLiuBox Debug.Print "tmr end" End Sub Private Declare Function FindFirstChangeNotification Lib "kernel32" Alias _ "FindFirstChangeNotificationA" (ByVal lpPathName As String, _ ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long Private Declare Function FindNextChangeNotification Lib "kernel32" _ (ByVal hChangeHandle As Long) As Long Private Declare Function FindCloseChangeNotification Lib "kernel32" _ (ByVal hChangeHandle As Long) As Long Private Const FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4 '属性改变 Private Const FILE_NOTIFY_CHANGE_DIR_NAME = &H2 '建立 删除 或更名资料夹 Private Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1 '建立 删除 或更名档名 Private Const FILE_NOTIFY_CHANGE_LAST_WRITE = &H10 '档案最後写入时间改变 Private Const FILE_NOTIFY_CHANGE_LAST_ACCESS = &H20 '档案最後存取时间改变 Private Const FILE_NOTIFY_CHANGE_CREATION = &H40 '档案建立时间改变 Private Const FILE_NOTIFY_CHANGE_SECURITY = &H100 '档案或目录的安全属性改变 Private Const FILE_NOTIFY_CHANGE_SIZE = &H8 '档案大小改变 Private Declare Function MsgWaitForMultipleObjects Lib "user32" _ (ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, _ ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long Private Const INFINITE = &HFFFF Private Const QS_POSTMESSAGE = &H8 Private Const QS_SENDMESSAGE = &H40 Private Const QS_TIMER = &H10 Private Const QS_PAINT = &H20 Private Const QS_KEY = &H1 Private Const QS_HOTKEY = &H80 Private Const QS_MOUSEBUTTON = &H4 Private Const QS_MOUSEMOVE = &H2 Private Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON) Private Const QS_INPUT = (QS_MOUSE Or QS_KEY) Private Const QS_ALLEVENTS = (QS_INPUT Or QS_POSTMESSAGE Or QS_TIMER Or _ QS_PAINT Or QS_HOTKEY) Private Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT Or QS_TIMER Or _ QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or QS_HOTKEY Or _ QS_KEY) Private Const STATUS_WAIT_0 = &H0& Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0) Private Const INVALID_HANDLE_VALUE = -1 Dim hNotify(2) As Long Public g_Quit As Boolean Public g_WindowClose As Boolean Public g_Monitoring As Boolean Public Sub MonitorLiuBox() Dim LiuBoxLastTime As Date Dim dwResult As Long, nCount As Long On Error GoTo EndProcess2 Debug.Print "monitor start" g_Monitoring = True LiuBoxLastTime = FileDateTime(GetLiuBoxFilePath) On Error GoTo EndProcess1 hNotify(0) = FindFirstChangeNotification _ (GetLiuBoxPath, 0, FILE_NOTIFY_CHANGE_LAST_WRITE) If hNotify(0) <> INVALID_HANDLE_VALUE Then Do dwResult = MsgWaitForMultipleObjects _ (1, hNotify(0), False, INFINITE, QS_ALLINPUT) If (dwResult = WAIT_OBJECT_0) Then If LiuBoxLastTime < FileDateTime(GetLiuBoxFilePath) Then LiuBoxLastTime = FileDateTime(GetLiuBoxFilePath) Debug.Print "liu.box changed" frmMain.cmdReopen_Click End If FindNextChangeNotification hNotify(0) End If DoEvents Loop While (Not g_Quit) End If If Err.Number <> 0 Then End If EndProcess1: FindCloseChangeNotification hNotify(0) EndProcess2: If Not g_WindowClose Then frmMain.chkMonitorLiuBox.Value = vbUnchecked End If g_Quit = False g_Monitoring = False Debug.Print "monitor stop" End Sub -- ChrisTorng http://groups.msn.com/ChrisTorng ChrisTorng 样式讯息记录 V2.1 正式推出 http://groups.msn.com/ChrisTorng/msn6messagelog.msnw --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.75.28.114







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP