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. SetDefaultAudioDevice
  2. Proxydomo
  3. ImageArrangement
  4. Proxydomo - English edition
  5. ExpTabBar old
  6. SSLフィルタリング
  7. TEMP
  8. C++
  9. unDonutHistory
もっと見る
最近更新されたページ
  • 2023日前

    メニュー
  • 2023日前

    ExpTabBar
  • 2023日前

    ExpTabBar old
  • 2365日前

    Proxydomo
  • 3102日前

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

    FileDlgHack
  • 3182日前

    右メニュー
  • 3289日前

    proxydomo_detail
  • 3518日前

    Proxydomo - English edition
  • 3607日前

    SetDefaultAudioDevice
もっと見る
人気記事ランキング
  1. SetDefaultAudioDevice
  2. Proxydomo
  3. ImageArrangement
  4. Proxydomo - English edition
  5. ExpTabBar old
  6. SSLフィルタリング
  7. TEMP
  8. C++
  9. unDonutHistory
もっと見る
最近更新されたページ
  • 2023日前

    メニュー
  • 2023日前

    ExpTabBar
  • 2023日前

    ExpTabBar old
  • 2365日前

    Proxydomo
  • 3102日前

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

    FileDlgHack
  • 3182日前

    右メニュー
  • 3289日前

    proxydomo_detail
  • 3518日前

    Proxydomo - English edition
  • 3607日前

    SetDefaultAudioDevice
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. カリヨン時計@wiki
  2. バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. シュガードール情報まとめウィキ
  4. モンスター烈伝オレカバトル2@wiki
  5. トリコ総合データベース
  6. cookie clicker 日本語wiki
  7. アサルトリリィ wiki
  8. ロックマンエグゼまとめ@ ウィキ
  9. ファイアーエムブレム用語辞典
  10. モンスター烈伝オレカバトル@wiki
もっと見る
人気Wikiランキング

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

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

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

  1. MADTOWNGTAまとめwiki
  2. MadTown GTA (Beta) まとめウィキ
  3. ステラソラwiki
  4. 首都圏駅メロwiki
  5. まどドラ攻略wiki
  6. Last Z: Survival Shooter @ ウィキ
  7. ちいぽけ攻略
  8. シュガードール情報まとめウィキ
  9. ソニックレーシング クロスワールド 攻略@ ウィキ
  10. 戦国ダイナスティ攻略Wiki@ウィキ
もっと見る
全体ページランキング

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

  1. Pokémon LEGENDS Z-A - アニヲタWiki(仮)
  2. 破壊神マハデーヴァ - モンスター烈伝オレカバトル2@wiki
  3. 参加者一覧 - MADTOWNGTAまとめwiki
  4. カラスバ(ポケモン) - アニヲタWiki(仮)
  5. 真崎杏子 - 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  6. XVI - MADTOWNGTAまとめwiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. ブラックマジシャンガールのエロ動画 - イナズマイレブンの人気投票で五条さんを一位にするwiki 五条さんおめでとう
  9. 【移転】Miss AV 見れない Missav.wsが見れない?!MissAV新URLはここ!無料で見れるミラーサイト!閉鎖・終了してない!missav.ai - ホワイトハッカー研究所
  10. angler - MADTOWNGTAまとめwiki
もっと見る

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

2019 AtWiki, Inc.