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

📄 browser.c

📁 执行和去除共享软件日期限制的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    CMINVOKECOMMANDINFO cmi ;
    DWORD dwAttribs = 0 ;
    int idCmd ;
    HMENU hMenu ;
    BOOL bSuccess = TRUE ;

    hr=lpsfParent -> lpVtbl -> GetUIObjectOf(	lpsfParent, hwnd,
												1,  //Number of objects to get attributes of
												&lpi,
												&IID_IContextMenu,
												0,
												(LPVOID *)&lpcm) ;
    if( SUCCEEDED( hr))
    {
       hMenu = CreatePopupMenu() ;

       if( hMenu)
       {
          hr=lpcm -> lpVtbl -> QueryContextMenu(	lpcm, hMenu,
													0,
													1,
													0x7fff,
													CMF_EXPLORE) ;
          if( SUCCEEDED( hr))
          {
             idCmd = TrackPopupMenu(	hMenu,
										TPM_LEFTALIGN | TPM_RETURNCMD | TPM_RIGHTBUTTON,
										lppt -> x,
										lppt -> y,
										0,
										hwnd,
										NULL) ;

             if( idCmd)
             {
                cmi.cbSize = sizeof( CMINVOKECOMMANDINFO) ;
                cmi.fMask = 0 ;
                cmi.hwnd = hwnd ;
                cmi.lpVerb = MAKEINTRESOURCE( idCmd - 1) ;
                cmi.lpParameters = NULL ;
      	         cmi.lpDirectory = NULL ;
                cmi.nShow = SW_SHOWNORMAL ;
                cmi.dwHotKey = 0 ;
                cmi.hIcon = NULL ;
                hr=lpcm -> lpVtbl -> InvokeCommand( lpcm, &cmi) ;
                if( SUCCEEDED(hr))
                    ;  //Do nothing
                else
                {
                   MessageBox( hwnd, "InvokeCommand failed!!", "Shell Extension Sample", MB_OK) ;
                   wsprintf( szTemp, "hr=%lx", hr) ;
                   MessageBox( hwnd, szTemp, "Shell Extension Sample", MB_OK) ;
                }
             }

          }
          else
             bSuccess = FALSE ;

          DestroyMenu( hMenu) ;
       }
       else
          bSuccess = FALSE ;

       lpcm -> lpVtbl -> Release( lpcm) ;
    }
    else
    {
       MessageBox( hwnd, "GetUIObjectOf failed!!", "Shell Extension Sample", MB_OK) ;
       wsprintf(szTemp, "hr=%lx", hr) ;
       MessageBox( hwnd, szTemp, "Shell Extension Sample", MB_OK) ;

       bSuccess = FALSE ;
    }
    return bSuccess;
}


BOOL WINAPI InitListViewImageLists( HWND hwndLV)
{
    HIMAGELIST himlSmall ;
    HIMAGELIST himlLarge ;
    SHFILEINFO sfi ;
    BOOL bSuccess = TRUE ;

    himlSmall = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",
                                           0,
                                           &sfi,
                                           sizeof(SHFILEINFO),
                                           SHGFI_SYSICONINDEX | SHGFI_SMALLICON) ;

    himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",
                                           0,
                                           &sfi,
                                           sizeof(SHFILEINFO),
                                           SHGFI_SYSICONINDEX | SHGFI_LARGEICON) ;

    if( himlSmall && himlLarge)
    {
       ListView_SetImageList(hwndLV, himlSmall, LVSIL_SMALL) ;
       ListView_SetImageList(hwndLV, himlLarge, LVSIL_NORMAL) ;
    }
    else
       bSuccess = FALSE;

    return bSuccess;
}


BOOL WINAPI InitListViewItems(	HWND hwndLV,
								LPTVITEMDATA lptvid,
								LPSHELLFOLDER lpsf)
{
    LV_ITEM lvi ;
    int iCtr ;
    HRESULT hr ;
    LPMALLOC lpMalloc ;
    LPITEMIDLIST lpifqThisItem ;
    LPITEMIDLIST lpi = 0 ;
    LPENUMIDLIST lpe = 0 ;
    LPLVITEMDATA lplvid ;
    ULONG ulFetched, ulAttrs ;
    HWND hwnd=GetParent( hwndLV) ;
    char szBuff[ MAX_PATH] ;

    lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM ;

    hr=SHGetMalloc( &lpMalloc) ;
    if( FAILED(hr))
       return FALSE ;

    // Hourglass on!

    SetCapture( GetParent( hwndLV)) ;
    SetCursor( LoadCursor( NULL, IDC_WAIT)) ;

    if( SUCCEEDED( hr))
    {
        hr = lpsf -> lpVtbl -> EnumObjects( lpsf, hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &lpe) ;

        if( SUCCEEDED( hr))
        {
            iCtr = 0 ;

            while( S_OK==lpe -> lpVtbl -> Next( lpe, 1, &lpi, &ulFetched))
            {
                // OK, let's get some memory for our ITEMDATA struct
                lplvid = (LPLVITEMDATA)lpMalloc -> lpVtbl -> Alloc( lpMalloc, sizeof(LVITEMDATA)) ;
                if( !lplvid)
                   goto Done ;

                // now get the friendly name that we'll put in the treeview...
                GetName( lpsf, lpi, SHGDN_NORMAL, szBuff) ;

                lpsf -> lpVtbl -> GetAttributesOf( lpsf, 1, &lpi, &ulAttrs) ;
                lplvid -> ulAttribs=ulAttrs;

                lpifqThisItem=ConcatPidls(lptvid -> lpifq, lpi) ;

                lvi.iItem = iCtr++ ;
                lvi.iSubItem = 0 ;
                lvi.pszText = szBuff ;
                lvi.cchTextMax = MAX_PATH ;
                lvi.iImage = GetIcon( lpifqThisItem, SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON) ;

                lplvid -> lpsfParent = lpsf ;
                lpsf -> lpVtbl -> AddRef( lpsf) ;

                // now, make a copy of the ITEMIDLIST
                lplvid -> lpi=CopyITEMID( lpMalloc, lpi) ;

                lvi.lParam = (LPARAM)lplvid ;

                // add the item to the listview
				if( ListView_InsertItem( hwndLV, &lvi) == -1)
                   return FALSE ;

                lpMalloc -> lpVtbl -> Free( lpMalloc, lpifqThisItem) ;
                lpifqThisItem = 0 ;
                lpMalloc -> lpVtbl -> Free( lpMalloc, lpi) ;
                lpi = 0 ;
            }
        }

    }

Done:

    // Hourglass off!
    ReleaseCapture() ;
    SetCursor(LoadCursor(NULL, IDC_ARROW)) ;

    if( lpe)
		lpe -> lpVtbl -> Release( lpe) ;

    //The following 2 if statements will only be TRUE if we got here on an
    //error condition from the "goto" statement.  Otherwise, we free this memory
    //at the end of the while loop above.
    if(  lpi && lpMalloc)
		lpMalloc -> lpVtbl -> Free(lpMalloc, lpi) ;
    if(  lpifqThisItem && lpMalloc)
		lpMalloc -> lpVtbl -> Free(lpMalloc, lpifqThisItem) ;

    if(  lpMalloc)
		lpMalloc -> lpVtbl -> Release(lpMalloc) ;

    return TRUE ;
}


HWND WINAPI CreateListView( HWND hwndParent, HINSTANCE hInstance)
{
    HWND hwndLV ;
    RECT rc ;

    // Force the common controls DLL to be loaded.
    InitCommonControls() ;

    // Create the control.
    GetClientRect(hwndParent, &rc) ;

    hwndLV = CreateWindowEx(WS_EX_CLIENTEDGE,
    	                    WC_LISTVIEW, "",
                            WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_EDITLABELS |
                            LVS_LIST | LVS_AUTOARRANGE | LVS_SHAREIMAGELISTS,
                            0, 0, 
                            rc.right-rc.left, rc.bottom-rc.top,
                            hwndParent,
                            (HMENU)IDD_LISTVIEW, 
                            hInstance, 
                            NULL) ;

    return hwndLV ;
}

