检查文件是否已打开并返回打开文件的路径(在Windows 7中)

时间:2015-05-17 20:58:26

标签: windows events monitoring monitor event-log

我想创建一个可以监视已打开进程的应用程序。我想用它来监控我多久打开一次我的mp3文件。程序将在后台运行并计算我运行每个mp3文件的次数,之后我会根据这个数字对我的mp3文件进行排序。

我使用Process Monitor检查是否可以完成。当我过滤输出,使它只显示我的MP3播放器进程,并设置为只看到“处理开始”操作,然后我可以读取打开的文件,例如这是进程监视器<的命令行详细信息/ b>向我展示了实时开放的文件。运行每个文件后,Process Monitor中有一个新输入。 Screen description

如您所见,我可以轻松计算Process Monitor输出以获取每个文件的启动次数。但是,我不知道它是如何完成的,因为Process Monitor是一个.exe,我无法在代码中看到。

解决问题的最简单方法是什么?实际上我想使用的编程语言并不重要,可以是C#,C ++,Python。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我自己想出了一些东西。在 Python 2.7 中使用此库psutil应该足够了。我的进程名称将保持不变,因为我总是使用相同的程序来运行我的mp3 /视频文件。

  1. 查找我的流程的PID
  2. 当我有PID时,我可以检查我的进程当前打开了哪些文件。
  3. 始终记住上次打开的文件。如果当前文件与上一个文件不同,则将当前文件的打开计数增加1.这就是我如何根据打开频率创建打开文件的列表。
  4. 使用while循环在后台检查。
  5. 这里有一些少量的代码,但总的来说灵魂很简单:)

    import psutil
    
    process_list = psutil.pids()
    
    for i in process_list:
        temp_process = psutil.Process(i)
    
        #if process doesn't have a name then the .name() method will cause a crash, we need to try-catch it
        try:
            if (temp_process.name()=="mpc-hc64.exe"):
                print temp_process.cmdline() #in my case opened file will be listed in the cmdline, may not always be true
                print temp_process.open_files() #this however should ALWAYS return files that are opened by current process!!
        except:
            print "no process name"