找回密码
 加入
搜索
查看: 9181|回复: 15

[系统综合] 如何获取是什么程序正在使用U盘?

 火.. [复制链接]
发表于 2012-7-22 07:37:49 | 显示全部楼层 |阅读模式
在安全弹出U盘时,有时系统会提示:


如何用AU3获取是什么程序正在占用U盘?或者说是什么进程正在占用U盘?

劳烦大家提供个思路,非常感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-22 10:58:46 | 显示全部楼层
我一般结束  rundll32.exe 和explorer.exe 来实现
发表于 2012-7-22 16:14:51 | 显示全部楼层
还没考虑过这个问题,首先要搞清系统是如何判断有进程占用U盘的
发表于 2012-7-22 16:24:32 | 显示全部楼层
如果是win7系统,可以用下面的方法,在win7 32位旗舰版测试成功
#include <Array.au3>
$Drive = DriveGetDrive("REMOVABLE")
If IsArray($Drive) Then
        For $i = 1 To $Drive[0]
                $hWnd = WinGetHandle("[CLASS:WdcWindow]")
                If $hWnd = 0 Then
                        Run(@WindowsDir & "\System32\resmon.exe", "", @SW_HIDE)
                        $hWnd = WinWait("[CLASS:WdcWindow]")
                EndIf
                ;Sleep(100)
                ControlSetText("[CLASS:WdcWindow]", "", "[CLASS:Edit; INSTANCE:1]", "");清除原来内容
                ControlSetText("[CLASS:WdcWindow]", "", "[CLASS:Edit; INSTANCE:1]", $Drive[$i]);发送新的内容
                Sleep(4000)
                $GetItemCount = ControlListView('[CLASS:WdcWindow]', '', 'SysListView327', 'GetItemCount')
                If $GetItemCount >= 1 Then
                        Dim $array[$GetItemCount][3]
                Else
                        MsgBox(4096, "提示", $Drive[$i] & "盘没发现占用进程")
                        ContinueLoop
                EndIf
                For $j = 1 To $GetItemCount
                        $array[$j - 1][0] = ControlListView('[CLASS:WdcWindow]', '', 'SysListView327', 'GetText', $j - 1, 0)
                        $array[$j - 1][1] = ControlListView('[CLASS:WdcWindow]', '', 'SysListView327', 'GetText', $j - 1, 1)
                        $array[$j - 1][2] = ControlListView('[CLASS:WdcWindow]', '', 'SysListView327', 'GetText', $j - 1, 3)
                Next
                _ArrayDisplay($array, "占用" & $Drive[$i] & "盘的进程列表", "", "", "", "", "序号|进程名称|进程PID|占用的文件路径")
        Next
Else
        Exit MsgBox(4096, "提示", "没发现可移动磁盘")
EndIf
WinClose($hWnd)

评分

参与人数 1金钱 +50 贡献 +4 收起 理由
tryhi + 50 + 4

查看全部评分

发表于 2012-7-22 17:05:53 | 显示全部楼层
发表于 2012-7-22 19:07:58 | 显示全部楼层
查进程路径?.........
发表于 2012-7-22 20:05:46 | 显示全部楼层
skyfree 大大,你看我的思路行不:
先取U盘盘符。查当前取进程 exe的原文件路径(如果有的话检查U盘的盘符的话 就提示U盘有程序在运行)你看这思路怎么样。
发表于 2012-7-22 23:14:52 | 显示全部楼层
楼上兄弟思路不错,主要是查看u盘正在运行的文件,可怎么实现哇。关注……
 楼主| 发表于 2012-7-23 08:28:41 | 显示全部楼层
非常感谢楼上各位的提点,我尝试一下回复
发表于 2012-7-23 10:02:52 | 显示全部楼层
我直接拔的...
发表于 2012-7-23 11:26:00 | 显示全部楼层
回复 7# xx44t10


    还有一种情况,假如是外部程序正在读取U盘内的的文件呢?
发表于 2012-7-23 12:03:21 | 显示全部楼层
回复 11# haijie1223


    管你外部不外部。不都在任务进程管理器运行着的么??
不要太钻牛角了。
发表于 2012-7-23 12:19:43 | 显示全部楼层
回复 12# xx44t10


    我钻牛角尖?晕倒!
看你的思路是:获取exe程序所在的路径,如果包含U盘盘符,就表示U盘有程序运行。我是觉得这种思路没有把外部程序考虑在内啊。
既然你认为我钻牛角尖,sorry,当我没有说过。
发表于 2012-7-23 13:54:58 | 显示全部楼层
NtQuerySystemInformation 16号功能,可以枚举系统中的所有句柄,如果外部程序打开了你U盘中的文件,这个函数可以检测到。

评分

参与人数 1金钱 +26 贡献 +5 收起 理由
zldfsz + 26 + 5 牛人,膜拜

查看全部评分

发表于 2012-7-23 20:32:33 | 显示全部楼层
回复 13# haijie1223


    哎呀。对不起,是我多打一句了。你别不高兴好不。和气生财啊。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 06:25 , Processed in 0.101915 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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