ReactOS 0.4.16-dev-980-g00983aa
CSearchBar.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Search Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Search UI
5 * COPYRIGHT: Copyright 2019 Brock Mammen
6 */
7
8#include "CSearchBar.h"
9#include <psdk/wingdi.h>
10#include <commoncontrols.h>
11#include <../browseui.h>
12#include <shellapi.h>
13#include <exdispid.h>
14
16
17#if 1
18#undef UNIMPLEMENTED
19
20#define UNIMPLEMENTED DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__)
21#endif
22
23static BOOL IsWindowChildOf(const HWND hNeedle, const HWND hRoot)
24{
25 if (hNeedle != hRoot)
26 {
27 for (HWND hParent = hNeedle; hParent;)
28 {
29 hParent = GetParent(hParent);
30 if (hParent == hRoot)
31 return TRUE;
32 }
33 }
34 return FALSE;
35}
36
38{
39 int signedCount;
40 CComQIIDPtr<I_ID(IFolderView)> pFV(pSV);
41 if (pFV && SUCCEEDED(pFV->ItemCount(SVGIO_ALLVIEW, &signedCount)))
42 return signedCount;
43 UINT unsignedCount;
44 CComQIIDPtr<I_ID(IShellFolderView)> pSFV(pSV);
45 if (pSFV && SUCCEEDED(pSFV->GetObjectCount(&unsignedCount)))
46 return unsignedCount;
47 return 0;
48}
49
50
52{
57};
58enum { SPECIAL_BROWSE = 42 };
59
61 0, SPECIAL_BROWSE, CLSID_FindFolder, 0 };
62
64{
65 if (pidl && pidl->mkid.cb == FIELD_OFFSET(SPECIALFINDITEMID, Terminator))
66 {
67 SPECIALFINDITEMID *pSpecial = (SPECIALFINDITEMID*)pidl;
68 if (pSpecial->Type == g_pidlBrowseDir.Type && pSpecial->Cls == g_pidlBrowseDir.Cls &&
69 ILIsEmpty(ILGetNext(pidl)))
70 {
71 return pSpecial->Id;
72 }
73 }
74 return 0;
75}
76
78{
79 if (GetSpecial(pidl))
80 return E_FAIL;
81
82 PCUITEMID_CHILD pidlChild;
84 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
85 return SUCCEEDED(hr) ? psf->BindToObject(pidlChild, NULL, riid, ppv) : hr;
86}
87
89{
92 return SUCCEEDED(hr) ? IUnknown_GetClassID(psf, pCLSID) : hr;
93}
94
96{
97 while (pItems)
98 {
99 LOCATIONITEM *pNext = pItems->pNext;
101 pItems = pNext;
102 }
103}
104
106{
107 const SIZE_T cch = lstrlenW(szPath) + 1;
109 if (p)
110 {
111 p->pNext = NULL;
112 CopyMemory(p->szPath, szPath, cch * sizeof(*szPath));
113 }
114 return p;
115}
116
117template<class T> static LOCATIONITEM* BuildLocationList(T **rgszPaths, SIZE_T nCount)
118{
119 LOCATIONITEM *pStart = NULL, *pPrev = NULL;
120 for (SIZE_T i = 0; i < nCount; ++i)
121 {
122 LOCATIONITEM *pItem = CreateLocationListItem(rgszPaths[i]);
123 if (!pStart)
124 pStart = pItem;
125 else if (pPrev)
126 pPrev->pNext = pItem;
127 pPrev = pItem;
128 if (!pItem)
129 {
130 FreeList(pStart);
131 return NULL;
132 }
133 }
134 return pStart;
135}
136
138{
139 SIZE_T nCount = 0;
140 PCWSTR rgszLocations[2];
141 WCHAR szUser[MAX_PATH], szCommon[MAX_PATH];
142
143 rgszLocations[nCount] = szUser;
145 rgszLocations[nCount] = szCommon;
147 return BuildLocationList(rgszLocations, nCount);
148}
149
151{
152 PCWSTR rgszLocations[26];
153 WCHAR rgszDrives[_countof(rgszLocations)][4];
154 UINT nCount = 0;
155 for (UINT i = 0, fDrives = GetLogicalDrives(); i < _countof(rgszLocations); ++i)
156 {
157 if (fDrives & (1 << i))
158 {
159 rgszDrives[nCount][0] = 'A' + i;
160 rgszDrives[nCount][1] = ':';
161 rgszDrives[nCount][2] = '\\';
162 rgszDrives[nCount][3] = UNICODE_NULL;
163 UINT fType = GetDriveTypeW(rgszDrives[nCount]);
164 if (fType == DRIVE_FIXED || fType == DRIVE_RAMDISK)
165 {
166 rgszLocations[nCount] = rgszDrives[nCount];
167 nCount++;
168 }
169 }
170 }
171 return BuildLocationList(rgszLocations, nCount);
172}
173
175 m_pSite(NULL),
176 m_RealItemIndex(0),
177 m_bVisible(FALSE)
178{
179}
180
182{
183}
184
186{
187 HKEY hkey;
188 DWORD dwType;
189 DWORD size = sizeof(DWORD);
191 DWORD SearchHiddenValue = 0;
192
193 result = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", 0, KEY_QUERY_VALUE, &hkey);
194 if (result == ERROR_SUCCESS)
195 {
196 if (RegQueryValueEx(hkey, L"SearchHidden", NULL, &dwType, (LPBYTE)&SearchHiddenValue, &size) == ERROR_SUCCESS)
197 {
198 if ((dwType != REG_DWORD) || (size != sizeof(DWORD)))
199 {
200 ERR("RegQueryKey for \"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SearchHidden\" returned error(s).\n");
201 SearchHiddenValue = 1;
202 }
203 else
204 {
205 TRACE("SearchHidden is '%d'.\n", SearchHiddenValue);
206 }
207 }
208 else
209 {
210 ERR("RegQueryKey for \"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SearchHidden\" Failed.\n");
211 }
212 RegCloseKey(hkey);
213 }
214 else
215 ERR("RegOpenKey for \"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\" Failed.\n");
216
217 if (SearchHiddenValue != 0)
219 else
221
223
225 CComPtr<IImageList> pImageList;
226 HRESULT hResult = SHGetImageList(SHIL_SMALL, IID_PPV_ARG(IImageList, &pImageList));
227 SendMessage(hCombobox, CBEM_SETIMAGELIST, 0, FAILED_UNEXPECTEDLY(hResult) ? 0 : reinterpret_cast<LPARAM>(pImageList.p));
228
231 HWND hEditControl = reinterpret_cast<HWND>(SendMessage(hCombobox, CBEM_GETEDITCONTROL, 0, 0));
232 hResult = CAddressEditBox_CreateInstance(IID_PPV_ARG(IAddressEditBox, &m_AddressEditBox));
233 if (FAILED_UNEXPECTEDLY(hResult))
234 return FALSE;
235
236 hResult = m_AddressEditBox->Init(hCombobox, hEditControl, 0, m_pSite);
237 if (FAILED_UNEXPECTEDLY(hResult))
238 return FALSE;
239
240 // Subscribe to navigation events
241 CComPtr<IShellBrowser> pShellBrowser;
243 DWORD dwAdviseCookie;
244 if (SUCCEEDED(hResult))
245 AtlAdvise(pShellBrowser, static_cast<IDispatch *>(this), DIID_DWebBrowserEvents, &dwAdviseCookie);
246
247 // Invoke the navigate event in case a search results folder is already open
248 DISPPARAMS params = {0};
250
251 return TRUE;
252}
253
254
255// *** ATL event handlers ***
257{
258 IUnknown_OnFocusChangeIS(m_pSite, static_cast<IDeskBand *>(this), TRUE);
259 bHandled = FALSE;
260 return TRUE;
261}
262
264{
265 HRESULT hr;
266 CComPtr<IShellBrowser> pShellBrowser;
267 if (!ppShellBrowser)
268 ppShellBrowser = &pShellBrowser;
269 if (!*ppShellBrowser)
270 {
273 return hr;
274 }
275
276 CComPtr<IShellView> pShellView;
277 hr = (*ppShellBrowser)->QueryActiveShellView(&pShellView);
278 if (FAILED(hr) || !pShellView)
279 return hr;
280
281 CComPtr<IFolderView> pFolderView;
282 hr = pShellView->QueryInterface(IID_PPV_ARG(IFolderView, &pFolderView));
283 if (FAILED(hr) || !pFolderView)
284 return hr;
285
286 CComPtr<IShellFolder> pShellFolder;
287 if (!ppShellFolder)
288 ppShellFolder = &pShellFolder;
289 hr = pFolderView->GetFolder(IID_PPV_ARG(IShellFolder, ppShellFolder));
290 if (FAILED(hr) || !pShellFolder)
291 return hr;
292
293 CLSID clsid;
294 hr = IUnknown_GetClassID(*ppShellFolder, &clsid);
295 if (FAILED(hr))
296 return hr;
297 if (clsid != CLSID_FindFolder)
298 return E_FAIL;
299
300 if (pHwnd)
301 {
302 hr = pShellView->GetWindow(pHwnd);
304 return hr;
305 }
306
307 return S_OK;
308}
309
310LRESULT CSearchBar::OnSearchButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
311{
312 size_t len = 0;
313 WCHAR endchar;
314 WCHAR startchar;
315
316 CComHeapPtr<SearchStart> pSearchStart(static_cast<SearchStart *>(CoTaskMemAlloc(sizeof(SearchStart))));
317 GetDlgItemText(IDC_SEARCH_FILENAME, pSearchStart->szFileName, _countof(pSearchStart->szFileName));
318 GetDlgItemText(IDC_SEARCH_QUERY, pSearchStart->szQuery, _countof(pSearchStart->szQuery));
319
320 pSearchStart->SearchHidden = IsDlgButtonChecked(IDC_SEARCH_HIDDEN);
321
323 pSearchStart->pPaths = GetAddressEditBoxLocations(buf);
324 if (!pSearchStart->pPaths)
325 {
326 ShellMessageBoxW(_AtlBaseModule.GetResourceInstance(), m_hWnd, MAKEINTRESOURCEW(IDS_SEARCHINVALID),
328 return 0;
329 }
330 ScopedFreeLocationItems FreeLocationsHelper(pSearchStart->pPaths);
331
332 // See if we have an szFileName by testing for its entry lenth > 0 and our searched FileName does not contain
333 // an asterisk or a question mark. If so, then prepend and append an asterisk to the searched FileName.
334 // (i.e. it's equivalent to searching for *<the_file_name>* )
335 if (FAILED (StringCchLengthW (pSearchStart->szFileName, MAX_PATH, &len))) return 0;
336 if ((len > 0) && !wcspbrk(pSearchStart->szFileName, L"*?"))
337 {
338 endchar = pSearchStart->szFileName[len - 1];
339 startchar = pSearchStart->szFileName[0];
340 if ((len < MAX_PATH - 1) && (startchar != L'*'))
341 {
342 memmove(&pSearchStart->szFileName[1], &pSearchStart->szFileName[0],
343 len * sizeof(WCHAR) + sizeof(WCHAR));
344 len = len + 1;
345 pSearchStart->szFileName[0] = L'*';
346 }
347
348 // See if our last character is an asterisk and if not and we have room then add one
349 if ((len < MAX_PATH - 1) && (endchar != L'*'))
350 StringCchCatW(pSearchStart->szFileName, MAX_PATH, L"*");
351 }
352
353 // Print our final search string for szFileName
354 TRACE("Searched szFileName is '%S'.\n", pSearchStart->szFileName);
355
356 CComPtr<IShellBrowser> pShellBrowser;
359 return 0;
360
361 HWND hwnd;
362 if (FAILED(GetSearchResultsFolder(&pShellBrowser, &hwnd, NULL)))
363 {
364 // Open a new search results folder
365 WCHAR szShellGuid[MAX_PATH];
366 const WCHAR shellGuidPrefix[] = L"shell:::";
367 memcpy(szShellGuid, shellGuidPrefix, sizeof(shellGuidPrefix));
368 hr = StringFromGUID2(CLSID_FindFolder, szShellGuid + _countof(shellGuidPrefix) - 1,
369 _countof(szShellGuid) - _countof(shellGuidPrefix));
371 return 0;
372
373 CComHeapPtr<ITEMIDLIST> findFolderPidl;
374 hr = SHParseDisplayName(szShellGuid, NULL, &findFolderPidl, 0, NULL);
376 return 0;
377
378 hr = pShellBrowser->BrowseObject(findFolderPidl, 0);
380 return 0;
381
382 hr = GetSearchResultsFolder(&pShellBrowser, &hwnd, NULL);
384 return 0;
385 }
386
387 FreeLocationsHelper.Detach();
388 ::PostMessageW(hwnd, WM_SEARCH_START, 0, (LPARAM) pSearchStart.Detach());
389
391
392 return 0;
393}
394
395LRESULT CSearchBar::OnStopButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
396{
397 HWND hwnd;
399 if (SUCCEEDED(hr))
401
402 return 0;
403}
404
405LRESULT CSearchBar::OnLocationEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
406{
407 HWND hComboboxEx = hWndCtl;
408 INT_PTR idx = SendMessageW(hComboboxEx, CB_GETCURSEL, 0, 0);
409 if (idx < 0)
410 return 0;
412 item.mask = CBEIF_LPARAM;
413 item.iItem = idx;
414 item.cchTextMax = 0;
415 if (!SendMessageW(hComboboxEx, CBEM_GETITEMW, 0, (LPARAM)&item) ||
417 {
419 return 0;
420 }
421
422 idx = max(m_RealItemIndex, 0);
423 SendMessageW(hComboboxEx, CB_SETCURSEL, idx, 0); // Reset to previous item
424
425 BROWSEINFOW bi = { hComboboxEx };
427 if (PIDLIST_ABSOLUTE pidl = SHBrowseForFolderW(&bi))
428 {
429 idx = FindItemInComboEx(hComboboxEx, pidl, ILIsEqual, TRUE);
430 if (idx < 0)
431 {
432 SHFILEINFO shfi;
433 if (SHGetFileInfoW((WCHAR*)pidl, 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX))
434 {
436 item.iItem = -1;
437 item.iImage = item.iSelectedImage = shfi.iIcon;
438 item.pszText = shfi.szDisplayName;
439 item.lParam = (LPARAM)pidl; // IAddressEditBox takes ownership
440 idx = SendMessageW(hComboboxEx, CBEM_INSERTITEMW, 0, (LPARAM)&item);
441 }
442 }
443 if (idx >= 0)
444 SendMessageW(hComboboxEx, CB_SETCURSEL, idx, 0); // Select the browsed item
445 else
446 SHFree(pidl);
447 }
448 return 0;
449}
450
452{
453 WCHAR szItemText[MAX_PATH], *pszPath = szPath;
454 HWND hComboboxEx = GetDlgItem(IDC_SEARCH_COMBOBOX);
455 ::GetWindowTextW(hComboboxEx, szPath, MAX_PATH);
456 INT iSelectedIndex = SendMessageW(hComboboxEx, CB_GETCURSEL, 0, 0);
457 if (iSelectedIndex != CB_ERR)
458 {
461 item.iItem = iSelectedIndex;
462 item.pszText = szItemText;
463 item.cchTextMax = _countof(szItemText);
464 SendMessageW(hComboboxEx, CBEM_GETITEMW, 0, (LPARAM)&item);
465 if (!wcscmp(szItemText, szPath))
466 {
467 LPCITEMIDLIST pidl = (LPCITEMIDLIST)item.lParam;
468 CLSID clsid;
469 HRESULT hr = GetClassOfItem(pidl, &clsid);
470 if (SUCCEEDED(hr) && clsid == CLSID_MyComputer)
471 return GetLocalDisksLocations();
472 // TODO: Shell enumerate the network neighborhood if it is chosen
473 if (!pidl || !pidl->mkid.cb)
474 return GetDesktopLocations();
475 if (GetSpecial(pidl) || !SHGetPathFromIDListW(pidl, szItemText))
476 return NULL;
477 pszPath = szItemText;
478 }
479 }
480
483 PathIsAbsolute(pszPath))
484 {
485 return BuildLocationList(&pszPath, 1);
486 }
487 return NULL;
488}
489
491{
492 INT iWidth = LOWORD(lParam);
493 INT iPadding = 10;
494
496
498 HDWP hdwp = BeginDeferWindowPos(_countof(inputs));
499 for (SIZE_T i = 0; i < _countof(inputs); i++)
500 {
501 CWindow wnd = (CWindow) GetDlgItem(inputs[i]);
502 RECT rect;
503 wnd.GetWindowRect(&rect);
504 POINT pt = { rect.left, rect.top };
506 hdwp = wnd.DeferWindowPos(hdwp,
507 HWND_TOP,
508 iPadding,
509 pt.y,
510 iWidth - iPadding * 2,
511 rect.bottom - rect.top,
513 }
514 EndDeferWindowPos(hdwp);
515
516 return 0;
517}
518
519
520// *** IOleWindow methods ***
522{
523 if (!lphwnd)
524 return E_INVALIDARG;
525 *lphwnd = m_hWnd;
526 return S_OK;
527}
528
530{
532 return E_NOTIMPL;
533}
534
535
536// *** IDockingWindow methods ***
538{
539 // We do nothing, we don't have anything to save yet
540 TRACE("CloseDW called\n");
541 return S_OK;
542}
543
544HRESULT STDMETHODCALLTYPE CSearchBar::ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved)
545{
546 /* Must return E_NOTIMPL according to MSDN */
547 return E_NOTIMPL;
548}
549
551{
552 m_bVisible = fShow;
553 ShowWindow(fShow);
554 if (fShow)
556 return S_OK;
557}
558
559
560// *** IDeskBand methods ***
562{
563 if (!pdbi)
564 {
565 return E_INVALIDARG;
566 }
567
568 if (pdbi->dwMask & DBIM_MINSIZE)
569 {
570 pdbi->ptMinSize.x = 200;
571 pdbi->ptMinSize.y = 30;
572 }
573
574 if (pdbi->dwMask & DBIM_MAXSIZE)
575 {
576 pdbi->ptMaxSize.y = -1;
577 }
578
579 if (pdbi->dwMask & DBIM_INTEGRAL)
580 {
581 pdbi->ptIntegral.y = 1;
582 }
583
584 if (pdbi->dwMask & DBIM_ACTUAL)
585 {
586 pdbi->ptActual.x = 200;
587 pdbi->ptActual.y = 30;
588 }
589
590 if (pdbi->dwMask & DBIM_TITLE)
591 {
592 if (!LoadStringW(_AtlBaseModule.GetResourceInstance(), IDS_SEARCHLABEL, pdbi->wszTitle, _countof(pdbi->wszTitle)))
594 }
595
596 if (pdbi->dwMask & DBIM_MODEFLAGS)
597 {
598 pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT;
599 }
600
601 if (pdbi->dwMask & DBIM_BKCOLOR)
602 {
603 pdbi->dwMask &= ~DBIM_BKCOLOR;
604 }
605 return S_OK;
606}
607
608
609// *** IObjectWithSite methods ***
611{
612 HRESULT hr;
613 HWND parentWnd;
614
615 if (pUnkSite == m_pSite)
616 return S_OK;
617
618 TRACE("SetSite called \n");
619 if (!pUnkSite)
620 {
622 m_hWnd = NULL;
623 return S_OK;
624 }
625
626 hr = IUnknown_GetWindow(pUnkSite, &parentWnd);
627 if (!SUCCEEDED(hr))
628 {
629 ERR("Could not get parent's window ! Status: %08lx\n", hr);
630 return E_INVALIDARG;
631 }
632
633 m_pSite = pUnkSite;
634
635 if (m_hWnd)
636 {
637 // Change its parent
638 SetParent(parentWnd);
639 }
640 else
641 {
642 CDialogImpl::Create(parentWnd);
643
644 }
645 return S_OK;
646}
647
649{
650 if (!ppvSite)
651 return E_POINTER;
652 *ppvSite = m_pSite;
653 return S_OK;
654}
655
656
657// *** IInputObject methods ***
659{
660 if (fActivate)
661 {
662 //SetFocus();
664 }
665 // TODO: handle message
666 if(lpMsg)
667 {
668 TranslateMessage(lpMsg);
669 DispatchMessage(lpMsg);
670 }
671 return S_OK;
672}
673
675{
676 return S_OK;
677}
678
680{
681 if (IsDialogMessage(lpMsg))
682 return S_OK;
683
684 if ((lpMsg->hwnd == m_hWnd || IsChild(lpMsg->hwnd)))
685 {
686 TranslateMessage(lpMsg);
687 DispatchMessage(lpMsg);
688 return S_OK;
689 }
690
691 return S_FALSE;
692}
693
694// *** IPersist methods ***
696{
697 if (!pClassID)
698 return E_POINTER;
699 *pClassID = CLSID_FileSearchBand;
700 return S_OK;
701}
702
703
704// *** IPersistStream methods ***
706{
708 return E_NOTIMPL;
709}
710
712{
714 return E_NOTIMPL;
715}
716
718{
720 return E_NOTIMPL;
721}
722
724{
725 // TODO: calculate max size
727 return E_NOTIMPL;
728}
729
730
731// *** IDispatch methods ***
733{
735 return E_NOTIMPL;
736}
737
739{
741 return E_NOTIMPL;
742}
743
745{
747 return E_NOTIMPL;
748}
749
751{
754 HWND hProgressBar = GetDlgItem(IDC_PROGRESS_BAR);
755 ::ShowWindow(hProgressBar, bInProgress ? SW_SHOW : SW_HIDE);
756 ::PostMessage(hProgressBar, PBM_SETMARQUEE, bInProgress, 0);
757}
758
760{
761 CComPtr<IShellFolder> pShellFolder;
762 HRESULT hr = GetSearchResultsFolder(NULL, NULL, &pShellFolder);
763 if (FAILED(hr))
764 return hr;
765
766 DWORD fAdviseCookie;
767 hr = AtlAdvise(pShellFolder, static_cast<IDispatch *>(this), DIID_DSearchCommandEvents, &fAdviseCookie);
769 return hr;
770
771 return S_OK;
772}
773
774HRESULT STDMETHODCALLTYPE CSearchBar::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
775{
776 switch (dispIdMember)
777 {
780 {
783
784 // Remove the search results folder from the address box
785 CComPtr<IDispatch> pDispatch;
786 HRESULT hResult = m_AddressEditBox->QueryInterface(IID_PPV_ARG(IDispatch, &pDispatch));
787 if (FAILED_UNEXPECTEDLY(hResult))
788 return hResult;
789 pDispatch->Invoke(dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
790 CComPtr<IShellService> pShellService;
791 hResult = m_AddressEditBox->QueryInterface(IID_PPV_ARG(IShellService, &pShellService));
792 if (FAILED_UNEXPECTEDLY(hResult))
793 return hResult;
794 hResult = pShellService->SetOwner(NULL);
795 if (FAILED_UNEXPECTEDLY(hResult))
796 return hResult;
797 HWND hComboboxEx = GetDlgItem(IDC_SEARCH_COMBOBOX);
798 INT_PTR count = SendMessageW(hComboboxEx, CB_GETCOUNT, 0, 0);
799 if (count <= 0)
800 return S_OK;
801 COMBOBOXEXITEMW item = {0};
802 item.mask = CBEIF_LPARAM;
803 item.iItem = count - 1;
804 SendMessageW(hComboboxEx, CBEM_GETITEMW, 0, (LPARAM)&item);
805 if (!item.lParam)
806 return S_OK;
807 CLSID clsid;
808 hResult = GetClassOfItem((LPCITEMIDLIST)item.lParam, &clsid);
809 if (SUCCEEDED(hResult) && clsid == CLSID_FindFolder)
810 {
811 SendMessageW(hComboboxEx, CBEM_DELETEITEM, item.iItem, 0);
812 SendMessageW(hComboboxEx, CB_SETCURSEL, 0, 0);
813 // Starting in My Computer is better than just searching the desktop folder
814 PIDLIST_ABSOLUTE pidl;
816 {
817 INT_PTR idx = FindItemInComboEx(hComboboxEx, pidl, ILIsEqual, TRUE);
818 if (idx >= 0)
819 SendMessageW(hComboboxEx, CB_SETCURSEL, idx, 0);
820 SHFree(pidl);
821 }
822 }
823
824 // Remove all non-filesystem items since we currently use FindFirstFile to search
825 BOOL fFoundBrowse = FALSE;
826 for (item.iItem = 0; SendMessageW(hComboboxEx, CBEM_GETITEMW, 0, (LPARAM)&item); item.iItem++)
827 {
828 LPCITEMIDLIST pidl = (LPCITEMIDLIST)item.lParam;
829 BYTE special = GetSpecial(pidl);
830 fFoundBrowse |= special == SPECIAL_BROWSE;
831 if (special)
832 continue;
833 const UINT fQuery = SFGAO_FILESYSTEM | SFGAO_FILESYSANCESTOR;
834 SHFILEINFO shfi;
835 shfi.dwAttributes = fQuery;
836 if (SHGetFileInfoW((WCHAR*)pidl, 0, &shfi, sizeof(shfi), SHGFI_PIDL | SHGFI_ATTRIBUTES | SHGFI_ATTR_SPECIFIED))
837 {
838 if (!(shfi.dwAttributes & fQuery))
839 {
840 if (SendMessageW(hComboboxEx, CBEM_DELETEITEM, item.iItem, 0) != CB_ERR)
841 item.iItem--;
842 }
843 }
844 }
845
846 // Add our custom Browse item
847 if (!fFoundBrowse)
848 {
849 WCHAR buf[200];
851 item.iItem = -1;
852 item.iIndent = -2; // Remove space reserved for the non-existing item icon
854 item.pszText = const_cast<PWSTR>(L"...");
855 #define IDS_SEARCH_BROWSEITEM 10244 /* shell32 shresdef.h */
857 item.pszText = buf;
858 if (item.lParam)
859 SendMessageW(hComboboxEx, CBEM_INSERTITEMW, 0, (LPARAM)&item);
860 }
861
862 return S_OK;
863 }
868 return S_OK;
869 default:
870 return E_INVALIDARG;
871 }
872}
873
875{
876 CComPtr<IShellBrowser> pBrowser;
877 CComPtr<IShellView> pResultsSV;
878 if (SUCCEEDED(GetSearchResultsFolder(&pBrowser, NULL, NULL)))
879 pBrowser->QueryActiveShellView(&pResultsSV);
880 UINT cItems = pResultsSV ? GetShellViewItemCount(pResultsSV) : 0;
881
882 // Attempt to set the focus if we are not in the results folder or if there are no results
883 HWND hWndFocus = ::GetFocus();
884 if (!hWndFocus || !pResultsSV || cItems == 0)
885 {
886 BOOL IsOnButton = GetDlgItem(IDC_SEARCH_BUTTON) == hWndFocus;
887 BOOL IsOnSelfPane = hWndFocus == m_hWnd;
888 if (!hWndFocus || IsOnSelfPane || IsOnButton || !IsWindowChildOf(hWndFocus, m_hWnd))
890 }
891}
static const SPECIALFINDITEMID g_pidlBrowseDir
Definition: CSearchBar.cpp:60
static BYTE GetSpecial(PCIDLIST_ABSOLUTE pidl)
Definition: CSearchBar.cpp:63
@ SPECIAL_BROWSE
Definition: CSearchBar.cpp:58
static UINT GetShellViewItemCount(IShellView *pSV)
Definition: CSearchBar.cpp:37
static LOCATIONITEM * GetDesktopLocations()
Definition: CSearchBar.cpp:137
static LOCATIONITEM * CreateLocationListItem(PCWSTR szPath)
Definition: CSearchBar.cpp:105
void FreeList(LOCATIONITEM *pItems)
Definition: CSearchBar.cpp:95
static BOOL IsWindowChildOf(const HWND hNeedle, const HWND hRoot)
Definition: CSearchBar.cpp:23
static LOCATIONITEM * GetLocalDisksLocations()
Definition: CSearchBar.cpp:150
static HRESULT GetClassOfItem(PCIDLIST_ABSOLUTE pidl, CLSID *pCLSID)
Definition: CSearchBar.cpp:88
static HRESULT BindToObject(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv)
Definition: CSearchBar.cpp:77
static LOCATIONITEM * BuildLocationList(T **rgszPaths, SIZE_T nCount)
Definition: CSearchBar.cpp:117
#define IDS_SEARCH_BROWSEITEM
#define I_ID(Itype)
Definition: atlcomcli.h:215
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ERR(fmt,...)
Definition: precomp.h:57
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define RegCloseKey(hKey)
Definition: registry.h:49
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1460
HRESULT CAddressEditBox_CreateInstance(REFIID riid, void **ppv)
Definition: browseui.cpp:33
HWND Create(HWND hWndParent, LPARAM dwInitParam=0)
Definition: atlwin.h:1487
HWND SetParent(HWND hWndNewParent)
Definition: atlwin.h:1228
UINT IsDlgButtonChecked(int nIDButton) const
Definition: atlwin.h:926
BOOL CheckDlgButton(int nIDButton, UINT nCheck)
Definition: atlwin.h:369
BOOL SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
Definition: atlwin.h:1288
HWND GetDlgItem(_In_ int nID) const
Definition: atlwin.h:605
BOOL DestroyWindow()
Definition: atlwin.h:462
HWND SetActiveWindow()
Definition: atlwin.h:1162
BOOL ScreenToClient(LPPOINT lpPoint) const
Definition: atlwin.h:1092
HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
Definition: atlwin.h:456
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:816
HWND m_hWnd
Definition: atlwin.h:273
BOOL ShowWindow(int nCmdShow)
Definition: atlwin.h:1333
BOOL IsChild(const HWND hWnd) const
Definition: atlwin.h:914
T * Detach()
Definition: atlalloc.h:168
STDMETHOD() HasFocusIO() override
Definition: CSearchBar.cpp:674
STDMETHOD() CloseDW(DWORD dwReserved) override
Definition: CSearchBar.cpp:537
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
Definition: CSearchBar.cpp:529
STDMETHOD() Save(IStream *pStm, BOOL fClearDirty) override
Definition: CSearchBar.cpp:717
CComPtr< IUnknown > m_pSite
Definition: CSearchBar.h:25
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override
Definition: CSearchBar.cpp:744
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CSearchBar.cpp:490
STDMETHOD() IsDirty() override
Definition: CSearchBar.cpp:705
virtual ~CSearchBar()
Definition: CSearchBar.cpp:181
LRESULT OnSearchButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CSearchBar.cpp:310
BOOL m_bVisible
Definition: CSearchBar.h:28
STDMETHOD() GetClassID(CLSID *pClassID) override
Definition: CSearchBar.cpp:695
STDMETHOD() GetWindow(HWND *lphwnd) override
Definition: CSearchBar.cpp:521
HRESULT GetSearchResultsFolder(IShellBrowser **ppShellBrowser, HWND *pHwnd, IShellFolder **ppShellFolder)
Definition: CSearchBar.cpp:263
STDMETHOD() Load(IStream *pStm) override
Definition: CSearchBar.cpp:711
LRESULT OnStopButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CSearchBar.cpp:395
STDMETHOD() ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
Definition: CSearchBar.cpp:544
STDMETHOD() SetSite(IUnknown *pUnkSite) override
Definition: CSearchBar.cpp:610
INT_PTR m_RealItemIndex
Definition: CSearchBar.h:27
HRESULT TrySubscribeToSearchEvents()
Definition: CSearchBar.cpp:759
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
Definition: CSearchBar.cpp:723
STDMETHOD() GetSite(REFIID riid, void **ppvSite) override
Definition: CSearchBar.cpp:648
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override
Definition: CSearchBar.cpp:774
STDMETHOD() ShowDW(BOOL fShow) override
Definition: CSearchBar.cpp:550
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override
Definition: CSearchBar.cpp:738
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CSearchBar.cpp:256
STDMETHOD() GetTypeInfoCount(UINT *pctinfo) override
Definition: CSearchBar.cpp:732
void SetSearchInProgress(BOOL bInProgress)
Definition: CSearchBar.cpp:750
STDMETHOD() TranslateAcceleratorIO(LPMSG lpMsg) override
Definition: CSearchBar.cpp:679
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CSearchBar.cpp:185
STDMETHOD() GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override
Definition: CSearchBar.cpp:561
LOCATIONITEM * GetAddressEditBoxLocations(WCHAR *szPath)
Definition: CSearchBar.cpp:451
LRESULT OnLocationEditChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
Definition: CSearchBar.cpp:405
STDMETHOD() UIActivateIO(BOOL fActivate, LPMSG lpMsg) override
Definition: CSearchBar.cpp:658
void TrySetFocus(UINT Source)
Definition: CSearchBar.cpp:874
CComPtr< IAddressEditBox > m_AddressEditBox
Definition: CSearchBar.h:26
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID *iid, DWORD *pdw)
Definition: atl.c:45
#define IDC_SEARCH_BUTTON
Definition: resource.h:169
#define IDC_SEARCH_COMBOBOX
Definition: resource.h:171
#define IDC_SEARCH_HIDDEN
Definition: resource.h:172
#define IDS_SEARCHLABEL
Definition: resource.h:126
#define IDS_SEARCHINVALID
Definition: resource.h:173
#define IDC_SEARCH_LABEL
Definition: resource.h:166
#define IDC_SEARCH_STOP_BUTTON
Definition: resource.h:170
#define IDC_PROGRESS_BAR
Definition: resource.h:139
#define IDC_SEARCH_FILENAME
Definition: resource.h:167
#define IDC_SEARCH_QUERY
Definition: resource.h:168
#define MAX_PATH
Definition: compat.h:34
#define lstrlenW
Definition: compat.h:750
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
#define ShellMessageBoxW
Definition: precomp.h:63
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3408
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3243
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus)
Definition: ordinal.c:4804
#define pt(x, y)
Definition: drawing.c:79
#define DISPID_SEARCHABORT
Definition: exdispid.h:174
#define DISPID_WINDOWSTATECHANGED
Definition: exdispid.h:69
#define DISPID_SEARCHCOMPLETE
Definition: exdispid.h:173
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint64EXT * result
Definition: glext.h:11304
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define GUID_NULL
Definition: ks.h:106
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
LPCWSTR szPath
Definition: env.c:37
static HTREEITEM hRoot
Definition: treeview.c:383
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
static ATOM item
Definition: dde.c:856
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
Definition: usp10.c:62
REFCLSID clsid
Definition: msctf.c:82
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define DWORD
Definition: nt_native.h:44
#define UNICODE_NULL
#define L(x)
Definition: ntvdm.h:50
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define LOWORD(l)
Definition: pedump.c:82
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1506
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:582
#define CBEIF_IMAGE
Definition: commctrl.h:3792
#define CBEM_GETITEMW
Definition: commctrl.h:3848
#define CBEIF_SELECTEDIMAGE
Definition: commctrl.h:3793
#define CBEIF_TEXT
Definition: commctrl.h:3791
#define CBEM_DELETEITEM
Definition: commctrl.h:3836
#define CBEM_SETEXTENDEDSTYLE
Definition: commctrl.h:3840
#define CBEM_SETIMAGELIST
Definition: commctrl.h:3832
#define CBEIF_INDENT
Definition: commctrl.h:3795
#define CBES_EX_NOSIZELIMIT
Definition: commctrl.h:3859
#define CBES_EX_CASESENSITIVE
Definition: commctrl.h:3860
#define CBEM_INSERTITEMW
Definition: commctrl.h:3846
#define CBEIF_LPARAM
Definition: commctrl.h:3796
#define PBM_SETMARQUEE
Definition: commctrl.h:2204
#define CBEM_GETEDITCONTROL
Definition: commctrl.h:3838
#define REFIID
Definition: guiddef.h:118
#define REG_DWORD
Definition: sdbapi.c:596
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
DWORD LCID
Definition: nls.h:13
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_ATTR_SPECIFIED
Definition: shellapi.h:175
#define SHGFI_SYSICONINDEX
Definition: shellapi.h:172
#define SHIL_SMALL
Definition: shellapi.h:186
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_ATTRIBUTES
Definition: shellapi.h:169
#define SHGFI_PIDL
Definition: shellapi.h:181
static bool PathIsAbsolute(PCWSTR Path)
Definition: shellfind.h:82
#define WM_SEARCH_START
Definition: shellfind.h:29
static INT_PTR FindItemInComboEx(HWND hCombo, T &FindItem, F CompareFunc, R RetMatch)
Definition: shellfind.h:59
#define WM_SEARCH_STOP
Definition: shellfind.h:30
HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
Definition: shellord.c:2674
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2205
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2196
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1225
static BOOL ILIsEmpty(_In_opt_ PCUIDLIST_RELATIVE pidl)
Definition: shlobj.h:2527
#define CSIDL_DRIVES
Definition: shlobj.h:2197
#define BIF_NEWDIALOGSTYLE
Definition: shlobj.h:1231
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
& rect
Definition: startmenu.cpp:1413
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz, size_t cchMax, size_t *pcchLength)
Definition: strsafe.h:842
WORD cb
Definition: shtypes.idl:27
SHITEMID mkid
Definition: shtypes.idl:34
LONG y
Definition: windef.h:330
LONG x
Definition: windef.h:329
DWORD dwAttributes
Definition: shellapi.h:368
CHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:369
UINT ulFlags
Definition: shlobj.h:1212
WCHAR wszTitle[256]
Definition: shobjidl.idl:2498
struct tagLOCATIONITEM * pNext
Definition: shellfind.h:36
HWND hwnd
Definition: winuser.h:3125
#define max(a, b)
Definition: svc.c:63
uint16_t * PWSTR
Definition: typedefs.h:56
int32_t INT_PTR
Definition: typedefs.h:64
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
DWORD dwAttributes
Definition: vdmdbg.h:34
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1394
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
DWORD WINAPI GetLogicalDrives(void)
Definition: disk.c:110
#define CopyMemory
Definition: winbase.h:1741
#define DRIVE_RAMDISK
Definition: winbase.h:281
#define DRIVE_FIXED
Definition: winbase.h:278
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define S_FALSE
Definition: winerror.h:2357
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegQueryValueEx
Definition: winreg.h:524
HWND WINAPI GetFocus(void)
Definition: window.c:1875
#define SW_HIDE
Definition: winuser.h:779
#define SWP_NOACTIVATE
Definition: winuser.h:1253
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define IsDialogMessage
Definition: winuser.h:5829
#define BST_UNCHECKED
Definition: winuser.h:199
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define GetDlgItemText
Definition: winuser.h:5805
#define SWP_NOMOVE
Definition: winuser.h:1255
#define CB_ERR
Definition: winuser.h:2446
#define CB_SETCURSEL
Definition: winuser.h:1972
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
#define CB_GETCOUNT
Definition: winuser.h:1953
#define WM_NEXTDLGCTL
Definition: winuser.h:1654
#define MB_ICONERROR
Definition: winuser.h:798
#define HWND_TOP
Definition: winuser.h:1218
#define SWP_NOCOPYBITS
Definition: winuser.h:1254
#define SendMessage
Definition: winuser.h:5863
#define MB_OK
Definition: winuser.h:801
#define PostMessage
Definition: winuser.h:5852
HWND WINAPI GetParent(_In_ HWND)
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260
#define SW_SHOW
Definition: winuser.h:786
#define DispatchMessage
Definition: winuser.h:5785
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define SWP_NOZORDER
Definition: winuser.h:1258
#define CB_GETCURSEL
Definition: winuser.h:1954
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BST_CHECKED
Definition: winuser.h:197
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193