[TRANSLATION][CLIPBRD] Italian translation implemented (#344)
[reactos.git] / base / shell / filebrowser / filebrowser.c
index d7e22d9..c6da047 100644 (file)
 #include <windows.h>
 #include <shobjidl.h>
 #include <shlobj.h>
+#include <shlwapi.h>
+#include <stdio.h>
 
-typedef HRESULT (WINAPI *SH_OPEN_NEW_FRAME)(LPITEMIDLIST pidl, IUnknown *paramC, long param10, long param14);
+#include <browseui_undoc.h>
 
 int _tmain(int argc, _TCHAR* argv[])
 {
-    WCHAR root[MAX_PATH];
-    HRESULT hr;
-    LPSHELLFOLDER pDesktopFolder = NULL;
-    LPITEMIDLIST pidlRoot = NULL;
-    typedef HRESULT(WINAPI *SH_OPEN_NEW_FRAME)(LPITEMIDLIST pidl, IUnknown *paramC, long param10, long param14);
-    SH_OPEN_NEW_FRAME SHOpenNewFrame;
-
-    HMODULE hBrowseui = LoadLibraryW(L"browseui.dll");
-
-    if (!hBrowseui)
-        return 1;
-
+    EXPLORER_CMDLINE_PARSE_RESULTS parseResults = { 0 };
 
-    if (argc < 2)
+    if (SHExplorerParseCmdLine(&parseResults))
     {
-        SH_OPEN_NEW_FRAME SHOpenNewFrame = (SH_OPEN_NEW_FRAME) GetProcAddress(hBrowseui, (LPCSTR) 103);
-        LPITEMIDLIST pidlDrives;
-        SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidlDrives);
-        SHOpenNewFrame((LPITEMIDLIST) pidlDrives, NULL, 0, 0);
+        parseResults.dwFlags |= SH_EXPLORER_CMDLINE_FLAG_SEPARATE;
+        return SHCreateFromDesktop(&parseResults);
     }
-    else
-    {
-        /* A shell is already loaded. Parse the command line arguments
-        and unless we need to do something specific simply display
-        the desktop in a separate explorer window */
-        /* FIXME */
-
-        /* Commandline switches:
-        *
-        * /n               Open a new window, even if an existing one still exists.
-        * /e               Start with the explorer sidebar shown.
-        * /root,<object>   Open a window for the given object path.
-        * /select,<object> Open a window with the given object selected.
-        */
-
-        /* FIXME: Do it right */
-        WCHAR* tmp = wcsstr(argv[1], L"/root,");
-        if (tmp)
-        {
-            WCHAR* tmp2;
 
-            tmp += 6; // skip to beginning of path
-            tmp2 = wcschr(tmp, L',');
+    if (parseResults.strPath)
+        SHFree(parseResults.strPath);
 
-            if (tmp2)
-            {
-                wcsncpy(root, tmp, tmp2 - tmp);
-            }
-            else
-            {
-                wcscpy(root, tmp);
-            }
-        }
-        else
-        {
-            wcscpy(root, argv[1]);
-        }
+    if (parseResults.pidlPath)
+        ILFree(parseResults.pidlPath);
 
-        if (root[0] == L'"')
-        {
-            int len = wcslen(root) - 2;
-            wcsncpy(root, root + 1, len);
-            root[len] = 0;
-        }
+    if (parseResults.pidlRoot)
+        ILFree(parseResults.pidlRoot);
 
-        if (wcslen(root) > 0)
-        {
-            LPITEMIDLIST  pidl;
-            ULONG         chEaten;
-            ULONG         dwAttributes;
-
-            if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
-            {
-                hr = pDesktopFolder->lpVtbl->ParseDisplayName(pDesktopFolder,
-                    NULL,
-                    NULL,
-                    root,
-                    &chEaten,
-                    &pidl,
-                    &dwAttributes);
-                if (SUCCEEDED(hr))
-                {
-                    pidlRoot = pidl;
-                }
-            }
-        }
-
-        if (!pidlRoot)
-        {
-            hr = SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidlRoot);
-            if (FAILED(hr))
-                return 0;
-        }
-        
-        SHOpenNewFrame = (SH_OPEN_NEW_FRAME) GetProcAddress(hBrowseui, (LPCSTR) 103);
-
-        hr = SHOpenNewFrame(pidlRoot, (IUnknown*) pDesktopFolder, 0, 0);
-        if (FAILED(hr))
-            return 0;
-    }
-
-    /* FIXME: we should wait a bit here and see if a window was created. If not we should exit this process. */
-    Sleep(1000);
-
-    ExitThread(0);
+    return 0;
 }
-