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”