atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
lafe @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
lafe @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
lafe @ ウィキ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • lafe @ ウィキ
  • Shell Interfaces

lafe @ ウィキ

Shell Interfaces

最終更新:2012年06月05日 12:14

lafe

- view
管理者のみ編集可
編集
  • IShellFolder
    • GetDisplayNameOf
  • IFolderView2
    • GetSelectedItem
  • 列挙型
    • SHGDNF
    • SIGDN
  • SH系
    • ILCombine
    • ILFree
    • CoTaskMemFree
    • ILRemoveLastID
    • SHCreateItemFromIDList
    • SHGetNameFromIDList
    • SHGetPathFromIDList
    • SHILCreateFromPath
    • SHCreateShellItemArrayFromDataObject
    • SHGetIDListFromObject
    • SHDoDragDrop
    • ILIsEqual Function
  • etc
    • OLE Drag&Dropでのパスの取り出し方



IShellFolder


GetDisplayNameOf

指定されたオブジェクトファイルやサブフォルダの表示名を取得します
HRESULT GetDisplayNameOf(
  [in]   PCUITEMID_CHILD pidl,
  [in]   SHGDNF uFlags,
  [out]  STRRET *pName
);
[in] PCUITEMID_CHILD pidl: 親フォルダからの相対的なITEMIDLIST
[in] SHGDNF uFlags: 名前表示の種類を要求するために使用。可能な値のリストについては、SHGDNF列挙型をご覧ください。



IFolderView2


GetSelectedItem

現在選択されたアイテムのインデックスを返します
HRESULT GetSelectedItem(
  [in]   int iStart,
  [out]  int *piItem
);


列挙型

引数に指定したりするやつ

SHGDNF

typedef enum _SHGDNF {
  SHGDN_NORMAL          = 0,
  SHGDN_INFOLDER        = 0x1,
  SHGDN_FOREDITING      = 0x1000,
  SHGDN_FORADDRESSBAR   = 0x4000,
  SHGDN_FORPARSING      = 0x8000 
} SHGDNF;
SHGDN_NORMAL : エクスプローラーに表示されている名前
SHGDN_FORADDRESSBAR : アドレスバーコンボボックスに表示されている名前
SHGDN_FORPARSING : フルパス?



SIGDN

typedef enum _SIGDN {
  SIGDN_NORMALDISPLAY                 = 0x00000000,
  SIGDN_PARENTRELATIVEPARSING         = (int)0x80018001,
  SIGDN_DESKTOPABSOLUTEPARSING        = (int)0x80028000,
  SIGDN_PARENTRELATIVEEDITING         = (int)0x80031001,
  SIGDN_DESKTOPABSOLUTEEDITING        = (int)0x8004c000,
  SIGDN_FILESYSPATH                   = (int)0x80058000,
  SIGDN_URL                           = (int)0x80068000,
  SIGDN_PARENTRELATIVEFORADDRESSBAR   = (int)0x8007c001,
  SIGDN_PARENTRELATIVE                = (int)0x80080001 
} SIGDN;

SIGDN_NORMALDISPLAY : この名前は一般的にユーザーへの表示に最適です。







SH系


ILCombine

PIDLIST_ABSOLUTE ILCombine(
  __in  PCIDLIST_ABSOLUTE pidl1,
  __in  PCUIDLIST_RELATIVE pidl2
);
pidl1とpidl2の二つのアイテムIDリストを結合します
使い終わったらILFreeなどで解放する必要があります

ILFree

void ILFree(
  __in  PIDLIST_RELATIVE pidl
);
アイテムIDリストを解放します
When using Windows 2000 or later, use CoTaskMemFree rather than ILFree.
と書いてるがどうなんだろう

CoTaskMemFree

void CoTaskMemFree(
  __in_opt  LPVOID pv
);


ILRemoveLastID

ITEMIDLIST構造体から最後のSHITEMID構造体を削除します。
BOOL ILRemoveLastID(
  __inout  PUIDLIST_RELATIVE pidl
);


SHCreateItemFromIDList

アイテムIDリストからIShellItemインターフェイスを取得します
HRESULT SHCreateItemFromIDList(
  __in   PCIDLIST_ABSOLUTE pidl,
  __in   REFIID riid,
  __out  void **ppv
);


SHGetNameFromIDList

アイテムIDリストから名前などを取得します
HRESULT SHGetNameFromIDList(
  __in   PCIDLIST_ABSOLUTE pidl,
  __in   SIGDN sigdnName,
  __out  PWSTR *ppszName
);

__in SIGDN sigdnName : 表示名のタイプを取得するためにSIGDN列挙の値を指定します。

使い終わったらppszNameをCoTaskMemFreeで解放してください。


SHGetPathFromIDList

アイテムIDリストからファイルシステムパスに変換します
BOOL SHGetPathFromIDList(
  __in   PCIDLIST_ABSOLUTE pidl,
  __out  LPTSTR pszPath
);

__out LPTSTR pszPath : MAX_PATH以上のバッファのサイズが必要です


SHILCreateFromPath

絶対パスからアイテムIDリストを取得します
HRESULT SHILCreateFromPath(
  __in     LPCWSTR pszPath,
  __out    PIDLIST_ABSOLUTE *ppidl,
  __inout  DWORD *rgflnOut
);


SHCreateShellItemArrayFromDataObject

