⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 offline.cpp

📁 很好用的ftp源码
💻 CPP
字号:
/****************************************************\
    FILE: offline.cpp

    DESCRIPTION:
        Handle 'offline' status and Dial-up UI
\****************************************************/

#include <wininet.h>
#include "priv.h"
#include "util.h"


#ifdef FEATURE_OFFLINE
/****************************************************\
    FUNCTION: IsGlobalOffline

    DESCRIPTION:
        Determines whether wininet is in global offline mode

    PARAMETERS:
        None

    RETURN VALUE:
        BOOL
            TRUE    - offline
            FALSE   - online
\****************************************************/
BOOL IsGlobalOffline(VOID)
{
    DWORD   dwState = 0, dwSize = sizeof(DWORD);
    BOOL    fRet = FALSE;

    if(InternetQueryOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &dwState, &dwSize))
    {
        if(dwState & INTERNET_STATE_DISCONNECTED_BY_USER)
            fRet = TRUE;
    }

    return fRet;
}


/****************************************************\
    FUNCTION: SetOffline

    DESCRIPTION:
        Sets wininet's offline mode

    PARAMETERS:
        fOffline - online or offline

    RETURN VALUE:
        None.
\****************************************************/
VOID SetOffline(IN BOOL fOffline)
{
    INTERNET_CONNECTED_INFO ci = {0};

    if(fOffline)
    {
        ci.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER;
        ci.dwFlags = ISO_FORCE_DISCONNECTED;
    }
    else
    {
        ci.dwConnectedState = INTERNET_STATE_CONNECTED;
    }

    InternetSetOption(NULL, INTERNET_OPTION_CONNECTED_STATE, &ci, sizeof(ci));
}
#endif // FEATURE_OFFLINE


/****************************************************\
    FUNCTION: AssureNetConnection

    DESCRIPTION:
\****************************************************/
HRESULT AssureNetConnection(HINTERNET hint, HWND hwndParent, LPCWSTR pwzServerName, LPCITEMIDLIST pidl, BOOL fShowUI)
{
    HRESULT hr = S_OK;

#ifdef FEATURE_OFFLINE
    if (IsGlobalOffline())
    {
        // Assume we need to cancel the FTP operation because we are offline.
        hr = HRESULT_FROM_WIN32(ERROR_CANCELLED);

        // Can we prompt to go online?
        if (fShowUI)
        {
            TCHAR szTitle[MAX_PATH];
            TCHAR szPromptMsg[MAX_PATH];

            EVAL(LoadString(HINST_THISDLL, IDS_FTPERR_TITLE, szTitle, ARRAYSIZE(szTitle)));
            EVAL(LoadString(HINST_THISDLL, IDS_OFFLINE_PROMPTTOGOONLINE, szPromptMsg, ARRAYSIZE(szPromptMsg)));

            if (IDYES == MessageBox(hwndParent, szPromptMsg, szTitle, (MB_ICONQUESTION | MB_YESNO)))
            {
                SetOffline(FALSE);
                hr = S_OK;
            }
        }
    }
#endif // FEATURE_OFFLINE

#ifdef FEATURE_DIALER
    if (S_OK == hr)
    {
        TCHAR szUrl[MAX_URL_STRING];

        StrCpyN(szUrl, TEXT("ftp://"), ARRAYSIZE(szUrl));
        StrCatBuff(szUrl, pwzServerName, ARRAYSIZE(szUrl));

        // PERF: Does this value get cached?
        if (FALSE == InternetCheckConnection(szUrl, FLAG_ICC_FORCE_CONNECTION, 0)
            ||
#ifdef FEATURE_TEST_DIALER
        (IDNO == MessageBox(hwndParent, TEXT("TEST: Do you want to dial?"), TEXT("Test Dialer"), MB_YESNO))
#endif // FEATURE_TEST_DIALER
            )
        {
            hr = HRESULT_FROM_WIN32(ERROR_CANCELLED);
        }
    }
#endif // FEATURE_DIALER

    return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -