AMcoder - javascript, python, java, html, php, sql

Ո՞րն է Shell Namespace-ի եղանակը՝ նոր թղթապանակ ստեղծելու համար:

Ակնհայտ է, որ դա աննշան է win32 api - CreateDirectory() հետ: Բայց ես փորձում եմ հյուրընկալել IShellView-ը և կուզենայի դա անել ամենահեղինակավոր ձևով: Ես կմտածեի, որ կլինի createobject կամ createfolder կամ նման մի քանի IShellFolder-ից: Բայց ոչ IShellView-ը, ոչ IShellFolder-ը, ոչ էլ նույնիսկ IFolderView-ը կարծես նման բան չունեն:

Կա՞ Shell-ծրագրավորման եղանակ՝ նոր թղթապանակ ստեղծելու համար: Թե՞ ես պետք է թղթապանակ ստեղծեմ՝ օգտագործելով pathname, հնաոճ ձևով:

Եթե ​​ես պետք է դա անեմ CreateDirectory(-ի միջոցով), ապա իմ հաջորդ հարցը կարող է լինել.

Մոտիվացիա. Ստեղծելով իմ սեփական File Dialog-ի փոխարինումը և ես ուզում եմ ապահովել «նոր թղթապանակ» գործիքագոտու պատկերակի գործառույթը ստանդարտ XP ոճի ֆայլի երկխոսության մեջ:

Խմբագրել. Ես առաջ գնացի և ստեղծեցի մի բան, որը հիմնականում աշխատում է՝ օգտագործելով CreateDirectory-ը: Այնուամենայնիվ, ես դեռ հուսով եմ, որ կա դա անելու ավելի լավ միջոց, բայց որպեսզի դուք կարողանաք տեսնել, թե ինչպես է դա աշխատում և ավելի լավ գաղափարներ առաջարկել այս խնդիրը ավելի լավ լուծելու համար.

    PidlUtils::Pidl pidl(m_folder);
    CFilename folderName(GetDisplayNameOf(pidl), "New Folder");
    for (int i = 2; folderName.Exists(); ++i)
        folderName.SetFullName(FString("New Folder (%d)", i));
    if (!CPathname::Create(folderName, false))
        throw CContextException("Unable to create a new folder here: ");

    // get the PIDL for the newly created folder
    PidlUtils::Pidl pidlNew;
#ifdef UNICODE
    const wchar_t * wszName = folderName.c_str();
#else
    wchar_t wszName[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, folderName.GetFullName(), -1, wszName, MAX_PATH);
#endif
    m_hresult = m_folder->ParseDisplayName(NULL, NULL, wszName, NULL, pidlNew, NULL);
    if (FAILED(m_hresult))
        throw CLabeledException(FString("Unable to get the PIDL for the new folder: 0x%X", m_hresult));

    // upgrade our interface so we can select & rename it
    CComQIPtr<IShellView2> sv2(m_shell_view);
    if (!sv2)
        throw CLabeledException("Unable to obtain the IShellView2 we need to rename the newly created folder.");

    // force it to see thew new folder
    sv2->Refresh();

    // select the new folder, and begin the rename process
    m_hresult = sv2->SelectAndPositionItem(pidlNew, SVSI_EDIT|SVSI_DESELECTOTHERS|SVSI_ENSUREVISIBLE|SVSI_POSITIONITEM, NULL);
    if (FAILED(m_hresult))
        throw CLabeledException(FString("Unable to select and position the new folder item: 0x%X", m_hresult));

Պատասխանները:


1

Shell թղթապանակները սովորաբար իրականացնում են IStorage ինտերֆեյսը, ուստի սա բավականին պարզ է: Օրինակ, հետևյալը աշխատասեղանին ստեղծում է «abcd» անունով թղթապանակ.

  CComPtr<IShellFolder> pDesktop;
  HRESULT hr = SHGetDesktopFolder(&pDesktop);
  if (FAILED(hr)) return;
  CComQIPtr<IStorage> pStorage(pDesktop);
  if (!pStorage) return;
  CComPtr<IStorage> dummy;
  hr = pStorage->CreateStorage(L"abcd", STGM_FAILIFTHERE, 0, 0, &dummy);
25.12.2009
  • Շնորհակալություն! Դա անելու համար COM-ը և Win32-ը խառնելը տարօրինակ էր թվում: Իհարկե, COM Shell-ի այս եղանակը կարող է ավարտվել CreateDirectory()-ին զանգով: լոլ ;) 29.12.2009

  • 2

    Այո, դուք կարող եք ստանալ IContextMenu և փնտրել ենթացանկեր, բայց ինչու անհանգստանալ, պարզապես զանգահարեք SHChangeNotify CreateDirectory-ին զանգահարելուց հետո

    20.11.2009
  • IContextMenu ստանալը թվում է, թե դա կարող է շատ օգտակար լինել տվյալ կեղևի տեսքով դիտման ընտրանքների ցանկը ստանալու համար (մանրամասներ, փոքր պատկերակներ և այլն): Ուզում եք ասել, որ ես կարող եմ փորձել հանել նոր թղթապանակ ստեղծելու հրամանը համատեքստի մենյուից և այն կանչել: Այո, եթե դա ի նկատի ունես, վատ գաղափար է թվում: Ես հույս ունեի ավելի շատ նման IfolderView::CreateObject()-ի կամ նմանների նման: 21.11.2009
  • Այո: Զանգահարեք SHChangeNotify-ին, քանի որ դա անելու ճիշտ ձևն է: IContextMenu-ում շրջելը լավ միջոց է ապահովելու ձեր ծրագրի ընդմիջումները Windows-ի հաջորդ տարբերակում: 21.11.2009

  • 3

    Win32 API-ի CreateDirectory ֆունկցիան կարծես «ճիշտ ճանապարհ» է: Համենայն դեպս, ես ավելի լավ բան չեմ կարող գտնել, և այստեղի պատասխաններն իրականում լույս չեն սփռում դա անելու ավելի լավ ճանապարհի վրա:

    01.12.2009
  • Դա աշխատում է միայն այն դեպքում, եթե դուք թղթապանակ եք ավելացնում ֆայլային համակարգին: 16.01.2021
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..