diff --git a/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild b/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild
new file mode 100644
index 00000000000..ddbcf793712
--- /dev/null
+++ b/rosapps/tests/Imagelistviewer/imagelistviewer.rbuild
@@ -0,0 +1,12 @@
+
+ 0x0501
+ 0x0501
+
+ .
+ kernel32
+ user32
+ setupapi
+ comctl32
+ main.c
+ res.rc
+
diff --git a/rosapps/tests/Imagelistviewer/main.c b/rosapps/tests/Imagelistviewer/main.c
new file mode 100644
index 00000000000..043171b786f
--- /dev/null
+++ b/rosapps/tests/Imagelistviewer/main.c
@@ -0,0 +1,145 @@
+#include
+#include
+#include
+#include "resource.h"
+
+typedef BOOL (WINAPI * SH_GIL_PROC)(HIMAGELIST *phLarge, HIMAGELIST *phSmall);
+typedef BOOL (WINAPI * FII_PROC)(BOOL fFullInit);
+
+/*** Shell32 undoc'd functions ***/
+ /* Shell_GetImageLists @71 */
+ /* FileIconInit @660 */
+
+BOOL
+DisplayImageList(HWND hwnd,
+ UINT uID)
+{
+ HWND hLV;
+ SP_CLASSIMAGELIST_DATA ImageListData;
+ LV_ITEM lvItem;
+ TCHAR Buf[6];
+ INT ImageListCount = -1;
+ INT i = 0;
+
+ hLV = GetDlgItem(hwnd, IDC_LSTVIEW);
+ (void)ListView_DeleteAllItems(hLV);
+
+ if (uID == IDC_SYSTEM)
+ {
+ HIMAGELIST hLarge, hSmall;
+ HMODULE hShell32;
+ SH_GIL_PROC Shell_GetImageLists;
+ FII_PROC FileIconInit;
+
+ hShell32 = LoadLibrary(_T("shell32.dll"));
+ if(hShell32 == NULL)
+ return FALSE;
+
+ Shell_GetImageLists = (SH_GIL_PROC)GetProcAddress(hShell32, (LPCSTR)71);
+ FileIconInit = (FII_PROC)GetProcAddress(hShell32, (LPCSTR)660);
+
+ if(Shell_GetImageLists == NULL || FileIconInit == NULL)
+ {
+ FreeLibrary(hShell32);
+ return FALSE;
+ }
+
+ FileIconInit(TRUE);
+
+ Shell_GetImageLists(&hLarge, &hSmall);
+
+ ImageListCount = ImageList_GetImageCount(hSmall);
+
+ (void)ListView_SetImageList(hLV,
+ hSmall,
+ LVSIL_SMALL);
+
+ FreeLibrary(hShell32);
+ }
+ else if (uID == IDC_DEVICE)
+ {
+ ImageListData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA);
+ SetupDiGetClassImageList(&ImageListData);
+
+ ImageListCount = ImageList_GetImageCount(ImageListData.ImageList);
+
+ (void)ListView_SetImageList(hLV,
+ ImageListData.ImageList,
+ LVSIL_SMALL);
+ }
+ else
+ return FALSE;
+
+ lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
+
+ while (i <= ImageListCount)
+ {
+ lvItem.iItem = i;
+ lvItem.iSubItem = 0;
+ lvItem.pszText = _itot(i, Buf, 10);
+ lvItem.iImage = i;
+
+ (void)ListView_InsertItem(hLV, &lvItem);
+
+ i++;
+ }
+
+ return TRUE;
+}
+
+
+BOOL CALLBACK
+DlgProc(HWND hwnd,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ DisplayImageList(hwnd, IDC_SYSTEM);
+ return TRUE;
+
+ case WM_CLOSE:
+ EndDialog(hwnd, 0);
+ return TRUE;
+
+ case WM_COMMAND:
+ {
+ switch(LOWORD(wParam))
+ {
+ case IDOK:
+ EndDialog(hwnd, 0);
+ return TRUE;
+
+ case IDC_SYSTEM:
+ DisplayImageList(hwnd, IDC_SYSTEM);
+ return TRUE;
+
+ case IDC_DEVICE:
+ DisplayImageList(hwnd, IDC_DEVICE);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+int WINAPI
+WinMain(HINSTANCE hThisInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpszArgument,
+ int nCmdShow)
+{
+ INITCOMMONCONTROLSEX icex;
+
+ icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
+ icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
+ InitCommonControlsEx(&icex);
+
+ return DialogBox(hThisInstance,
+ MAKEINTRESOURCE(IDD_IMGLST),
+ NULL,
+ (DLGPROC)DlgProc);
+}
diff --git a/rosapps/tests/Imagelistviewer/res.rc b/rosapps/tests/Imagelistviewer/res.rc
new file mode 100644
index 00000000000..161c59a4300
--- /dev/null
+++ b/rosapps/tests/Imagelistviewer/res.rc
@@ -0,0 +1,14 @@
+#include
+#include
+#include "resource.h"
+
+IDD_IMGLST DIALOGEX 6,6,303,216
+CAPTION "Imagelist Viewer"
+FONT 8, "MS Sans Serif", 0, 0
+STYLE WS_BORDER | WS_VISIBLE | WS_SYSMENU
+BEGIN
+ CONTROL "", IDC_LSTVIEW, "SysListView32", WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_LIST | LVS_SMALLICON | LVS_SHAREIMAGELISTS, 0, 0, 302, 200
+ DEFPUSHBUTTON "System IL", IDC_SYSTEM, 2, 202, 54, 13
+ PUSHBUTTON "Device IL", IDC_DEVICE, 60, 202, 54, 13
+ PUSHBUTTON "Close", IDOK, 248, 202, 54, 13
+END
diff --git a/rosapps/tests/Imagelistviewer/resource.h b/rosapps/tests/Imagelistviewer/resource.h
new file mode 100644
index 00000000000..6875d1deb5a
--- /dev/null
+++ b/rosapps/tests/Imagelistviewer/resource.h
@@ -0,0 +1,4 @@
+#define IDD_IMGLST 1000
+#define IDC_LSTVIEW 1001
+#define IDC_SYSTEM 1002
+#define IDC_DEVICE 1003
diff --git a/rosapps/tests/directory.rbuild b/rosapps/tests/directory.rbuild
index e2d2f1a5478..e9de78e18e3 100644
--- a/rosapps/tests/directory.rbuild
+++ b/rosapps/tests/directory.rbuild
@@ -112,6 +112,9 @@
+
+
+