一个关于 Windows Message 的问题 from 3h(300分)

  • 主题发起人 主题发起人 3h
  • 开始时间 开始时间
3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
以下问题要求您必须用过WINDOWS的资源管理器: :)<br><br>在复制、删除、搬移、更名某个磁碟目录内的各项文件时,也称得上是异动吧。<br>系统应该是会发送给应用程序一个MESSAGE的(我想理论上应该是这样),<br>那么这个MESSAGE是什么?应该如何处理?最好来一段程序说明一下。<br><br>分数不多就给300吧。:)
 
to 3h: 怎么证明"应该是会发送给应用程序一个MESSAGE的"呢?
 
inherited WMDPROC(message);
 
to cakk:<br>&nbsp; 证明如下(实例法):<br>1、用MESSAGE的办法是WINDOWS的宗旨,资源管理器是WINDOWS的总控中心理所当然也不可避免使用这种方法。<br>2、假如打开资源管理器,定位在某一目录如“我的文档”,开另一窗口进DOS方式或其它,<br>此时资源管理器在后台仍可见。删除“我的文档”中一些文件如*.*,易见资源管理器中相应的文件已不见了。<br>由此可见乃是系统监视系统发出MESSAGE给全部应用程序,资源管理器收到了。<br><br>证毕。<br><br><br>to 小天:<br>&nbsp; 有用法吗?有的话300分就归您了
 
其实我也并不知道你想怎么用,下面只是我遇到的一种情况:判断用户对我的程序执行了什么操作<br><br>const cm_about=WM_USER+102;<br>const cm_exit=WM_USER+103;<br>const cm_GetSendMessage=WM_USER+104;<br>const cm_DisConnect=WM_USER+105;<br>CONST cm_StartGAME=WM_USER+106;<br><br>procedure TForm1.WndProc(var Message:Tmessage);<br>var s:string;<br>begin<br>&nbsp; &nbsp; if(Message.WParam=cm_exit) then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; showmessage('退出程序');<br>&nbsp; &nbsp; else if Message.wparam=cm_GetSendMessage then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; showmessage('打开程序');<br>&nbsp; &nbsp; else if Message.WParam =cm_startgame then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s:='c:/game/game.exe';<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shellexecute(0,nil,pchar(s),nil,nil,sw_shownormal);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{运行程序}<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br>&nbsp; &nbsp; else if Message.wparam=SC_MINIMIZE then <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;showmessage('最小化');<br>&nbsp; &nbsp; inherited WndProc(Message);<br>end;<br>
 
hhe<br>应该可以监视磁盘文件变化的,未必是消息呀?<br>记得有许多监视磁盘文件变化的构件,我现在没空,你用WINSIGHT查查看吧:)
 
这种控件我的确有一个不过没源码没办法知道它的解决方案。<br><br>小天您的例程应该没什么用处,我是指文件变化的通知。就象光盘插入的通知一样道理。<br><br>请哥们再讨论讨论。
 
用FindFirstChangeNotification建立一个object handle, 然后用个线程waitfor...<br>一旦文件系统发生变化则马上可以得知. <br>相关函数:<br>FindNextChangeNotification,<br>FindCloseChangeNotification
 
小3呀,CD 和那个不一样的吧。<br>除了eYes的方法,搞个file hook吧,呵呵,别问我怎么搞,没玩过。
 
另外,随便问,资源管理器是否有许多COM西西的东西呀?
 
我在一本书里面见过具体的实现,书名好象叫&lt;&lt;Windows 95 API 编程指南&gt;&gt;<br>电子工业出版社出的<br>待我回去查一查
 
控件WAITTHREAD.PAS,很好用。<br>发给3h了。
 
就是eYes说的方法。
 
o*o, pls mail cytown@990.net a copy 2:-)<br>
 
to cytown: <br><br>sent out;
 
顺便问一下,用右键点击资源管理器光驱图标,弹出一个快捷菜单,<br>其中有一个"弹出" 菜单项,一点,光盘就乖乖地出来了,这是怎么<br>实现的 ?<br>
 
文件收到了,等我找个时间试试。<br>这些天实在忙不开,好不容易有一个上网的时间不用干活。:)<br>试通就给钱,不过没例程可不大好办,能介绍一下用法吗?
 
在FORM上放一个FileListBox和一个FileSysMonitor.<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; FileSysMonitor1.Active:=True;<br>&nbsp; FileSysMonitor1.MonitoredDirectory:='c:/my documents';<br>&nbsp; FileSysMonitor1.NotifyFilter:=[FILE_NAME,DIR_NAME,ATTRIBUTES,SIZE,LAST_WRITE];<br>&nbsp; FileListBox1.Directory:='c:/my documents';<br>end;<br><br>procedure TForm1.FileSysMonitor1FileSysChange(Sender: TObject;<br>&nbsp; Directory: String);<br>begin<br>&nbsp; FileListBox1.Update;<br>end;<br><br>你在资源管理器的c:/my documents目录中delete一个文件,<br>就可以看到效果了。
 
to o*o: 这么管用? 能不能发给我一个? cakk2000@163.net
 
后退
顶部