问题描述
现在已经打开了两个文件:c:a.txtd:testa.txt写一个C#程序,关闭d:testa.txt这个问题的难点在于,那两个文件在进程中都显示为notepad,怎么才能得到它们的文件名呢?(为了避免你投机地使用MainWindowTitle来标识这两个进程,我特意使用了两个文件名相同(路径不同)的文件(更不要企图用Process和MainModule.FileName来获得,因为它们获得的只是notepad,c:windowsnotepad.exe,而不是.txt文件名)
解决方案
解决方案二:
Process[]allProcesses=Process.GetProcesses();for(inti=0;i!=allProcesses.Length;i++){ProcessModulemyProcessModule;ProcessModuleCollectionmyProcessModuleCollection=allProcesses[i].Modules;for(intz=0;z<myProcessModuleCollection.Count;z++){myProcessModule=myProcessModuleCollection[z];Console.WriteLine(myProcessModule.ModuleName+":"+myProcessModule.FileName);}myProcessModule=allProcesses[i].MainModule;MessageBox.Show(myProcessModule.FileName);}
解决方案三:
楼上的不认真啊,呵呵(开玩笑)我在顶楼说得很清楚了:===============更不要企图用Process和MainModule.FileName来获得,因为它们获得的只是notepad,c:windowsnotepad.exe,而不是.txt文件名==============你这个方法只能得到c:windowsnotepad.exe这样的结果我要得到的是c:a.txtd:testa.txt
解决方案四:
1.创建一个新的nodepad.exe的进程,把一个txt文件名作为参数传给它,等这个进程初始化完了以后,在进程的地址空间中查找刚才打开的txt文件名(用ReadProcessMemory函数),得到一个存放notepad存放文件名的地址,关闭这个进程。2.枚举系统中运行的notepad.exe进程,得到进程的句柄,用ReadProcessMemory从上一步得到的地址读出记事本打开的文件名。
解决方案五:
ReadProcessMemory是API?不知道怎么用,请你写出代码(还有,我的.txt文件是事先就启动的,而不是由程序来启动)
解决方案六:
up