首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

高手来帮忙,多谢,任务栏的有关问题!

2012-09-17 
高手来帮忙,谢谢,任务栏的问题!!!那位大牛 帮我改下:每次切换到登陆界面后,再切回桌面的时候,文件夹只能显

高手来帮忙,谢谢,任务栏的问题!!!
那位大牛 帮我改下:
每次切换到登陆界面后,再切回桌面的时候,文件夹只能显示一次,再切 的话,就出错了,怎么改。

C/C++ code
stack<HWND> taskhwnd;//存任务栏上的窗口句柄stack<wstring>    folderPath;BOOL CALLBACK EnumTaskbarWnds( HWND hwnd, LPARAM lParam ){    WCHAR szClass[256];    if( !GetWindow( hwnd, GW_OWNER ) && IsWindowVisible( hwnd ) )// 滤掉不在任务栏显示的窗口    {        GetClassName( hwnd, szClass, sizeof(szClass) );        if( lstrcmpW( szClass, L"Shell_TrayWnd" ) != 0 // 过滤掉任务栏本身            && lstrcmpW( szClass, L"Progman" ) != 0 )// 过滤掉桌面         {                if( lstrcmpW(szClass,L"CabinetWClass") == 0)//是否是文件夹            {                taskhwnd.push(hwnd);            }            }    }    return TRUE;}void CALLBACK loginXPViewCallBack(UINT /*uTimerID*/, UINT /*uMsg*/, DWORD dwUser, DWORD /*dw1*/, DWORD /*dw2*/){    timeKillEvent(g_msstyle_par.tidwork);    switch(dwUser)    {    case 0:        {                        ShowWindow(g_loginxp_par.hMain, SW_HIDE);            BlockInput(TRUE);            CoInitialize (0);            IShellDispatch4 *pdisp = NULL;            CoCreateInstance (CLSID_Shell, NULL, CLSCTX_ALL, __uuidof (IShellDispatch4), (void **)&pdisp);                        pdisp->ToggleDesktop (); // 切换桌面            pdisp->Release ();            CoUninitialize ();        }        break;    case 1:        {            WCHAR windows[MAX_PATH]={0};            WCHAR buf[MAX_PATH];            wstring bufpath;            DWORD dwType = 0;            DWORD dwSize = sizeof(g_loginxp_par.logonui);            SHGetValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\", L"UIHost", &dwType, g_loginxp_par.logonui, &dwSize);            LPITEMIDLIST    lpIdl = NULL;            ::SHGetSpecialFolderLocation(NULL, CSIDL_WINDOWS, &lpIdl);            ::SHGetPathFromIDListW(lpIdl, windows);            ::CoTaskMemFree(static_cast<void*>(lpIdl));            lstrcpy(g_loginxp_par.explorer, windows);            PathAppendW(g_loginxp_par.explorer, L"explorer.exe");            if(wstring(g_loginxp_par.logonui)== wstring(L"logonui.exe"))            {                lstrcpy(g_loginxp_par.logonui, windows);                PathAppendW(g_loginxp_par.logonui, L"system32\\logonui.exe");            }            EnumWindows(EnumTaskbarWnds,NULL);             while(!taskhwnd.empty())            {                HWND  WorkerAWnd;                 WorkerAWnd=FindWindowExW(taskhwnd.top(),0,L"WorkerW",NULL);                 if(!WorkerAWnd) return ;                 HWND  ReBarWindow32Wnd;                 ReBarWindow32Wnd=FindWindowExW(WorkerAWnd,0,L"ReBarWindow32",NULL);                 if(!ReBarWindow32Wnd) return ;                 HWND  ComboBoxEx32Wnd;                 ComboBoxEx32Wnd=FindWindowExW(ReBarWindow32Wnd,0,L"ComboBoxEx32",NULL);                 if(!ComboBoxEx32Wnd) return ;                 HWND  ComboBoxWnd;                 ComboBoxWnd=FindWindowExW(ComboBoxEx32Wnd,0,L"ComboBox",NULL);                 if(!ComboBoxWnd) return ;                 HWND  EditWnd;                 EditWnd=FindWindowExW(ComboBoxWnd,0,L"Edit",NULL);                 if(!EditWnd) return ;                  SendMessageW(EditWnd,WM_GETTEXT,sizeof(buf)/sizeof(WCHAR),(LPARAM)(void *)buf);                bufpath = buf;                folderPath.push(bufpath);                taskhwnd.pop();             }            wincxx_TerminateProcessByName(L"explorer.exe");        }        break;    case 2:        {            wincxx_RunProcessByName(g_loginxp_par.logonui);        }        break;    case 3:    case 4:        break;    case 5:        {            HWND hLogon = FindWindowW(L"NativeHWNDHost", NULL);            hLogon = FindWindowExW(hLogon, NULL, L"DirectUIHWND", NULL);            HDC hdcLogon= GetDC(hLogon);            int iBmpWidth    = GetDeviceCaps( hdcLogon, HORZRES );            int iBmpHeight    = GetDeviceCaps( hdcLogon, VERTRES );            int iDstBmpWidth, iDstBmpHeight;            iDstBmpWidth= _width;            iDstBmpHeight= _height;            iDstBmpWidth    = iBmpWidth;            iDstBmpHeight    = iBmpHeight;            HDC hdcCompatible   =   CreateCompatibleDC( hdcLogon );            HBITMAP hbmpTmp = ::CreateCompatibleBitmap32B(hdcCompatible, iBmpWidth, iBmpHeight);            if ( !SelectObject( hdcCompatible, hbmpTmp ))            {            }            ::BitBlt(hdcCompatible, 0, 0, iBmpWidth, iBmpHeight,hdcLogon, 0, 0, SRCCOPY | CAPTUREBLT);            Bitmap bmp(hbmpTmp, NULL);            Bitmap bmp_file(iDstBmpWidth, iDstBmpHeight, PixelFormat32bppARGB);            Graphics gp(&bmp_file);            gp.SetTextRenderingHint(TextRenderingHintAntiAlias);//消除锯齿            gp.SetInterpolationMode(InterpolationModeHighQualityBicubic);//使用高质量的插补算法            gp.DrawImage(&bmp, Rect(0, 0, iDstBmpWidth, iDstBmpHeight), 0,0,iBmpWidth, iBmpHeight, UnitPixel);            CLSID    clsid;             GetEncoderClsid(L"image/jpeg", &clsid);            bmp_file.Save(g_loginxp_par.wstrSaveFname.c_str(), &clsid);        }        break;    case 6:    case 7:        break;    case 8:        {            wincxx_TerminateProcessByName(g_loginxp_par.logonui);        }        break;    case 9:        {            wincxx_RunProcessByName(g_loginxp_par.explorer);            if(::IsIconic(g_loginxp_par.hMain)){                ShowWindowAsync(g_loginxp_par.hMain, SW_RESTORE);            }            ShowWindowAsync(g_loginxp_par.hMain, SW_SHOW);            while(!folderPath.empty())            {                WCHAR runame[MAX_PATH]=L"explorer.exe ";                lstrcat(runame, folderPath.top().c_str());                wincxx_RunProcessByName(runame);                folderPath.pop();            }            ::SetWindowPos(g_loginxp_par.hMain, 0,0,0,0,0,                SWP_NOZORDER | SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);            BlockInput(FALSE);        }        break;    default:        {            SetEvent(g_loginxp_par.hEvent);        }        return ;    }    g_loginxp_par.tidwork= timeSetEvent(500,0,&loginXPViewCallBack,(DWORD_PTR)dwUser+1,TIME_ONESHOT);} 



[解决办法]
写这么多看的头晕

热点排行