亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hardlinkshlext.cpp

?? Windows Shell擴展編程完全指南 4
?? CPP
字號:
// HardLinkShlExt.cpp : Implementation of CHardLinkShlExt

#include "stdafx.h"
#include "resource.h"
#include "HardLink.h"
#include "HardLinkShlExt.h"

/////////////////////////////////////////////////////////////////////////////
// CHardLinkShlExt IShellExtInit methods

STDMETHODIMP CHardLinkShlExt::Initialize (
    LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDO, HKEY hProgID )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

COleDataObject dataobj;
HGLOBAL        hglobal;
HDROP          hdrop;
TCHAR          szRoot[MAX_PATH];
TCHAR          szFileSystemName[256];
TCHAR          szFile[MAX_PATH];
UINT           uFile, uNumFiles;

    m_bitmap.LoadBitmap ( IDB_LINKBITMAP );

    dataobj.Attach ( pDO, FALSE );      // FALSE = don't release IDataObject interface when destroyed

    // Get the name of the directory where the files were dropped.
    if ( !SHGetPathFromIDList ( pidlFolder, m_szFolderDroppedIn ) )
        return E_FAIL;

    // Get the root of the target folder, and see if it's on an NTFS volume.
    lstrcpy ( szRoot, m_szFolderDroppedIn );
    PathStripToRoot ( szRoot );

    if ( !GetVolumeInformation ( szRoot, NULL, 0, NULL, NULL, NULL, 
                                 szFileSystemName, 256 ) )
        {
        // Couldn't determine file system type.
        return E_FAIL;
        }

#ifndef NOT_ON_WIN2K
    if ( 0 != lstrcmpi ( szFileSystemName, _T("ntfs") ))
        {
        // The file system isn't NTFS, so it doesn't support hard links.
        return E_FAIL;
        }
#endif

    // Make sure the target dir ends in a backslash, to make later processing easier.
    PathAddBackslash ( m_szFolderDroppedIn );

    // Get a list of all the objects that were dropped.
    hglobal = dataobj.GetGlobalData ( CF_HDROP );

    if ( NULL == hglobal )
        return E_INVALIDARG;

    hdrop = (HDROP) GlobalLock ( hglobal );

    if ( NULL == hdrop )
        {
        GlobalFree ( hglobal );
        return E_INVALIDARG;
        }

    // Determine how many files were dropped.
    uNumFiles = DragQueryFile ( hdrop, 0xFFFFFFFF, NULL, 0 );

    // Check each dropped item.  If there are any directories present,
    // we have to bail out, since a directory can't be linked to.
    // We also have to check that the dropped items reside on the same
    // volume as the directory where they were dropped - hard links can only
    // be made on the same volume.
    for ( uFile = 0; uFile < uNumFiles; uFile++ )
        {
        if ( DragQueryFile ( hdrop, uFile, szFile, MAX_PATH ) )
            {
            if ( PathIsDirectory ( szFile ))
                {
                // We found a directory!  Bail out.
                m_lsDroppedFiles.RemoveAll();
                break;
                }

            if ( !PathIsSameRoot ( szFile, m_szFolderDroppedIn ) )
                {
                // Dropped files came from a different volume - bail out.
                m_lsDroppedFiles.RemoveAll();
                break;
                }

            // Add the file to our list of dropped files.
            m_lsDroppedFiles.AddTail ( szFile );
            }
        }   // end for

    GlobalUnlock ( hglobal );
    GlobalFree ( hglobal );

    return ( m_lsDroppedFiles.GetCount() > 0 ) ? S_OK : E_FAIL;
}


/////////////////////////////////////////////////////////////////////////////
// CHardLinkShlExt IContextMenu methods

STDMETHODIMP CHardLinkShlExt::QueryContextMenu (
    HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd,
    UINT uidLastCmd, UINT uFlags )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // If the flags include CMF_DEFAULTONLY then we shouldn't do anything.
    if ( uFlags & CMF_DEFAULTONLY )
        return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 );

    // Add the hard link menu item.
    InsertMenu ( hmenu, uMenuIndex, MF_STRING | MF_BYPOSITION, uidFirstCmd,
                 _T("Create &Hard Link(s) Here") );

    if ( NULL != m_bitmap.GetSafeHandle() )
        SetMenuItemBitmaps ( hmenu, uMenuIndex, MF_BYPOSITION, m_bitmap, NULL );

    // Return 1 to tell the shell that we added 1 top-level menu item.
    return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 1 );
}

STDMETHODIMP CHardLinkShlExt::InvokeCommand ( LPCMINVOKECOMMANDINFO pInfo )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

