delphi - 如何从窗口句柄中获取可执行文件名?
问题描述
我有这个代码:
procedure TForm1.Button1Click(Sender: TObject);
var
MyHandle: THandle;
begin
MyHandle:=FindWindow(nil, 'Delphi');
SendMessage(MyHandle, WM_CLOSE, 0, 0);
// Here will be a message like ' title found and it's test.exe that has 'Delphi' Title
end;
例如,它是test.exe
具有'Delphi'
标题的进程,我想通过使用窗口句柄来获取该进程的 EXE 文件名。那可能吗?如果是这样,我可以做一些参考吗?
解决方案
给定任何有效HWND
的 ,您可以执行以下操作:
- 用于
GetWindowThreadProcessId()
获取创建它的进程 ID。 - 然后使用
OpenProcess()
打开HANDLE
该进程。 - 然后使用
GetModuleFileNameEx()
,GetProcessImageFileName()
, 或QueryFullProcessImageName()
(取决于操作系统版本)获取创建该进程的 EXE 的文件路径。
推荐阅读
- amazon-web-services - 在 Lambda 中使用 multipart/form-data
- java - Java + Kotlin SpringBoot项目编译失败
- node.js - 使用 React SPA 快速启动 node.js 快速身份验证
- javascript - li.parent 不是函数
- kubernetes - 设置 GKE 内部负载平衡器时,为什么我可以从单独的虚拟机访问 IP 地址,但不能在集群内访问?
- python - 如何删除重复的python路径
- javascript - 在 cd react-app 之后在 react js 中使用 npm start 时出错
- c# - Sqlite - 不存在这样的表,即使它存在?
- spring-boot - Springboot 应用程序中带有 jwk-set-uri (oauth2) 的未知主机异常
- c# - 如何在 DataGrid WPF 中添加行