如何从远程线程DestroyWindow?

Joh*_*Doe -1 c c++ windows winapi multithreading

做一些dll注入,需要销毁某个窗口.但是,DestroyWindow仅在创建窗口的同一线程调用它时才有效.否则失败,错误5:拒绝访问.

我想也许我可以通过获取it(的线程id DWORD dwTid = GetWindowThreadProcessId)然后将当前线程的线程id设置为它来欺骗它以认为我是创建线程:__writefsdword(0x24, dwTid)但它仍然失败,错误5,拒绝访问.

经过一些谷歌搜索后,我还没有找到答案.

顺便说一句:我知道我可以发送WM_DESTROY,出于好奇和需要解决我想知道怎么做的问题DestroyWindow.

Rem*_*eau 5

要调用DestroyWindow(),您必须注入在创建窗口的线程的上下文中运行的代码.使用GetWindowThreadProcessId()得到窗口的拥有线程ID,然后使用安装消息钩子成线SetWindowsHookEx(),最后邮寄/发送任何消息的窗口.当钩子回调接收到消息时,它将在窗口的线程的上下文中运行,因此可以调用DestroyWindow()窗口(HWND提供给钩子回调).