mca*_*a64 4 delphi winapi 32bit-64bit
我有这个
function NazwaProcesu(const uchwyt: Thandle): string;
var
pid: DWORD;
hProcess: Thandle;
sciezka: array [0..MAX_PATH - 1] of char;
begin
GetWindowThreadProcessId(uchwyt, pid);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, pid);
if hProcess <> 0 then
try
GetModuleFileNameEx(hProcess, 0, sciezka, MAX_PATH)
finally
Result := sciezka;
CloseHandle(hProcess);
end;
end;
Run Code Online (Sandbox Code Playgroud)
在Windows 7 32位没有问题.在Win 8 x64上我有这个:

我想,最后3个条目应该是explorer.exe.感谢帮助.
Dav*_*nan 11
据我所知,当代码在32位进程中执行时,此方法将无法检索64位进程信息.在WOW64模拟器中运行时,这种问题很常见,避免此类问题的最简单方法是在WOW64模拟器外部运行代码.也就是说,以64位进程运行代码.
解决此问题的其他可能方法,如果无法重新编译为64位,则:
QueryFullProcessImageName.我一直强调的另一点是错误检查很重要.您在通话时未能检查错误GetModuleFileNameEx.调用显然是失败的,这就是为什么你最终得到一个未初始化的文本缓冲区.始终检查Windows API调用是否有错误.
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |