skyfree 发表于 2012-7-22 07:37:49

如何获取是什么程序正在使用U盘?

在安全弹出U盘时,有时系统会提示:


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

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

lchl0588 发表于 2012-7-22 10:58:46

我一般结束rundll32.exe 和explorer.exe 来实现

xiaowo 发表于 2012-7-22 16:14:51

还没考虑过这个问题,首先要搞清系统是如何判断有进程占用U盘的

zldfsz 发表于 2012-7-22 16:24:32

如果是win7系统,可以用下面的方法,在win7 32位旗舰版测试成功
#include <Array.au3>
$Drive = DriveGetDrive("REMOVABLE")
If IsArray($Drive) Then
        For $i = 1 To $Drive
                $hWnd = WinGetHandle("")
                If $hWnd = 0 Then
                        Run(@WindowsDir & "\System32\resmon.exe", "", @SW_HIDE)
                        $hWnd = WinWait("")
                EndIf
                ;Sleep(100)
                ControlSetText("", "", "", "");清除原来内容
                ControlSetText("", "", "", $Drive[$i]);发送新的内容
                Sleep(4000)
                $GetItemCount = ControlListView('', '', 'SysListView327', 'GetItemCount')
                If $GetItemCount >= 1 Then
                        Dim $array[$GetItemCount]
                Else
                        MsgBox(4096, "提示", $Drive[$i] & "盘没发现占用进程")
                        ContinueLoop
                EndIf
                For $j = 1 To $GetItemCount
                        $array[$j - 1] = ControlListView('', '', 'SysListView327', 'GetText', $j - 1, 0)
                        $array[$j - 1] = ControlListView('', '', 'SysListView327', 'GetText', $j - 1, 1)
                        $array[$j - 1] = ControlListView('', '', 'SysListView327', 'GetText', $j - 1, 3)
                Next
                _ArrayDisplay($array, "占用" & $Drive[$i] & "盘的进程列表", "", "", "", "", "序号|进程名称|进程PID|占用的文件路径")
        Next
Else
        Exit MsgBox(4096, "提示", "没发现可移动磁盘")
EndIf
WinClose($hWnd)

虫子樱桃 发表于 2012-7-22 17:05:53

http://www.autoitscript.com/forum/topic/83470-safely-eject-a-usb-drive/
参考下,或许会有用

夜猫猫 发表于 2012-7-22 19:07:58

查进程路径?.........

xx44t10 发表于 2012-7-22 20:05:46

skyfree 大大,你看我的思路行不:
先取U盘盘符。查当前取进程 exe的原文件路径(如果有的话检查U盘的盘符的话 就提示U盘有程序在运行)你看这思路怎么样。

qq309266378 发表于 2012-7-22 23:14:52

楼上兄弟思路不错,主要是查看u盘正在运行的文件,可怎么实现哇。关注……

skyfree 发表于 2012-7-23 08:28:41

非常感谢楼上各位的提点,我尝试一下回复

wsfda 发表于 2012-7-23 10:02:52

我直接拔的...

haijie1223 发表于 2012-7-23 11:26:00

回复 7# xx44t10


    还有一种情况,假如是外部程序正在读取U盘内的的文件呢?

xx44t10 发表于 2012-7-23 12:03:21

回复 11# haijie1223


    管你外部不外部。不都在任务进程管理器运行着的么??
不要太钻牛角了。

haijie1223 发表于 2012-7-23 12:19:43

回复 12# xx44t10


    我钻牛角尖?晕倒!
看你的思路是:获取exe程序所在的路径,如果包含U盘盘符,就表示U盘有程序运行。我是觉得这种思路没有把外部程序考虑在内啊。
既然你认为我钻牛角尖,sorry,当我没有说过。

pusofalse 发表于 2012-7-23 13:54:58

NtQuerySystemInformation 16号功能,可以枚举系统中的所有句柄,如果外部程序打开了你U盘中的文件,这个函数可以检测到。

xx44t10 发表于 2012-7-23 20:32:33

回复 13# haijie1223


    哎呀。对不起,是我多打一句了。你别不高兴好不。和气生财啊。。
页: [1] 2
查看完整版本: 如何获取是什么程序正在使用U盘?