成功调用CreateProcess后,我尝试使用GetModuleFileNameEx获取创建的进程的路径(lpApplicationName和lpCommandLine参数可以变化或为空,因此在这种情况下它们不可靠)。问题是GetModuleFileNameEx失败并出现错误6(ERROR_INVALID_HANDLE),从而使其缓冲区中包含无效数据。我无法理解原因,因为CreateProcess成功并且进程句柄应该已正确保存在pi.hProcess中。希望您能有所启发,在此先感谢您!编辑:更新:我注意到删除CREATE_SUSPENDED也可以解决此问题,但我需要设置该标志。我该怎
我正在尝试获取位于我的C#2.0应用程序之外的窗口的可执行文件的名称。我的应用程序当前使用来自“user32.dll”的GetForegroundWindow()调用获取窗口句柄(hWnd)。根据我能够进行的挖掘,我想我想使用GetModuleFileNameEx()函数(来自PSAPI)来获取名称,但是GetModuleFileNameEx()需要一个进程的句柄,而不是一个窗口。是否可以从窗口句柄获取进程句柄?(需要先获取窗口的线程句柄吗?)编辑了第一句话,使我想做的事情更清楚。更新!这是我发现对我有用的C#代码。唯一需要注意的是,偶尔它会返回驱动器号为“?”的文件/路径。而不是实际
我正在使用下面的代码来确定前景窗口并找到创建它的.exe文件的路径。hwnd=win32gui.GetForegroundWindow()_,pid=win32process.GetWindowThreadProcessId(hwnd)hndl=win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION|win32con.PROCESS_VM_READ,0,pid)path=win32process.GetModuleFileNameEx(hndl,0)printpath这适用于GoogleChrome、PyCharm、Filezil
我正在尝试使用以下代码从64位应用程序中枚举32位进程模块名称:if(EnumProcessModulesEx(hProcess,hMods,sizeof(hMods),&cbNeeded,LIST_MODULES_ALL)){for(i=0;i代码在Windows7中按预期工作,部分结果为:...C:\Windows\**SysWOW64**\ntdll.dll...在Windows10中,上述代码返回完整路径,但使用的是System32而不是SysWOW64。例如,...C:\Windows\**System32**\ntdll.dll...深入了解原因,我注意到GetModule