1.什么是自动播放窗口?
自动播放窗口是windows操作系统插入光盘及iso镜像文件加载至操作系统时,会自动弹出的窗口,如下图所示,
注意:只有win7操作系统才会弹出这样的自动播放窗口且不会自动消失,xp系统是没有的,而win8和win10都是弹出一个横条,然后会自动消失的
2.如何用代码实现关闭指定的自动播放窗口呢?
实现原理:先轮询查找标题为“自动播放"的窗口,然后再在查找的窗口中再次轮询所有控件窗口,找到包含指定的字符串
#define DEF_TELNET_NAME "NexTransmitter"
void CloseAutoPlayWindow()
{
//判断是否是win7系统,不是就返回
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx(&osvi))
{
return ;
}
if (osvi.dwMajorVersion != 6 || osvi.dwMinorVersion != 1)
{
return;
}
//win7系统关闭自动播放弹窗
HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD);
while (::IsWindow(hWndPrevious))
{
CString strTmp;
CWnd *pWnd = CWnd::FromHandle(hWndPrevious);
if (pWnd)
{
pWnd->GetWindowText(strTmp);
if (strTmp == _T("自动播放") || strTmp == _T("AutoPlay"))
{
HWND hChildWndPrevious = ::GetWindow(hWndPrevious,GW_CHILD);
while (::IsWindow(hChildWndPrevious))
{
CWnd *pChildWnd = CWnd::FromHandle(hChildWndPrevious);
if (pChildWnd)
{
pChildWnd->GetWindowText(strTmp);
if (strTmp.Find(_T(FIND_NAME)) != -1)
{
SendMessage(hWndPrevious, WM_CLOSE, NULL, NULL);
return;
}
}
// 继续寻找下一个窗口
hChildWndPrevious = ::GetWindow(hChildWndPrevious,GW_HWNDNEXT);
}
}
}
// 继续寻找下一个窗口
hWndPrevious = ::GetWindow(hWndPrevious,GW_HWNDNEXT);
}
}
注意:自动播放窗口的标题在中文操作系统下是“自动播放”,在英文操作系统下是“AutoPlay”