使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。
使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。为什么?怎么关?...
使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。为什么?怎么关?
展开
展开全部
要关的窗口估计不是你建的,不考虑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;
}
如果想结束对方的进程,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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询