社区
Delphi
帖子详情
当一个固定文件夹下多了一个文件,怎样让程序立即知道,并作出响应!
一笑天下而已
2003-12-11 11:18:08
当某个固定目录下,多了一个文件,怎样让程序立即知道,并作出响应!最好不要用Ttimer!
...全文
82
18
打赏
收藏
当一个固定文件夹下多了一个文件,怎样让程序立即知道,并作出响应!
当某个固定目录下,多了一个文件,怎样让程序立即知道,并作出响应!最好不要用Ttimer!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zswangII
2003-12-29
打赏
举报
回复
//通过ShellAPI函数来实现比较科学~~
//注册一个事件响应~~
//代码如下~~
unit TestNotify;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShlObj, ShellAPI;
const
WM_SHNOTIFY = WM_USER + 10;
type
TFormTestNotify = class(TForm)
MemoNotifyLog: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FNotifyHandle: THandle;
procedure WMSHNOTIFY(var Msg: TMessage); message WM_SHNOTIFY;
public
{ Public declarations }
end;
var
FormTestNotify: TFormTestNotify;
implementation
{$R *.dfm}
type
NOTIFYREGISTER = packed record
pidlPath: PItemIDList;
bWatchSubtree: BOOL;
end;
PNotifyRegister = ^NOTIFYREGISTER;
{$WARNINGS OFF}
function SHChangeNotifyRegister(hWnd: HWND; dwFlags: Integer;
wEventMask: Cardinal; uMsg: UINT; cItems: Integer;
lpItems: PNotifyRegister): HWND; stdcall; external Shell32 index 2;
function SHChangeNotifyDeregister(hWnd: HWND): Boolean; stdcall;
external Shell32 index 4;
function SHILCreateFromPath(pszPath: PChar; ppidl: PItemIDList;
rgflnOut: PDWORD): HResult; stdcall; external Shell32 index 28;
{$WARNINGS ON}
procedure TFormTestNotify.FormCreate(Sender: TObject);
var
vNotifyRegister: NOTIFYREGISTER;
vAttributes: WORD;
vItemIDList: PItemIDList;
begin
SHILCreatefromPath('c:\temp', @vItemIDList, @vAttributes);
vNotifyRegister.pidlPath := vItemIDList;
vNotifyRegister.bWatchSubtree := True;
FNotifyHandle := SHChangeNotifyRegister(Handle,
SHCNF_TYPE or SHCNF_IDLIST,
SHCNE_ALLEVENTS or SHCNE_INTERRUPT, WM_SHNOTIFY, 1, @vNotifyRegister);
MemoNotifyLog.Clear;
end;
procedure TFormTestNotify.FormDestroy(Sender: TObject);
begin
SHChangeNotifyDeregister(FNotifyHandle);
end;
procedure TFormTestNotify.WMSHNOTIFY(var Msg: TMessage);
type
PSHNOTIFYSTRUCT = ^SHNOTIFYSTRUCT;
SHNOTIFYSTRUCT = packed record
dwItem1: PItemIDList;
dwItem2: PItemIDList;
end;
var
vBuffer: array[0..MAX_PATH] of Char;
pidlItem: PSHNOTIFYSTRUCT;
S: string;
begin
pidlItem := PSHNOTIFYSTRUCT(Msg.wParam);
SHGetPathFromIDList(pidlItem.dwItem1, vBuffer);
S := vBuffer;
SHGetPathFromIDList(pidlItem.dwItem2, vBuffer);
case Msg.lParam of //根据参数设置提示消息
SHCNE_RENAMEITEM: S := '重命名文件' + S + '为' + vBuffer;
SHCNE_CREATE: S := '建立文件 文件名:' + S;
SHCNE_DELETE: S := '删除文件 文件名:' + S;
SHCNE_MKDIR: S := '新建目录 目录名:' + S;
SHCNE_RMDIR: S := '删除目录 目录名:' + S;
SHCNE_MEDIAINSERTED: S := S + '中插入可移动存储介质';
SHCNE_MEDIAREMOVED: S := S + '中移去可移动存储介质' + S + ' ' + vBuffer;
SHCNE_DRIVEREMOVED: S := '移去驱动器' + S;
SHCNE_DRIVEADD: S := '添加驱动器' + S;
SHCNE_NETSHARE: S := '改变目录' + S + '的共享属性';
SHCNE_ATTRIBUTES: S := '改变文件目录属性 文件名' + S;
SHCNE_UPDATEDIR: S := '更新目录' + S;
SHCNE_UPDATEITEM: S := '更新文件 文件名:' + S;
SHCNE_SERVERDISCONNECT: S := '断开与服务器的连接' + S + ' ' + vBuffer;
SHCNE_UPDATEIMAGE: S := 'SHCNE_UPDATEIMAGE';
SHCNE_DRIVEADDGUI: S := 'SHCNE_DRIVEADDGUI';
SHCNE_RENAMEFOLDER: S := '重命名文件夹' + S + '为' + vBuffer;
SHCNE_FREESPACE: S := '磁盘空间大小改变';
SHCNE_ASSOCCHANGED: S := '改变文件关联';
else S := '未知操作' + IntToStr(Msg.lParam);
end;
MemoNotifyLog.Lines.Add(S);
end;
end.
steventone
2003-12-29
打赏
举报
回复
getfile()
刷新窗体
火猴
2003-12-29
打赏
举报
回复
来学习一下
一笑天下而已
2003-12-29
打赏
举报
回复
谢谢!
一笑天下而已
2003-12-19
打赏
举报
回复
谢谢楼上的各位,有更好的例子吗?
太空11
2003-12-11
打赏
举报
回复
procedure GetFile(ASelector: String; ADestStream: TStream; IsGopherPlus: Boolean; AView: String);
Parameters
ASelector: String
the selector used to retrieve the file.
ADestStream: TStream
DEstination for the retrieved file.
IsGopherPlus: Boolean = False
Server supports Gopher+. Default value is False.
AView: String = ''
Alternate view listed. Default value is ''.
sailer_shi
2003-12-11
打赏
举报
回复
用shell进行检测
richlife
2003-12-11
打赏
举报
回复
兄弟,不是没有人响应你,是会的人都不在,只有几个新手在,实在帮不上忙啊~~~见谅!
wave_f
2003-12-11
打赏
举报
回复
getfile()
wave_f
2003-12-11
打赏
举报
回复
getfile()
一笑天下而已
2003-12-11
打赏
举报
回复
为什么没人响应我??
heizi99
2003-12-11
打赏
举报
回复
up
pandengzhe
2003-12-11
打赏
举报
回复
以前有很多监控读写的帖子。。。
dyzg
2003-12-11
打赏
举报
回复
用findfirstchangenotification,findnextchangenotification这两个函数监视目录甚至子目录的任何符合你定义条件的改变,具体用法自己找
chinajavis
2003-12-11
打赏
举报
回复
关注,好问题。不用Timer是不想占用资源?要不就用线程看看,搞个线程一直在里面运行,检查出多了文件后就向主程序发消息。
cqbonny
2003-12-11
打赏
举报
回复
有一个控件,可以实时的监视一个目录中文件的添加,删除,修改,然后有对应的事件做出相应。
你可以找找。
jorge
2003-12-11
打赏
举报
回复
HoHo,楼主说的是"立即"啊,楼上的误会了~
关注!
DelphiBoy2003
2003-12-11
打赏
举报
回复
何必呢,你只要知道那个文件夹下面应该有多少个文件,定义一个常量在程序中,每次启动程序时候检查一遍那个文件夹的文件数目(你别告诉我你不会文件搜索),和默认常量比较!明白我的意思了吧
python删除
文件
夹
无法访问_小菜鸟的python学习之路(9)
学习阶梯《Python编程:从入门到实践》第一部分:基础知识第10章
文件
和异常处理
文件
:让
程序
能够快速地分析大量的数据错误处理:避免
程序
在面对意外情形时崩溃异常:用于管理
程序
运行时出现的错误模块json:能够...
python 创建文本
文件
指定每行字符数_【Python 1-17】Python手把手教程之——
文件
的读写以及I/O操作...
例如,你可以编写
一个
这样的
程序
:读取
一个
文本
文件
的内容,重新设置这些数据的格式 并将其写入
文件
,让浏览器能够显示这些内容。要使用文本
文件
中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取
文件
的...
Java
程序
设计基础(第四版)下
第 10 章 Java 语言的输入输出与
文件
处理 什么是
文件
的输入输出?
程序
从
文件
读取数据称为
文件
的输入;
程序
向
文件
写入数据称为
文件
的输出。什么是流?Java 语言中分为哪两种流?这两种流有何差异?流是指计算机个部件...
Bootstrap自学笔记
bootstrap
文件
下面有三个
文件
夹
,分别是css、fonts、js,其中fonts是字体
文件
夹
,需要配合css
文件
夹
一起使用 <!--获得更好的
响应
式支持--> <metaname="viewport"content="width=device-width,initial-...
rsync远程同步
rsync,remote synchronize顾名思义就
知道
它是一款实现远程同步功能的软件,它在同步
文件
的同时,可以保持原来
文件
的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了
一个
客户机和远程
文件
服务器的...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章