nmgwddj 发表于 2014-3-21 17:41:08

程序附加到第三方程序做子窗口,父窗口关闭后子窗口无法再控制

本帖最后由 nmgwddj 于 2014-3-21 17:46 编辑

自己画了个界面,使用_WinAPI_SetParent将自己的程序父窗口设置为第三方程序,当人为点击父窗口x的时候,我自己程序的窗口随即消失,就无法再控制了。比如GUICtrlSetState操作。好像是句柄丢失了。不知道大家可有想法?

我现在唯一的想法就是拦截关闭父窗口的消息,来把我的程序父窗口设置为桌面,再隐藏,这样我就可以再继续操作我自己的窗口了。但是不清楚如何拦截父窗口的关闭消息。

plutosherry 发表于 2014-3-21 20:43:04

用了child没?
还要用guiswitch

nmgwddj 发表于 2014-3-23 10:40:34

回复 2# plutosherry


    您指的child是?
    现在我无法判断父窗是否已经被关闭,如果已经被关闭,我附在其他程序上的自己的程序就无法再控制了。

lanfengc 发表于 2014-3-23 10:42:01

回复 3# nmgwddj


    在你的程序里加上检测父窗口 窗体句柄的代码试试

nmgwddj 发表于 2014-3-23 11:09:28

本帖最后由 nmgwddj 于 2014-3-23 11:10 编辑

回复 4# lanfengc


    如果发现父窗口句柄已经失效,那么这个时候再处理我的子窗口已经晚了,无论是隐藏它还是把他父窗口设置为桌面都不起作用了。
    所以需要在父窗口关闭前拦截父窗口关闭的消息,在这之前就把自己的程序父窗口设置为桌面并隐藏,否则下次就再也显示不出来了。

seniors 发表于 2014-3-24 12:38:00

拦截父窗口关闭的消息就能解决,不过这种流氓行为,就自己研究吧

nmgwddj 发表于 2014-3-24 15:25:18

回复 6# seniors


    还请前辈赐教,并非流氓手段,是为公司同事做一款工具方便使用。

lanfengc 发表于 2014-3-24 20:27:03

回复 7# nmgwddj


    注册全局消息钩子. HOOKWM_CLOSE然后分析参数句柄, 如果符合你的要求, 先做你的代码,然后再关闭句柄窗口

nmgwddj 发表于 2014-3-24 20:44:53

回复 8# lanfengc


    想了半天也只有这种做法了,按道理来说SetParent以后,父窗口的关闭消息应该会通知子窗口的。
页: [1]
查看完整版本: 程序附加到第三方程序做子窗口,父窗口关闭后子窗口无法再控制