【问题标题】:Close a window (via it's window handle) without closing the process that owns it关闭一个窗口(通过它的窗口句柄)而不关闭拥有它的进程
【发布时间】:2011-04-21 18:06:38
【问题描述】:

我正在尝试从我无权访问其代码的进程中关闭各个窗口。该程序会在按下按钮时生成看起来像 Internet Explorer 的窗口,但它们不会创建 iexplorer.exe 进程(它们显然都存在于应用程序进程中)。我已经设法通过一些 API 调用获取每个“假”IE 窗口的进程句柄和窗口句柄,但我不知道如何只关闭进程中的给定窗口。

我试过了

SendMessage(WindowHandles[i], 0x0010, 0, 0);

这是WM_CLOSE消息,但它关闭进程中的所有窗口并结束进程。有没有办法以编程方式执行类似于我按下窗口右上角的 X 时发生的事情?该窗口没有执行任何计算或影响任何其他内存空间,因此我可以根据需要结束它,但是我已经尝试了所有我知道如何做的事情(DestroyWindow; 返回错误 5 权限被拒绝,WM_CLOSE; 有效但关闭进程 WM_QUIT;它给出错误 2 文件未找到并且什么也不做)。

有什么想法吗?

【问题讨论】:

  • WM_CLOSE 是正确的做法。
  • 当您使用 X 按钮关闭窗口时,进程是否结束?

标签: windows winapi process sendmessage


【解决方案1】:

您可以发送 SW_HIDE 在技术上应该可以工作,尽管它不会关闭它们,您可以在以下位置找到更多信息 http://msdn.microsoft.com/en-us/library/ms633548(v=vs.85).aspx

【讨论】:

  • 好建议,但这是否意味着窗口只是在某个地方占用了进程中的内存?不是最理想的解决方案,但如果我必须这样做,我会这样做......
  • 另一种方法是在 X 的顶部模拟鼠标点击 :)。由于您已经拥有 WM_LBUTTONDOWN 和 WM_LBUTTONUP 句柄,但可能不是生产的好解决方案。
  • 哈哈,这绝对是我的想法,但我想在开始做类似的事情之前我会问问周围的人!
猜你喜欢
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多