vfp如何创建windows服务?

mhxcy 2013-11-07 10:40:08
最近想用vfp写一个windows服务,监视一个文件夹,如文件夹内文件增加,将新增的文件复制另一个文件夹内。不知道用vfp9.0和win7或winxp能否实现,如何实现??请各位大侠指教!!
...全文
205 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
回马枪 2013-11-08
  • 打赏
  • 举报
回复
从 Solution 示例剥离出来的代码:

Declare Long WaitForSingleObject In kernel32 ;
    INTEGER hHandle, ;
    INTEGER dwMilliseconds
Declare Long FindFirstChangeNotification In kernel32 STRING lpPathName, INTEGER bWatchSubtree, INTEGER dwNotifyFilter 
Declare Long FindNextChangeNotification In kernel32 ;
    INTEGER hChangeHandle
Declare Long GetLastError In kernel32
Declare Long FindCloseChangeNotification In kernel32 ;
    INTEGER hChangeHandle
#Define FILE_NOTIFY_CHANGE_FILE_NAME 0x01
#Define FILE_NOTIFY_CHANGE_DIR_NAME 0x02
#Define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x04
#Define FILE_NOTIFY_CHANGE_SIZE 0x08
#Define FILE_NOTIFY_CHANGE_LAST_WRITE 0x10
#Define FILE_NOTIFY_CHANGE_SECURITY 0x100
#Define FILE_NOTIFY_ALL = BITOR(FILE_NOTIFY_CHANGE_ATTRIBUTES,;
                                FILE_NOTIFY_CHANGE_DIR_NAME,;
                                FILE_NOTIFY_CHANGE_FILE_NAME,;
                                FILE_NOTIFY_CHANGE_LAST_WRITE,;
                                FILE_NOTIFY_CHANGE_SECURITY,;
                                FILE_NOTIFY_CHANGE_SIZE)

#Define INVALID_HANDLE_VALUE -1
#Define INFINITE 2147483647
#Define WAIT_FAILED 2147483647
#Define True -1
#Define False 0

lcPathSpec = "C:\Temp\"  && 假设你监测 Temp 目录下的事件
lbWatchSubtree = True

* 监测在该指定的 PathSpec 目录下的文件或文件夹的增加、改名、和删除的事件
lihNotify = FindFirstChangeNotification(lcPathSpec, lbWatchSubtree,FILE_NOTIFY_CHANGE_LAST_WRITE)
* FILE_NOTIFY_CHANGE_DIR_NAME)

If lihNotify <= INVALID_HANDLE_VALUE
    Messagebox ("FindFirstChangeNotification failed. Error code: " + ;
        LTRIM(Str(GetLastError())))
    Return
Else
    * Uncomment for debugging purposes.
    * MessageBox ("FindFirstChangfeNotification instantiation ;
    * succeeded. Handle is: " + ltrim(str(lihNotify)))
Endif

* Now, go into a wait state.
* This is going to look like a hang, since the IDE is all in
* one thread.
liWaitReturn = WaitForSingleObject(lihNotify, INFINITE)
If liWaitReturn >= WAIT_FAILED
    Messagebox ("FindFirstChangeNotification 失败,错误代码是 : " + ;
        LTRIM(Str(GetLastError())))
    Return
Else
    * Messagebox ("在 " + lcPathSpec + " 的目录下,有事件发生!")
    ? "在 " + lcPathSpec + " 的目录下,有事件发生!"
Endif

liWaitReturn = FindCloseChangeNotification(lihNotify)
回马枪 2013-11-08
  • 打赏
  • 举报
回复
VFP 9.0 的 Samples\Solution 目录下有个 Binding to Windows Message Events 的示例 可以实时监测文件或文件夹的事件和行为 主要的或核心语句是 BINDEVENT(_VFP.hWnd, WM_USER_SHNOTIFY, THIS, "handlewinmsg")
十豆三 2013-11-08
  • 打赏
  • 举报
回复
请参考 夜猫 版主的文章: 创建一个作为服务运行的 vfp 程序
dywfada 2013-11-07
  • 打赏
  • 举报
回复
我觉得你的设想100%可以实现。VFP9在WIN8中也能很好地运行,用TIMER控件定时读取文件夹中的文件名,用第三方软件把编译成的EXE文件设定成windows 服务启动运行。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