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