多个窗口关闭问题。

taotao7805 2004-11-29 11:02:33

HWND hwndc;
hwndc =::GetForegroundWindow();
::SendMessage(hwndc, WM_CLOSE, 0L, 0L);
目前我已经打开了几个窗口,我要把最下面的窗口留下不关闭,其他的都关闭,用上面的代码肯定不能实现,哪位好心人有什么好的想法可以让我少郁闷下。多谢!
...全文
207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2005-01-11
  • 打赏
  • 举报
回复
可以在EnumWindow中先比较一下,用一个CStringArray存放窗口hWnd
taotao7805 2004-12-15
  • 打赏
  • 举报
回复
up
老夏Max 2004-11-29
  • 打赏
  • 举报
回复
楼上贴的是我的代码啊,呵呵,不过它倒是让我想到了可以参考上面的,将你要保留的窗口进程保留,其他的使用那段代码关闭,呵呵,可以使用
BOOL IsWindow(
HWND hWnd // handle to window
);
判断进程是不是窗口!!
koko1998 2004-11-29
  • 打赏
  • 举报
回复
刚看到的,看看这样可不可以
http://community.csdn.net/Expert/topic/3596/3596650.xml?temp=.5734217

参考:
void CInstallUserDLLApp::EndProgram(CString strExeName)
{
CString strExeNameToFind = strExeName;
HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(SnapShot==NULL)
{
//MessageBox("检测当前进程失败!");
return ;
}
SHFILEINFO shSmall;
CString str,strTemp;
PROCESSENTRY32 ProcessInfo;//声明进程信息变量
ProcessInfo.dwSize=sizeof(ProcessInfo);//设置ProcessInfo的大小
//返回系统中第一个进程的信息
BOOL Status=Process32First(SnapShot,&ProcessInfo);
int m_nProcess=0;
DWORD m_ProcessID=0;
while(Status)
{
m_nProcess++;
ZeroMemory(&shSmall,sizeof(shSmall));
//获取进程文件信息
SHGetFileInfo(ProcessInfo.szExeFile,0,&shSmall,
sizeof(shSmall),SHGFI_ICON|SHGFI_SMALLICON);

strTemp=ProcessInfo.szExeFile;
strTemp.MakeUpper();
strExeNameToFind.MakeUpper();
if(strTemp.Find(strExeNameToFind,0) >= 0)
{
m_ProcessID=ProcessInfo.th32ProcessID;
break;
}
//获取下一个进程的信息
Status=Process32Next(SnapShot,&ProcessInfo);
}
// TODO: Add extra validation here
if(m_ProcessID!=0)
{
HANDLE hProcess= OpenProcess( PROCESS_ALL_ACCESS, FALSE, m_ProcessID);
if(::TerminateProcess(hProcess,1))
{
//AfxMessageBox(" The process has been successfully killed",MB_OK);
;
}
}
}
taotao7805 2004-11-29
  • 打赏
  • 举报
回复
我也这么想过,但是我打开的窗口是处于动态的,每次也许打开的是不一样的。难道我要用findwindow来穷举呀?这可不是个好办法。
老夏Max 2004-11-29
  • 打赏
  • 举报
回复
可以使用FindWindow
taotao7805 2004-11-29
  • 打赏
  • 举报
回复
我的系统里有好几百个好几千个窗口,枚举应该不是个好办法。
kugou123 2004-11-29
  • 打赏
  • 举报
回复
你可以用EnumWidnows来枚举,然后在该API的回调函数里面判断,对比窗口句柄,如果是你不想关闭的窗口,就不关闭,其他被枚举出来的窗口就统统SendMessage(hWnd,WM_CLOSE,NULL,NULL); 关闭之。
taotao7805 2004-11-29
  • 打赏
  • 举报
回复
如果用上面的方法是不是回造成系统资源泄露?我有一个想法,如果我已经得到了我不想关闭的那个窗口的句柄,我是不是可以加个判断我用GetForegroundWindow的到的句柄是不是我不想关闭的那个窗口的句柄,如果我的想法可行,那么怎么来进行这个判断呢?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