介绍三个有趣的API

####PickIconDlg

相信给快捷方式指定过图标的朋友肯定看过一个这样的对话框吧,如果你看到过,你肯定已经知道了这个API是怎么一回事。这个API会弹出一个选择图标的窗口给你选择,确定后返回图标在资源中的索引值。这样你可以通过这个索引值和ExtractIcon函数获得这个图标的句柄。

20150827113011

示例代码如下:

1
2
3
4
5
6
7
8
9
10
int Index = 2;
const DWORD BuffSize = MAX_PATH;
TCHAR Path[BuffSize] = _T("c:\\windows\\system32\\shell32.dll");
const int Sel = PickIconDlg(NULL, Path, BuffSize, &Index);
if(Sel)
{
HMODULE hMod = ::LoadLibrary(Path);
HICON hIcon = ExtractIcon(hMod, Path, Index);
FreeLibrary(hMod);
}

####WNetConnectionDialog和WNetConnectionDialog1

这两个函数是帮助我们在程序中显示映射网络驱动器对话框的,虽然用的不多,但是也应该见到过它。这两个函数区别不大,只不过WNetConnectionDialog1比WNetConnectionDialog提供了更多的参数去设置。

20150827114516

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma comment(lib, "Mpr.lib")
CONNECTDLGSTRUCT condlg = { 0 };
condlg.cbStructure = sizeof(condlg);
condlg.hwndOwner = GetConsoleWindow();
condlg.dwFlags = CONNDLG_USE_MRU;
NETRESOURCE nr = { 0 };
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = NULL;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN;
condlg.lpConnRes = &nr;
const int RetVal = WNetConnectionDialog1(&condlg);

####SHOpenWithDialog

这个API所显示的对话框我们应该是最多见的,它显示了一个打开方式的对话框。不过有点可惜的是,XP并不支持这个API,我们只能将它用在Vista开始的系统上。

20150827115225

示例代码如下:

1
2
3
4
OPENASINFO Info = { 0 };
Info.pcszFile = _T("C:\\Windows\\win.ini");
Info.oaifInFlags = OAIF_EXEC | OAIF_ALLOW_REGISTRATION;
SHOpenWithDialog(NULL, &Info);

Tips

OleFileView 查看Ole文件数据结构的工具

OleFileView是一个查看结构化存储文件的工具,我们熟悉的Ole存储的文件就是这种格式,虽然很老了,但是依旧被广泛使用,例如老版本Office的文件doc,xls等,包括msi,jumplist等,都是采用的这种格式。
所以我也就抽了点时间研究了一下这个数据结构,可以说这就是个小型的文件系统,虽然比不上NTFS,但是对于一般的存储可以说是小菜一碟。

20150803003316

下载:OleFileView.zip

Tips