我正在Delphi中开发一个程序。我希望这个程序检测另一个程序X是否正在运行并关闭它。我已经看到你可以用WM_SETTEXT
消息更改任何程序的名称,然后再给它一个
名。
有没有办法看到程序的真实姓名,即使它的名字已经用WM_SETTEXT更改了?
答案 0 :(得分:1)
如果您知道所需程序的.exe
文件名,则可以使用EnumWindows()
枚举可用的运行窗口。在检测到的每个HWND
的回调函数中,使用GetWindowThreadProcessId()
和OpenProcess()
向拥有该窗口的进程打开HANDLE
,然后使用GetModuleFileName/Ex()
, GetProcessImageFileName()
或QueryFullProcessImageName()
检索其文件名。找到您感兴趣的文件名后,您将知道哪个HWND
(s)属于该进程,然后可以根据需要关闭它们。