我创建了一个具有预定义协议的 SSH 代理(类似于 PuTTY 的 pageant.exe),并且身份验证请求通过 WM_COPYDATA 发送到代理窗口。
我现在想显示哪个进程请求了身份验证。为此,我需要知道哪个进程发送了 WM_COPYDATA。
如前所述,我无法更改协议(例如,将进程 ID 与消息本身一起发送),因为它是预定义的。
我创建了一个具有预定义协议的 SSH 代理(类似于 PuTTY 的 pageant.exe),并且身份验证请求通过 WM_COPYDATA 发送到代理窗口。
我现在想显示哪个进程请求了身份验证。为此,我需要知道哪个进程发送了 WM_COPYDATA。
如前所述,我无法更改协议(例如,将进程 ID 与消息本身一起发送),因为它是预定义的。
wParam
您收到的旨在成为发送消息的窗口的窗口句柄。(不过,请参阅下面的注释。)
从那里,您可以使用GetWindowThreadProcessID
获取进程 ID,然后您可以将其用作输入GetProcessImageFileName
以检索进程的名称。
注意:正如@RemyLeBeau 在下面的评论中指出的那样,这当然是基于wParam
提供的实际是发送WM_COPYDATA
消息的窗口。发送WM_COPYDATA
本身并不强制要求。
如果不是,那你就不走运了;如果不是这样,我就无法回溯到实际发送消息的过程。您最多可以使用 确认它是一个实际的窗口句柄IsWindow
,但它不能确认它实际上是发送消息的窗口。