TCHAR    szNewFilename[MAX_PATH+32];   // +32 in case a path overruns MAX_PATH (we'll handle this case and error out)
CString  sSrcFile;
TCHAR    szSrcFileTitle[MAX_PATH];
CString  sMessage;
UINT     uLinkNum;
POSITION pos;

    // Double-check that we're getting called for our own menu item - lpVerb
    // must be 0.
    if ( 0 != pInfo->lpVerb )
        return E_INVALIDARG;

    // Start enumerating the files we're going to make links for.
    pos = m_lsDroppedFiles.GetHeadPosition();

    // Sanity check - the list must not be empty.
    ASSERT ( NULL != pos );

    while ( NULL != pos )
        {
        // Get the next source filename.
        sSrcFile = m_lsDroppedFiles.GetNext ( pos );

        // Remove the path - this reduces "C:\xyz\foo\stuff.exe" to "stuff.exe"
        lstrcpy ( szSrcFileTitle, sSrcFile );
        PathStripPath ( szSrcFileTitle );

        // Make the filename for the hard link - we'll first try 
        // "Hard link to stuff.exe"
        wsprintf ( szNewFilename, _T("%sHard link to %s"), m_szFolderDroppedIn,
                   szSrcFileTitle );

        // Check if that filename already exists.  If so, we'll try
        // "Hard link (2) to stuff.exe", incrementing the number up to an
        // arbitrary limit of 99.
        for ( uLinkNum = 2;
              PathFileExists ( szNewFilename ) && uLinkNum < 100; 
              uLinkNum++ )
            {
            // Try another filename for the link.
            wsprintf ( szNewFilename, _T("%sHard link (%u) to %s"),
                       m_szFolderDroppedIn, uLinkNum, szSrcFileTitle );

            // If the resulting filename is longer than MAX_PATH, show an 
            // error message.
            if ( lstrlen ( szNewFilename ) >= MAX_PATH )
                {
                sMessage.Format ( _T("Failed to make a link to %s. The resulting filename would be too long.\n\nDo you want to continue making links?"),
                                  (LPCTSTR) sSrcFile );

                if ( IDNO == MessageBox ( pInfo->hwnd, sMessage, _T("Create Hard Links"),
                                          MB_ICONQUESTION | MB_YESNO ) )
                    break;
                else
                    continue;
                }
            }

        // If we hit our limit of 100 links, tell the user what's up.
        if ( 100 == uLinkNum )
            {
            sMessage.Format ( _T("Failed to make a link to %s. Reached limit of 100 links in a single directory.\n\nDo you want to continue making links?"),
                              (LPCTSTR) sSrcFile );

            if ( IDNO == MessageBox ( pInfo->hwnd, sMessage, _T("Create Hard Links"),
                                      MB_ICONQUESTION | MB_YESNO ) )
                break;
            else
                continue;
            }

        // Make the link!
#ifdef NOT_ON_WIN2K
        MessageBox(pInfo->hwnd, szNewFilename, "The new link would be:", MB_OK);
#else
        if ( !CreateHardLink ( szNewFilename, sSrcFile, NULL ) )
            {
            LPVOID pvMsgBuf = NULL;
            DWORD  dwLastErr = GetLastError();
            int    nChoice;

            FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | 
                              FORMAT_MESSAGE_IGNORE_INSERTS,
                            NULL, dwLastErr,
                            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                            (LPTSTR) &pvMsgBuf, 0, NULL );

            sMessage.Format ( _T("Failed to make a link to %s.\n\nError 0x%08lX - %s\nDo you want to continue making links?"),
                              (LPCTSTR) sSrcFile, dwLastErr,
                              pvMsgBuf ? pvMsgBuf : _T("(No description available)") );

            nChoice = MessageBox ( pInfo->hwnd, sMessage, _T("Create Hard Links"),
                                   MB_ICONQUESTION | MB_YESNO );

            if ( NULL != pvMsgBuf )
                LocalFree ( pvMsgBuf );

            if ( IDNO == nChoice )
                break;
            }
