/* * ReactOS Explorer * * Copyright 2006 - 2007 Thomas Weidenmueller * 2015 Robert Naumann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "precomp.h" // TODO: Windows Explorer appears to be calling NewLinkHere / ConfigStartMenu directly for both items. VOID OnAddStartMenuItems(HWND hDlg) { WCHAR szPath[MAX_PATH]; if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_STARTMENU, NULL, 0, szPath))) { WCHAR szCommand[MAX_PATH] = L"appwiz.cpl,NewLinkHere "; if (SUCCEEDED(StringCchCatW(szCommand, _countof(szCommand), szPath))) ShellExecuteW(hDlg, L"open", L"rundll32.exe", szCommand, NULL, SW_SHOWNORMAL); } } VOID OnRemoveStartmenuItems(HWND hDlg) { ShellExecuteW(hDlg, L"open", L"rundll32.exe", L"appwiz.cpl,ConfigStartMenu", NULL, SW_SHOWNORMAL); } VOID OnAdvancedStartMenuItems() { WCHAR szPath[MAX_PATH]; if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_STARTMENU, NULL, 0, szPath))) { ShellExecuteW(NULL, L"explore", szPath, NULL, NULL, SW_SHOWNORMAL); } } VOID OnClearRecentItems() { WCHAR szPath[MAX_PATH], szFile[MAX_PATH]; WIN32_FIND_DATAW info; HANDLE hPath; if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_RECENT, NULL, 0, szPath))) { StringCchPrintfW(szFile, _countof(szFile), L"%s\\*.*", szPath); hPath = FindFirstFileW(szFile, &info); do { StringCchPrintfW(szFile, _countof(szFile), L"%s\\%s", szPath, info.cFileName); DeleteFileW(szFile); } while (FindNextFileW(hPath, &info)); FindClose(hPath); /* FIXME: Disable the button*/ } } INT_PTR CALLBACK CustomizeClassicProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: /* FIXME: Properly initialize the dialog (check whether 'clear' button must be disabled, for example) */ return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_CLASSICSTART_ADD: OnAddStartMenuItems(hwnd); break; case IDC_CLASSICSTART_REMOVE: OnRemoveStartmenuItems(hwnd); break; case IDC_CLASSICSTART_ADVANCED: OnAdvancedStartMenuItems(); break; case IDC_CLASSICSTART_CLEAR: OnClearRecentItems(); break; case IDOK: EndDialog(hwnd, IDOK); break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; } break; default: return FALSE; } return TRUE; } VOID ShowCustomizeClassic(HINSTANCE hInst, HWND hExplorer) { DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_CLASSICSTART_CUSTOMIZE), hExplorer, CustomizeClassicProc); }