0

我创建了一个具有预定义协议的 SSH 代理(类似于 PuTTY 的 pageant.exe),并且身份验证请求通过 WM_COPYDATA 发送到代理窗口。

我现在想显示哪个进程请求了身份验证。为此,我需要知道哪个进程发送了 WM_COPYDATA。

如前所述,我无法更改协议(例如,将进程 ID 与消息本身一起发送),因为它是预定义的。

4

1 回答 1

4

wParam您收到的旨在成为发送消息的窗口的窗口句柄。(不过,请参阅下面的注释。)

从那里,您可以使用GetWindowThreadProcessID获取进程 ID,然后您可以将其用作输入GetProcessImageFileName以检索进程的名称。

注意:正如@RemyLeBeau 在下面的评论中指出的那样,这当然是基于wParam提供的实际是发送WM_COPYDATA消息的窗口。发送WM_COPYDATA本身并不强制要求。

如果不是,那你就不走运了;如果不是这样,我就无法回溯到实际发送消息的过程。您最多可以使用 确认它是一个实际的窗口句柄IsWindow,但它不能确认它实际上是发送消息的窗口。

于 2013-11-28T01:43:20.523 回答