📄 cb199910dc_f.asp.htm
字号:
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>LPITEMIDLIST
GetNextItem(LPITEMIDLIST pidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code><b> unsigned</b> <b>short</b> nLen = pidl->mkid.cb; </span></p>
<p class=Code><span class=Code> <b> if</b>
(nLen == 0) <b>return</b> NULL; </span></p>
<p class=Code><span class=Code> <b> return</b>
(LPITEMIDLIST)((LPBYTE)pidl + nLen); </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: PathFromPIDL()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Returns an AnsiString path of a PIDL</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl -- PIDL to return path
for</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>AnsiString
PathFromPIDL(LPITEMIDLIST lpidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code><b> char</b> path[MAX_PATH]; </span></p>
<p class=Code><span class=Code> SHGetPathFromIDList(lpidl, path); </span></p>
<p class=Code><span class=Code> <b> return</b>
AnsiString(path); </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: PathFromPIDL()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Returns an AnsiString path of a PIDL</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl -- PIDL to return path
for</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>LPITEMIDLIST
PIDLFromPath(LPSHELLFOLDER lpsf, AnsiString Path) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code><b> if</b> (Path[Path.Length()] != '\\') Path
= Path + "\\"; </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidl; </span></p>
<p class=Code><span class=Code> <b> wchar_t</b>
WPath[MAX_PATH]; </span></p>
<p class=Code><span class=Code> StringToWideChar(Path, WPath, MAX_PATH); </span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>long</b> eaten; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(lpsf->ParseDisplayName(NULL, NULL, WPath, </span></p>
<p class=Code><span class=Code> &eaten,
&lpidl, NULL))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> <b> return</b>
lpidl; </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> return</b>
NULL; </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: FreePIDL()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Uses the shell allocator to free a previously</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// allocated PIDL</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl -- PIDL to free</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><b>void</b>
FreePIDL(LPITEMIDLIST lpidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> LPMALLOC lpMalloc; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(SHGetMalloc(&lpMalloc))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> lpMalloc->Free(lpidl); </span></p>
<p class=Code><span class=Code> lpMalloc->Release();</span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: GetPIDLSize()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Returns the number of bytes occupied by a PIDL</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: LPITEMIDLIST pidl -- PIDL to query size
of</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><b>unsigned</b>
<b>short</b> GetPIDLSize(LPITEMIDLIST
lpidl) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> <b> unsigned</b>
<b>short</b> cb = 0; </span></p>
<p class=Code><span class=Code> <b> while</b>
(lpidl) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> cb = (<b>unsigned</b>
<b>short</b>)(cb + lpidl->mkid.cb); </span></p>
<p class=Code><span class=Code> lpidl = GetNextItem(lpidl); </span></p>
<p class=Code><span class=Code> } </span></p>
<p class=Code><span class=Code> <b> return</b>
(<b>unsigned</b> <b>short</b>)(cb + 2); </span></p>
<p class=Code><span class=Code>}</span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
---------------------------------------------------------------------------</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// =====================================================================</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Function: CreatePIDL()</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Synopsis: Uses the shell allocator to allocate a block of memory</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// of a given size, then returns a pointer to this memory</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>// Parameters: unsigned short size -- bytes of memory
to allocate</span></i></span></p>
<p class=Code><span class=Code><i><span Class=CodeBlue>//
=====================================================================</span></i></span></p>
<p class=Code><span class=Code> </span></p>
<p class=Code><span class=Code>LPITEMIDLIST
CreatePIDL(<b>unsigned</b> <b
style='mso-bidi-font-weight:normal'>short</b> size) </span></p>
<p class=Code><span class=Code>{</span></p>
<p class=Code><span class=Code> LPITEMIDLIST lpidlResult; </span></p>
<p class=Code><span class=Code> LPMALLOC lpMalloc; </span></p>
<p class=Code><span class=Code> <b> if</b>
(SUCCEEDED(SHGetMalloc(&lpMalloc))) </span></p>
<p class=Code><span class=Code> { </span></p>
<p class=Code><span class=Code> lpidlResult = (LPITEMIDLIST)lpMalloc->Alloc(size); </span></p>
<p class=Code><span class=Code> <b> if</b>
(lpidlResult) </span></p>
<p class=Code><span class=Code> ZeroMemory(lpidlResult, <b
style='mso-bidi-font-weight:normal'>sizeof</b>(size)); </span></p>
<p class=Code><span class=Code> lpMalloc->Release();</span></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -