龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用vc++穷举windows应用程序密码(下)(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
{//通过布尔变量m_bEnum 实现循环枚举窗口,若 m_bEnum 为假,线程退出自动销毁 while (m_bEnum) { ::EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL); } return true; } BOOL CALLBACK

{//通过布尔变量m_bEnum 实现循环枚举窗口,若 m_bEnum 为假,线程退出自动销毁

while (m_bEnum)

{   ::EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL);

}

return true;

}

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )

{

    if (!IsWindowVisible(hwnd)) return true;//当窗口不可见时,接着枚举下一窗口

    char lpString[128]="";

    ::GetWindowText(hwnd,(LPSTR)lpString,sizeof(lpString));

    //通过窗口标题查找所需窗口

    if(strstr(lpString,(const char *)lpszDialogCaption)!=NULL)

    {//第一发现所需窗口的线程,获得互斥信号量,其它线程被阻住

    ::WaitForSingleObject(m_hMutex,INFINITE);

    //枚举父窗口下的子窗口

    ::EnumChildWindows(hwnd,(WNDENUMPROC) EnumChildProc,INPUTDIALOGID);

    //线程执行完毕释放信号量,以便另外线程进入

    ::ReleaseMutex(m_hMutex);

    return false;//返回假,枚举过程不再进行

    }

    if(strstr(lpString,(const char *)lpszDialogRetryCaption)!=NULL)

    {::WaitForSingleObject(m_hMutex,INFINITE);

    ::EnumChildWindows(hwnd,(WNDENUMPROC) EnumChildProc,INPUTRETRYDIALOGID);

    ::ReleaseMutex(m_hMutex);

    return false;

    }

   return true;非所需窗口,继续枚举

}

精彩图集

赞助商链接