MFC 如何关闭windows的自动播放窗口

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”



猜你喜欢

转载自blog.csdn.net/wangkui1331/article/details/79446049
今日推荐