void SwitchView(HWND hwndLV, DWORD dwView)
{
    DWORD dwStyle = GetWindowLong(hwndLV, GWL_STYLE) ;

    if( (dwStyle & LVS_TYPEMASK) != dwView)
        SetWindowLong(hwndLV, GWL_STYLE, (dwStyle & ~LVS_TYPEMASK) | dwView) ;
}


int CALLBACK ListViewCompareProc(LPARAM lParam1, 
                                 LPARAM lParam2,
                                 LPARAM lParamSort)
{
    LPLVITEMDATA lplvid1=(LPLVITEMDATA)lParam1;
    LPLVITEMDATA lplvid2=(LPLVITEMDATA)lParam2;
    char      szTemp1[MAX_PATH];
    char      szTemp2[MAX_PATH];
    int       iResult = 1;

    if( lplvid1 && lplvid2)
    {
       if(  (lplvid1 -> ulAttribs & SFGAO_FOLDER) && 
           !(lplvid2 -> ulAttribs & SFGAO_FOLDER) )
              return -1;

       if( !(lplvid1 -> ulAttribs & SFGAO_FOLDER) && 
            (lplvid2 -> ulAttribs & SFGAO_FOLDER) )
              return 1;

       GetName(lplvid1 -> lpsfParent, lplvid1 -> lpi, SHGDN_NORMAL, szTemp1) ;
       GetName(lplvid2 -> lpsfParent, lplvid2 -> lpi, SHGDN_NORMAL, szTemp2) ;

       iResult = lstrcmpi(szTemp1, szTemp2) ;
    }

    return iResult;
}


BOOL PopulateListView(HWND hwndLV, 
                      LPTVITEMDATA lptvid,
                      LPSHELLFOLDER lpsf)
{
    ListView_DeleteAllItems(hwndLV) ;

    if( !InitListViewImageLists(hwndLV) ||
        !InitListViewItems(hwndLV, lptvid, lpsf))
    {
        return FALSE;
    }

    ListView_SortItems(hwndLV,
                       ListViewCompareProc,
                       0) ;
}


LPITEMIDLIST Next(LPCITEMIDLIST pidl)
{
   LPSTR lpMem=(LPSTR)pidl;

   lpMem+=pidl -> mkid.cb;

   return (LPITEMIDLIST)lpMem;
}

UINT GetSize(LPCITEMIDLIST pidl)
{
    UINT cbTotal = 0;
    if( pidl)
    {
        cbTotal += sizeof(pidl -> mkid.cb) ;       // Null terminator
        while (pidl -> mkid.cb)
        {
            cbTotal += pidl -> mkid.cb;
            pidl = Next(pidl) ;
        }
    }

    return cbTotal;
}

LPITEMIDLIST Create(UINT cbSize)
{
    LPMALLOC lpMalloc;
    HRESULT  hr;
    LPITEMIDLIST pidl=0;

    hr=SHGetMalloc(&lpMalloc) ;

    if( FAILED(hr))
       return 0;

    pidl=(LPITEMIDLIST)lpMalloc -> lpVtbl -> Alloc(lpMalloc, cbSize) ;

    if( pidl)
        _fmemset(pidl, 0, cbSize) ;      // zero-init for external task   alloc

    if( lpMalloc) lpMalloc -> lpVtbl -> Release(lpMalloc) ;

    return pidl;
}

LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
{
    LPITEMIDLIST pidlNew;
    UINT cb1;
    UINT cb2;

    if( pidl1)  //May be NULL
       cb1 = GetSize(pidl1) - sizeof(pidl1 -> mkid.cb) ;
    else
       cb1 = 0;

    cb2 = GetSize(pidl2) ;

    pidlNew = Create(cb1 + cb2) ;
    if( pidlNew)

⌨️ 快捷键说明

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