IDataObjectからIShellItemArrayを作ります
HRESULT SHCreateShellItemArrayFromDataObject(
  __in   IDataObject *pdo,
  __in   REFIID riid,
  __out  void **ppv
);

SHGetIDListFromObject

IShellItem などからITEMIDLISTを得られます
HRESULT SHGetIDListFromObject(
  __in   IUnknown *punk,
  __out  PIDLIST_ABSOLUTE *ppidl
);

SHDoDragDrop

ドラッグアンドドロップ操作の実行。必要に応じて、ドラッグイメージとドラッグソースの作成をします。
HRESULT SHDoDragDrop(
  __in   HWND hwnd,
  __in   IDataObject *pdtobj,
  __in   IDropSource *pdsrc,
  __in   DWORD dwEffect,
  __out  DWORD *pdwEffect
);


ILIsEqual Function

二つのアイテムIDリストを比較します
BOOL ILIsEqual(
  __in  PCIDLIST_ABSOLUTE pidl1,
  __in  PCIDLIST_ABSOLUTE pidl2
);






etc


OLE Drag&Dropでのパスの取り出し方

IDataObjectからのパスの取り出し方と言うべきか
pida->cidlに取り出せるアイテムIDリストの数が入っている
GetPIDLFolderやGetPIDLItemで取ったアイテムIDリストは解放してはいけない
#define GetPIDLFolder(pida) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[0])
	#define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[i+1])

OnDragEnter(IDataObject *pDataObject, DWORD dwKeyState, CPoint point)
{
	HRESULT	hr;
	FORMATETC	fmt;
	fmt.cfFormat= RegisterClipboardFormat(CFSTR_SHELLIDLIST);
	fmt.ptd		= NULL;
	fmt.dwAspect= DVASPECT_CONTENT;
	fmt.lindex	= -1;
	fmt.tymed	= TYMED_HGLOBAL;
 
	STGMEDIUM	medium;
	hr = pDataObject->GetData(&fmt, &medium)
	if (hr == S_OK) {
		LPIDA pida = (LPIDA)::GlobalLock(medium.hGlobal);
		LPCITEMIDLIST pParentidl = GetPIDLFolder(pida);
		LPCITEMIDLIST pidl		= GetPIDLItem(pida, 0);
		LPITEMIDLIST pCombineidl = ::ILCombine(pParentidl, pidl);
 
		CString str = PidlToString(pCombineidl);	// パスが取れる
		::ILFree(pCombineidl);
 
		::GlobalUnlock(medium.hGlobal);
		::ReleaseStgMedium(&medium);
	} else {
		ATLASSERT(FALSE);
	}
}
 
「Shell Interfaces」をウィキ内検索
LINE
シェア
Tweet
lafe @ ウィキ
記事メニュー
メニュー
  • トップページ

作成したソフトウェア
  • unDonut
    • 更新履歴
    • 既知のバグ
    • unDonutScript

  • ExpTabBar

  • SetDefaultAudioDevice

  • Proxydomo
    • 詳細
    • SSLフィルタリング
    • Chromium系列のブラウザでSSLフィルタリングが利用できない
    • Proxydomo - English edition

  • ImageArrangement

  • TTBase拡張
    • ファイルダイアログ拡張10
    • ChangeCaretColor

プログラムtip
  • C++
    • Tip



合計: -
今日: -
昨日: -


記事メニュー2
何かあれば【 こちら 】まで問い合わせください

更新履歴

取得中です。
人気記事ランキング
  1. Proxydomo - English edition
もっと見る
最近更新されたページ
  • 1930日前

    メニュー
  • 1930日前

    ExpTabBar
  • 1930日前

    ExpTabBar old
  • 2272日前

    Proxydomo
  • 3009日前

    Chromium系列のブラウザでSSLフィルタリングが利用できない
  • 3054日前

    FileDlgHack
  • 3089日前

    右メニュー
  • 3196日前

    proxydomo_detail
  • 3424日前

    Proxydomo - English edition
  • 3514日前

    SetDefaultAudioDevice
もっと見る
人気記事ランキング
  1. Proxydomo - English edition
もっと見る
最近更新されたページ
  • 1930日前

    メニュー
  • 1930日前

    ExpTabBar
  • 1930日前

    ExpTabBar old
  • 2272日前

    Proxydomo
  • 3009日前

    Chromium系列のブラウザでSSLフィルタリングが利用できない
  • 3054日前

    FileDlgHack
  • 3089日前

    右メニュー
  • 3196日前

    proxydomo_detail
  • 3424日前

    Proxydomo - English edition
  • 3514日前

    SetDefaultAudioDevice
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. AviUtl2のWiki
  7. Dark War Survival攻略
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 検索してはいけない言葉 @ ウィキ
  7. モンスター烈伝オレカバトル2@wiki
  8. 機動戦士ガンダム EXTREME VS.2 OVERBOOST wiki
  9. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. アフロディテ - オレカバトル アプリ版 @ ウィキ
  3. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  4. Trickster - ストグラ まとめ @ウィキ
  5. ギャング - ストグラ まとめ @ウィキ
  6. 暦家 - ストグラ まとめ @ウィキ
  7. shade - 初音ミク Wiki
  8. グランツーリスモ7/収録車種 - グランツーリスモWiki
  9. ロスサントス救急救命隊 - ストグラ まとめ @ウィキ
  10. MOZU - ストグラ まとめ @ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.