由于程序需要控制移动硬盘去重新启动,导致弹出多个自动运行窗口,让人感到比较厌烦。
现在有一做法:在一段时间内去关闭那些自动播放窗口。碰到一个问题是不同语言的操作系统窗口标题会不一样。这样就不能够保证所有系统做到一致。
void CMainDlg ::OnBnClickedButtonOk()
{
     m_isDoTask = true;
     AfxBeginThread(FunProc_Check_Process,this);
     DoTask();
     m_isDoTask = false;
}UINT FunProc_Check_Process( LPVOID lpParameter )
{
CMainDlg * pTask =(CMainDlg *)lpParameter;
HWND   hwnd;
         do
{
//for close system message.
         hwnd   =   ::FindWindow(NULL,"Microsoft Windows");   
if(hwnd)   
::SendMessage(hwnd,WM_CLOSE,NULL,NULL); 
hwnd   =   ::FindWindow(NULL,"AutoPlay");   
if(hwnd)   
::SendMessage(hwnd,WM_CLOSE,NULL,NULL); 
hwnd   =   ::FindWindow(NULL,"自动播放");   
if(hwnd)   
::SendMessage(hwnd,WM_CLOSE,NULL,NULL); 
hwnd   =   ::FindWindow(NULL,"自動播放");   
if(hwnd)   
::SendMessage(hwnd,WM_CLOSE,NULL,NULL); 
Sleep(50);
}while(pTask->m_isDoTask );
return 0;
}关闭同类系统窗口,如下图窗口:
还请了解的朋友帮忙指点一下。

解决方案 »

  1.   

    插入USB设备时,怎样禁止弹出自动播放窗口:  
      运行gpedit.msc,打开“组策略”窗口。展开定位到“本地计算机策略-计算机配置-管理模板-系统”,然后在右窗口中的“设置”标题下,双击“关闭自动播放”项,单击“设置”选项卡,选中“已启用”复选框,接着在“关闭自动播放”框中单击“所有驱动器”,按下“确定”。
    ::FindWindow(NULL,"AutoPlay");  可以按CLASS找。。
      

  2.   

    之前我说的不是很清楚,其实大体情况是这样的,程序是存放在移动硬盘根目录下。
    第一次弹出窗口:因为写了一个Ini文件引导,程序AutoRun,这个是正常的。
    第二次弹出窗口:因为程序对硬盘做了格举,必须要让硬盘重新启动一下。 其实也算是正常现象,要支持Win200,XP,Vista,Win7,只有用一种比较通用的方法。
    问题是第二次窗口会让普通用户感到困惑,不够完美,想把它关闭。怎么找类名了::FindWindow(NULL,"AutoPlay")
    用SPY+看了是 #32770 (对话框) 
      

  3.   

    ::FindWindow(NULL,"AutoPlay"),干嘛还要按照类名找?title相似的可能性不大
      

  4.   

    #32770 is the default class name for dialog boxes of MFC.
      

  5.   

    多谢WizardK及楼上的各位仁兄。
    长声一叹,做产品的不容易啊!有一点小毛病都不放过.