#endif
        }   // end while

    return S_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图清纯唯美| 国产在线麻豆精品观看| 99久久亚洲一区二区三区青草| 国产日产精品1区| 97精品超碰一区二区三区| 亚洲欧美精品午睡沙发| 欧美日韩日日夜夜| 国内外成人在线视频| 国产精品欧美久久久久无广告| 99精品黄色片免费大全| 香蕉成人啪国产精品视频综合网| 日韩一区二区三区视频| 国产盗摄一区二区| 亚洲一区在线观看网站| 日韩久久久精品| 岛国精品在线播放| 亚洲影院久久精品| 久久久五月婷婷| 欧美优质美女网站| 极品少妇xxxx偷拍精品少妇| 亚洲视频一区二区免费在线观看| 69av一区二区三区| 国产精品自拍三区| 蜜臀久久久久久久| 久久一夜天堂av一区二区三区| 99麻豆久久久国产精品免费优播| 日韩电影在线一区| 国产精品大尺度| 日韩欧美激情一区| 日本高清不卡一区| 国内精品不卡在线| 夜夜爽夜夜爽精品视频| 精品成人佐山爱一区二区| 99riav久久精品riav| 久久97超碰国产精品超碰| 中文字幕一区二区日韩精品绯色| 日韩欧美一区二区免费| 在线亚洲一区二区| 成人小视频免费观看| 奇米在线7777在线精品| 亚洲精品v日韩精品| 国产日产欧美一区二区视频| 欧美一级精品在线| 在线精品亚洲一区二区不卡| 高清国产一区二区| 久久激情五月激情| 午夜精品免费在线| 亚洲人吸女人奶水| 国产精品理论在线观看| 精品91自产拍在线观看一区| 91精品在线观看入口| 在线观看欧美黄色| 91同城在线观看| 成人小视频在线| 国产激情一区二区三区桃花岛亚洲| 午夜精品在线看| 亚洲日本中文字幕区| 久久久五月婷婷| 久久影院电视剧免费观看| 欧美一级片在线看| 在线播放91灌醉迷j高跟美女 | 国产成+人+日韩+欧美+亚洲| 图片区小说区区亚洲影院| 日韩毛片视频在线看| 亚洲国产激情av| 久久色.com| 久久综合色播五月| www国产亚洲精品久久麻豆| 欧美成人伊人久久综合网| 777色狠狠一区二区三区| 欧美乱妇20p| 91精品免费在线观看| 7777女厕盗摄久久久| 欧美肥妇bbw| 欧美一二三四区在线| 欧美大白屁股肥臀xxxxxx| 日韩欧美在线网站| 精品国产凹凸成av人导航| 精品噜噜噜噜久久久久久久久试看 | 国产精品美女久久久久av爽李琼| 国产日韩高清在线| 国产精品美日韩| 中文字幕一区二区三区精华液 | 久久久91精品国产一区二区精品 | 国产日韩欧美制服另类| 欧美国产精品一区| 亚洲欧美在线视频观看| 亚洲一区二区三区美女| 三级久久三级久久| 久久精品国产色蜜蜜麻豆| 国产在线播放一区三区四| 成人免费毛片嘿嘿连载视频| 色激情天天射综合网| 51午夜精品国产| 久久精品日产第一区二区三区高清版 | 中文字幕一区二区三| 亚洲黄色片在线观看| 日韩精品免费专区| 国产一区三区三区| 91免费国产视频网站| 制服丝袜在线91| 国产婷婷一区二区| 亚洲曰韩产成在线| 国内一区二区在线| 91免费国产视频网站| 欧美福利一区二区| 国产午夜一区二区三区| 一区二区三区加勒比av| 蜜桃一区二区三区四区| 成人av网站免费| 91精品国产综合久久久久久久| 久久久激情视频| 亚洲综合一二区| 国产高清在线精品| 精品视频在线免费看| 欧美国产精品中文字幕| 偷拍自拍另类欧美| 精品一区二区三区免费毛片爱| jizz一区二区| 日韩欧美亚洲国产精品字幕久久久| 成人欧美一区二区三区视频网页| 日韩成人精品在线观看| 99视频精品在线| 日韩色视频在线观看| 亚洲精品乱码久久久久久黑人| 狠狠狠色丁香婷婷综合激情| 在线观看国产91| 国产精品区一区二区三区| 日本在线不卡视频| 97精品超碰一区二区三区| 欧美v国产在线一区二区三区| 玉米视频成人免费看| 国产精品亚洲午夜一区二区三区 | 91福利国产精品| 久久精品这里都是精品| 日韩va亚洲va欧美va久久| 97久久超碰国产精品| 国产欧美精品一区二区色综合 | 欧美老肥妇做.爰bbww| 亚洲视频小说图片| 夫妻av一区二区| 日韩精品一区二区在线| 午夜私人影院久久久久| 色婷婷综合激情| 国产精品三级电影| 国产精品99久| 精品嫩草影院久久| 日韩高清不卡一区二区三区| 在线观看av一区| 亚洲精品国久久99热| proumb性欧美在线观看| 一区二区三区日韩欧美| 国产激情视频一区二区三区欧美| 日韩片之四级片| 男男视频亚洲欧美| 69精品人人人人| 免费在线观看视频一区| 8x8x8国产精品| 热久久国产精品| 精品少妇一区二区三区在线视频| 日本不卡视频在线| 日韩女优电影在线观看| 精品在线免费视频| 精品福利一区二区三区| 国产资源在线一区| 国产欧美一二三区| 成人久久久精品乱码一区二区三区| 国产欧美1区2区3区| 99久久亚洲一区二区三区青草| 中文字幕一区二区在线播放 | 国产成人午夜电影网| 国产午夜亚洲精品午夜鲁丝片 | 国产视频一区二区在线| 成人午夜精品在线| 国产精品久久福利| 在线免费观看日本一区| 天堂影院一区二区| 欧美xxxx在线观看| 高清国产一区二区三区| 亚洲伦理在线免费看| 欧美日本韩国一区二区三区视频| 青青草原综合久久大伊人精品| 日韩免费视频一区| 国产激情一区二区三区四区| 国产精品美女www爽爽爽| 在线观看国产日韩| 久久99国产乱子伦精品免费| 国产欧美日韩精品一区| 色狠狠av一区二区三区| 丝袜诱惑亚洲看片| 久久精品视频免费| 在线一区二区三区| 久久av老司机精品网站导航| 国产色婷婷亚洲99精品小说| 日本高清不卡一区| 久久91精品久久久久久秒播 | 亚洲午夜av在线| www日韩大片| 欧美私人免费视频| 韩国理伦片一区二区三区在线播放|