简单的说:FindWindow 能查找窗口句柄
FindWindowEx 不仅能查找窗口,还能查找指定窗口的控件句柄
EnumWindows可以枚举窗口,可以把所有窗口都枚举出来,不需要知道窗口的内容~~ FindWindow,则需要知道窗口的标题,或是窗口的名字。
要关的窗口估计不是你建的,不考虑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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)