找回密码
 加入
搜索
查看: 8842|回复: 8

[系统综合] 如何判断指定类型文件是否打开,并获取其路径和文件名?

  [复制链接]
发表于 2012-4-25 21:29:35 | 显示全部楼层 |阅读模式
本帖最后由 地平线 于 2012-5-3 16:48 编辑

这想法有点邪恶:后台监控,当有文件打开时(主要是word、ppt、txt和图片),自动复制打开的文件到指定目录。
判断指定类型的文件是否打开,现在知道的方法是ObjGet和ProcessExists。
ObjGet("", "Word.Application")  或  ProcessExists("WINWORD.exe")
ObjGet("", "PowerPoint.Application")  或  ProcessExists("POWERPNT.exe")
ProcessExists("notepad.exe")   txt不知道用ObjGet怎么表示。
而图片的打开程序种类比较多。不知道还有没有其他更好的方法判断一个任意名字的文件是否打开呢?
最大的问题是,由于无法获取打开文件的文件名和路径,无法自动复制文件,用的是FileCopy。
已搜索论坛,但找不到思路,请各位指教!

2012-4-26 有了一点点进展,勉强能保存打开的word文档了,但因为不能判断打开的是否为同一个文件,会不停地保存
#include <Word.au3>
HotKeySet("{ESC}","_exit")

While 1
        _Main()
        Sleep(1000)
WEnd

Func _Main()
    Local $obj = ObjGet("", "Word.Application")
        If Not @error Then
            $obj.Visible = 1
            Local $oDoc = _WordDocGetCollection($obj, 0)
            $title = _WordDocPropertyGet ($oDoc,"title")

            If $title = "" Then
                   _WordDocSaveAs($oDoc,@ScriptDir & '\1.doc')
            Else
                   _WordDocSaveAs($oDoc,@ScriptDir & '\'& $title & '.doc')
            EndIf
        EndIf
EndFunc

Func _exit()
        Exit
EndFunc


2012-4-26夜  今晚又有新的思路了,已经可以获取打开的原文件的路径和文件名了,把打开的文件的路径和文件名写入配置文件,再根据各种条件判断是否为同一文件。(感谢4#的指点)
但现在只解决了word文档,其他类型的文件还没有思路。
已经写了一部分,因为后天考试,所以剩下的五一放假再继续写完和测试。

2012-4-29夜   考完2科试了,断断续续花了一天时间摸索,重新写了并测试,暂且解决了Word的问题。(详情及源码请查看后台监控并复制打开的word文档)但其他类型的还有待解决。txt和图片的对象的类名称(格式:"appname.objectype")是什么呢?如有高人路过,请指导一下。
发表于 2012-4-25 21:39:43 | 显示全部楼层
期待中。。。。

评分

参与人数 1金钱 -10 收起 理由
user3000 -10 乱来,让人很不爽啊!

查看全部评分

发表于 2012-4-25 21:39:48 | 显示全部楼层
期待中。。。。
发表于 2012-4-26 23:19:54 | 显示全部楼层
user在随时更新自己的doc文件,你不一直循环保存还监测什么,如果是这样降低难度的话,写个配置文件,保存了相关的title文件后写入配置文件,_WordDocSaveAs前加一个判断配置文件是否有相关的title文件。
 楼主| 发表于 2012-4-26 23:49:10 | 显示全部楼层
回复 4# 502762378
正有此意。今晚也有这个想法,已经写了一部分,因为后天考试,所以剩下的五一放假再继续。
 楼主| 发表于 2012-5-3 16:52:23 | 显示全部楼层
发现之前的标题不够具体,改了一下。
txt和图片对象的类名称(格式:"appname.objectype")是什么呢?百度了一下,但没找到。对此了解的朋友请帮一下忙。
发表于 2012-5-4 00:33:32 | 显示全部楼层
文件重复问题可通过MD5或其它办法解决(文件大小,修改时间等)
发表于 2012-5-4 04:39:59 | 显示全部楼层
本帖最后由 netegg 于 2012-5-4 05:28 编辑

没太明白lz的意思,猜了猜,不知道对不对
[au3]#include <winapiex.au3>
local $type = 'abc.mp3'
$exe = _WinAPI_PathFindFileName(_WinAPI_AssocQueryString(stringright($type, 4), $ASSOCSTR_EXECUTABLE))
$aProc = processlist($exe)
if $aProc[0][0] then
   for $i = 1 to $aProc[0][0]
      consolewrite(_WinAPI_GetProcessCommandLine($aProc[$i][1])& @cr)
   next
endif[/au3]
不过有个问题,不是每种应用程序(或者先打开应用再打开文件)都会带着打开文件的命令行参数,或许多,或许少,要分情况
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 19:43 , Processed in 0.083482 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表