Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 获取调用程序/被调用程序的HWND_Winapi_Ipc - Fatal编程技术网

Winapi 获取调用程序/被调用程序的HWND

Winapi 获取调用程序/被调用程序的HWND,winapi,ipc,Winapi,Ipc,我的程序有时会从另一个程序启动。如果是这样,我希望能够使用WM_COPYDATA在两个程序之间来回发送消息 在我的孩子程序启动后,它如何获得呼叫程序的HWND?我是否可以调用某个函数来执行此操作,或者我是否可以间接执行此操作,例如获取调用程序的进程ID,然后从该ID转到HWND 谢谢。有个小问题。一个调用程序可以从多个窗口拥有多个HWND。不,恐怕没有办法得到调用程序的PID或类似的东西。至少在Windows中,无法获取进程的“父”进程。如果不知道调用函数的名称,则无法执行任何操作,然后可以查找

我的程序有时会从另一个程序启动。如果是这样,我希望能够使用WM_COPYDATA在两个程序之间来回发送消息

在我的孩子程序启动后,它如何获得呼叫程序的HWND?我是否可以调用某个函数来执行此操作,或者我是否可以间接执行此操作,例如获取调用程序的进程ID,然后从该ID转到HWND


谢谢。

有个小问题。一个调用程序可以从多个窗口拥有多个HWND。不,恐怕没有办法得到调用程序的PID或类似的东西。至少在Windows中,无法获取进程的“父”进程。如果不知道调用函数的名称,则无法执行任何操作,然后可以查找它的PID并获得其活动窗口的列表

我建议反向工作,将调用进程的HWND作为命令行参数传递给程序。e、 g.“启动您的程序.exe/hwnd:1234”


编辑:我刚刚发现有一种方法,但不是由Windows提供的。但有一个警告。PID是不断生成和循环使用的,因此如果您得到了PID,就不能保证它的父进程没有死(崩溃或进程结束),并且PID正在被其他东西使用。然后,与假定的父进程的交互将变得非常危险和不稳定。所以,是的,你能做到。但是要小心,如果父进程崩溃,并且您试图通过其旧的PID访问它,您将遇到重大问题,特别是如果您意外地向Windows服务主机(例如)中注入了一些内容。

这涉及到一个小问题。一个调用程序可以从多个窗口拥有多个HWND。不,恐怕没有办法得到调用程序的PID或类似的东西。至少在Windows中,无法获取进程的“父”进程。如果不知道调用函数的名称,则无法执行任何操作,然后可以查找它的PID并获得其活动窗口的列表

我建议反向工作,将调用进程的HWND作为命令行参数传递给程序。e、 g.“启动您的程序.exe/hwnd:1234”


编辑:我刚刚发现有一种方法,但不是由Windows提供的。但有一个警告。PID是不断生成和循环使用的,因此如果您得到了PID,就不能保证它的父进程没有死(崩溃或进程结束),并且PID正在被其他东西使用。然后,与假定的父进程的交互将变得非常危险和不稳定。所以,是的,你能做到。但是要小心,如果父级崩溃,并且您试图通过其旧PID访问它,您将遇到重大问题,特别是如果您意外地将某些内容注入到,Windows服务主机。

将启动程序发送的第一条消息作为其HWND,以便孩子知道发送给谁。

将启动程序发送的第一条消息作为其HWND,以便孩子知道发送给谁。

WM\u COPYDATA是一种非常糟糕的互操作方式,考虑到需要找到有效的窗口句柄。然而,除非其他程序与您的程序积极合作,否则将不会发生任何有用的事情,否则它将把WM_COPYDATA消息转储到垃圾桶中。由于该程序已经需要了解很多关于您的信息,包括在何处找到它和处理消息,因此它还可以简单地为您提供一个包含所需内容的命令行参数

是的,窗口句柄可以作为命令行参数传递,您可以从子进程中的main()或GetCommandLine()获取它


将命名管道或套接字视为更好的捕鼠器。或者进程外COM。

WM_COPYDATA是一种非常糟糕的互操作方式,因为需要找到有效的窗口句柄。然而,除非其他程序与您的程序积极合作,否则将不会发生任何有用的事情,否则它将把WM_COPYDATA消息转储到垃圾桶中。由于该程序已经需要了解很多关于您的信息,包括在何处找到它和处理消息,因此它还可以简单地为您提供一个包含所需内容的命令行参数

是的,窗口句柄可以作为命令行参数传递,您可以从子进程中的main()或GetCommandLine()获取它

将命名管道或套接字视为更好的捕鼠器。或进程外COM