『壹』 如何通过一个程序的进程来获取该程序的可执行文件的路径
实例句柄这个东西,MSDN说了,就是加载进程映像的基址,每个进程都是一样的,你得到其他的进程也在你自己的进程里用不了。比如,你建立任何一个进程,GetMoleHandle(NULL)函数返回的就是进程的实例句柄,一般都是0x400000(可能少写或多写了一个0)。所以,要得到一个进程的路径,只有一个方法,把自己的代码注入到目标进程的地址空间中,在被注入的代码中使用GetMoudleFileName(GetMoleHandle(NULL),szModPath,MAX_PATH)来得到这个进程的所在路径。
这就涉及到注入进程这个有意思的东西了。简单而易用的方法,就是用《Windows核心编程》中提到的方法,用创建远程线程来把自己的DLL注入到目标进程的方法来实现。创建远程线程用CreateRemoteThread(),很简单,与CreateThread()使用方法一样,只不过多出的第一个参数是目标进程句柄(记住,要有PROCESS_CREATE_THREAD权限),其他的参数,都要是在目标进程的地址空间中的。
基本的流程应该是:
用OpenProcess()函数打开目标进程,权限要有PROCESS_CREATE_THREAD,PROCESS_VM_READ,PROCESS_VM_WRITE。然后用VirtualAllocEx函数在目标进程中分配一个内存空间,这个空间要保存你的Dll文件的路径,然后用WriteProcessMemory把这个字符串写入,再用GetProcAddress得到LoadLibraryA函数的地址,当然得到的地址是自己进程地址空间中的地址,但一般情况下绝大部分进程的这个地址处都是同样的LoadLibraryA函数。利用得到的在目标进程中分配的内存的地址及LoadLibraryA函数,就可以利用创建远程线程的方法把自己的DLL文件注入进去。
只有把自己的代码注入到目标进程中,你才可能利用GetMoleFileName函数得到目标进程的路径。当然这个工作是由已经注入到目标进程中的DLL来做。
『贰』 VB如何获得指定已运行中进程的文件路径(已知 进程明 和句柄)
原型:
int WINAPI icePub_getProcessPathByName(char *strProcessName,char *strPath)
输入:strProcessName 进程名
输出:strPath 进程带路径文件名
Private Declare Function icePub_getProcessPathByName Lib "icePubDll.dll" (ByVal strProcessName As String,ByVal strPath As String) As Integer
Dim a2 As Integer
DIm buff As String
buff=space(1024)
a2=icePub_getProcessPathByName("QQ.exe",buff)
MsgBox buff
『叁』 如何根据窗口句柄得到文件路径
1. 根据窗口句柄找到其进程Id(GetWindowThreadProcessId?
2. 使用CreateToolhelp32Snapshot创建一个梅举句柄,梅举模块
3. 使用Mole32First/Mole32Next查找模块,其中带exe扩展名的就是其exe文件全路径
『肆』 易语言如何拖放文件,识别文件路径,创建目录
易语言拖放文件识别信息请参考:
.版本 2
.支持库 edroptarget
.子程序 __启动窗口_创建完毕
拖放对象1.接收文件 = 真
拖放对象1.注册拖放控件 (取窗口句柄 ())
.子程序 _拖放对象1_得到文件
.参数 接收到的文件路径, 文本型
拿到文件名然后进行文件名分析再进行文件夹的新建以及文件的拷贝操作即可、、