用Python写一段代码,实时监测哪个软件读写了C盘和D盘的文件。并在图形化界面展示出来。(时间、进程名、操作盘符、具体操作(删除,修改或新建))
时间: 2023-06-27 18:06:01 浏览: 54
这个任务需要用到Python的第三方库pywin32和wxPython。pywin32用于获取Windows的系统信息和监测文件操作,wxPython用于创建图形化界面。
以下是实现代码:
```python
import os
import win32file
import win32con
import wx
class FileMonitor(wx.Frame):
def __init__(self, parent, title):
super(FileMonitor, self).__init__(parent, title=title, size=(500, 400))
# 创建界面
self.panel = wx.Panel(self)
self.file_list = wx.ListCtrl(self.panel, style=wx.LC_REPORT | wx.BORDER_SUNKEN)
self.file_list.InsertColumn(0, "时间")
self.file_list.InsertColumn(1, "进程名")
self.file_list.InsertColumn(2, "操作盘符")
self.file_list.InsertColumn(3, "具体操作")
self.file_list.SetColumnWidth(0, 150)
self.file_list.SetColumnWidth(1, 150)
self.file_list.SetColumnWidth(2, 100)
self.file_list.SetColumnWidth(3, 100)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.file_list, 1, wx.EXPAND)
self.panel.SetSizer(sizer)
# 监测C盘和D盘
self.watch_dir("C:\\")
self.watch_dir("D:\\")
def watch_dir(self, path):
# 监测文件夹变化
FILE_LIST_DIRECTORY = 0x0001
hDir = win32file.CreateFile(
path,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while True:
try:
results = win32file.ReadDirectoryChangesW(
hDir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME | win32con.FILE_NOTIFY_CHANGE_LAST_WRITE,
None,
None
)
for action, file in results:
if action == 1: # 新建文件
self.add_file_item("新建", file, path)
elif action == 2: # 删除文件
self.add_file_item("删除", file, path)
elif action == 3: # 修改文件
self.add_file_item("修改", file, path)
except:
pass
def add_file_item(self, action, filename, path):
# 获取进程名
try:
pid = win32file.GetFileInformationByHandle(win32file.CreateFile(
os.path.join(path, filename),
win32file.GENERIC_READ,
win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE | win32file.FILE_SHARE_DELETE,
None,
win32file.OPEN_EXISTING,
win32file.FILE_ATTRIBUTE_NORMAL,
None
)).nFileIndexHigh
process_name = win32process.GetModuleFileNameEx(win32process.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, pid), 0)
process_name = os.path.basename(process_name)
except:
process_name = ""
# 添加列表项
now = wx.DateTime.Now()
item = self.file_list.InsertItem(0, str(now))
self.file_list.SetItem(item, 1, process_name)
self.file_list.SetItem(item, 2, path)
self.file_list.SetItem(item, 3, action)
if __name__ == '__main__':
app = wx.App()
frame = FileMonitor(None, "文件监测器")
frame.Show()
app.MainLoop()
```
运行程序后,会监测C盘和D盘的文件变化,并把变化记录在图形化界面中。如果有新建、删除或修改操作,会在界面上显示出来。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)