使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。

使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。为什么?怎么关?... 使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。为什么?怎么关? 展开
 我来答
Super保宝
2014-02-21
知道答主
回答量:3
采纳率:0%
帮助的人:2854
展开全部
要关的窗口估计不是你建的,不考虑Win7权限的情况下,在收到WM_CLOSE后,目标窗口的进程不一定会调用DestroyWindow来销毁这个窗口句柄,就算会关闭,也不一定会结束进程,毕竟窗口不代表程序的全部过程.
如果想结束对方的进程,Post一个QuitMessage,但是这个消息多数往往是在窗口已经销毁的情况才会发送,现在你发送了,对方恰恰会认为窗口已经销毁了,会结束进程,那么这个窗口会消失,但是内存不一定会释放.

无聊刚做了个测试,希望能帮到你...

// test1.cpp : 定义控制台应用程序的入口点。
//
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
int wmain(int argc, wchar_t* argv[])
{
HWND hWnd = FindWindow(0, L"完美助手"); //测试窗口
ShowWindow(hWnd, SW_HIDE); //使隐藏,显示,测试都没问题
system("pause");
ShowWindow(hWnd, SW_SHOW);
system("pause");
ShowWindow(hWnd, SW_HIDE);
system("pause");

// 关闭
SendMessage(hWnd, WM_CLOSE, 0, 0);
// PostMessage(hWnd, WM_QUIT, 0, 0); //这句一直是禁用的,启用后,下面的奇怪问题都没了.
system("pause");
char txt[128];
ZeroMemory(txt, 128);
GetWindowTextA(hWnd, txt, 128); // 读窗口有内容,说明没关住
printf("窗口标题:%s\n", txt);

if (FindWindow(0, L"完美助手")){ // 还能找到
std::cout << "窗口似乎没有关闭" << std::endl;
}

if (!ShowWindow(hWnd, SW_SHOW)){ // 但是显示不出来了
std::cout << "窗口不存在" << std::endl;
}

ZeroMemory(txt, 128);
GetWindowTextA(hWnd, txt, 128); // 再读窗口内容,没了
printf("窗口标题:%s\n", txt);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式