ReactOS 0.4.15-dev-6042-g2eb6700
createlink.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Software Control Panel
3 * FILE: dll/cpl/appwiz/createlink.c
4 * PURPOSE: ReactOS Software Control Panel
5 * PROGRAMMER: Gero Kuehn (reactos.filter@gkware.com)
6 * Dmitry Chapyshev (lentind@yandex.ru)
7 * Johannes Anderwald
8 * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
9 * UPDATE HISTORY:
10 * 06-17-2004 Created
11 */
12
13#include "appwiz.h"
14#include <commctrl.h>
15#include <shellapi.h>
16#include <strsafe.h>
17
18BOOL
20{
21 WCHAR Value[10];
22 DWORD Size;
23 DWORD Type;
24
25 Size = sizeof(Value);
26 if (RegQueryValueExW(hKey, L"IsShortcut", NULL, &Type, (LPBYTE)Value, &Size) != ERROR_SUCCESS)
27 return FALSE;
28
29 if (Type != REG_SZ)
30 return FALSE;
31
32 return (wcsicmp(Value, L"yes") == 0);
33}
34
35BOOL
37{
38 HKEY hKey;
39 WCHAR Buffer[100];
40 DWORD Size;
41 DWORD Type;
42
44 return FALSE;
45
46 if (IsShortcut(hKey))
47 {
49 return TRUE;
50 }
51
52 Size = sizeof(Buffer);
54 {
56 return FALSE;
57 }
58
60
62 return FALSE;
63
64 if (IsShortcut(hKey))
65 {
67 return TRUE;
68 }
69
71 return FALSE;
72}
73
74BOOL
76{
77 IShellLinkW *pShellLink, *pSourceShellLink;
78 IPersistFile *pPersistFile;
79 HRESULT hr;
82
83 /* get the extension */
85
87 {
88 hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_ALL, &IID_IShellLinkW, (void**)&pSourceShellLink);
89
90 if (FAILED(hr))
91 return FALSE;
92
93 hr = IUnknown_QueryInterface(pSourceShellLink, &IID_IPersistFile, (void**)&pPersistFile);
94 if (FAILED(hr))
95 {
96 IUnknown_Release(pSourceShellLink);
97 return FALSE;
98 }
99
100 hr = pPersistFile->lpVtbl->Load(pPersistFile, (LPCOLESTR)pContext->szTarget, STGM_READ);
101 IUnknown_Release(pPersistFile);
102
103 if (FAILED(hr))
104 {
105 IUnknown_Release(pSourceShellLink);
106 return FALSE;
107 }
108
109 hr = IShellLinkW_GetPath(pSourceShellLink, Path, _countof(Path), NULL, 0);
110 IUnknown_Release(pSourceShellLink);
111
112 if (FAILED(hr))
113 {
114 return FALSE;
115 }
116 }
117 else
118 {
120 }
121
122 hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_ALL,
123 &IID_IShellLinkW, (void**)&pShellLink);
124
125 if (hr != S_OK)
126 return FALSE;
127
128 pShellLink->lpVtbl->SetPath(pShellLink, Path);
129 pShellLink->lpVtbl->SetDescription(pShellLink, pContext->szDescription);
130 pShellLink->lpVtbl->SetWorkingDirectory(pShellLink, pContext->szWorkingDirectory);
131
132 hr = IUnknown_QueryInterface(pShellLink, &IID_IPersistFile, (void**)&pPersistFile);
133 if (hr != S_OK)
134 {
135 IUnknown_Release(pShellLink);
136 return FALSE;
137 }
138
139 hr = pPersistFile->lpVtbl->Save(pPersistFile, pContext->szLinkName, TRUE);
140 IUnknown_Release(pPersistFile);
141 IUnknown_Release(pShellLink);
142 return (hr == S_OK);
143}
144
145BOOL
147{
148 IUniformResourceLocatorW *pURL = NULL;
149 IPersistFile *pPersistFile = NULL;
150 HRESULT hr;
153
154 hr = CoCreateInstance(&CLSID_InternetShortcut, NULL, CLSCTX_ALL,
155 &IID_IUniformResourceLocatorW, (void **)&pURL);
156 if (FAILED(hr))
157 return FALSE;
158
159 hr = IUnknown_QueryInterface(pURL, &IID_IPersistFile, (void **)&pPersistFile);
160 if (FAILED(hr))
161 {
162 IUnknown_Release(pURL);
163 return FALSE;
164 }
165
166 pURL->lpVtbl->SetURL(pURL, pContext->szTarget, 0);
167
168 hr = pPersistFile->lpVtbl->Save(pPersistFile, szPath, TRUE);
169
170 IUnknown_Release(pPersistFile);
171 IUnknown_Release(pURL);
172
173 return SUCCEEDED(hr);
174}
175
177{
178 return (PathIsURLW(pszLocation) || wcsstr(pszLocation, L"www.") == pszLocation);
179}
180
181/* Remove all invalid characters from the name */
182void
184{
185 LPWSTR pch1, pch2;
186 for (pch1 = pch2 = szName; *pch1; ++pch1)
187 {
188 if (wcschr(L"\\/:*?\"<>|", *pch1) != NULL)
189 {
190 /* *pch1 is an invalid character */
191 continue;
192 }
193 *pch2 = *pch1;
194 ++pch2;
195 }
196 *pch2 = 0;
197}
198
199BOOL
201{
202 SIZE_T cch;
203 LPCWSTR pch, pszName = pContext->szDescription;
204
205 if (!pszName || !pszName[0])
206 return FALSE;
207
208 cch = wcslen(pContext->szOrigin) + wcslen(pszName) + 1;
209 if (cch >= MAX_PATH)
210 return FALSE;
211
212 pch = pszName;
213 for (pch = pszName; *pch; ++pch)
214 {
215 if (wcschr(L"\\/:*?\"<>|", *pch) != NULL)
216 {
217 /* *pch is an invalid character */
218 return FALSE;
219 }
220 }
221
222 return TRUE;
223}
224
228 UINT uMsg,
231{
232 LPPROPSHEETPAGEW ppsp;
233 PCREATE_LINK_CONTEXT pContext;
234 LPPSHNOTIFY lppsn;
235 WCHAR szPath[MAX_PATH * 2];
236 WCHAR szDesc[100];
237 BROWSEINFOW brws;
238 LPITEMIDLIST pidllist;
239 LPWSTR pch;
241
242 switch(uMsg)
243 {
244 case WM_INITDIALOG:
245 ppsp = (LPPROPSHEETPAGEW)lParam;
246 pContext = (PCREATE_LINK_CONTEXT) ppsp->lParam;
247 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pContext);
250 break;
251 case WM_COMMAND:
252 switch(HIWORD(wParam))
253 {
254 case EN_CHANGE:
256 {
258 }
259 else
260 {
262 }
263 break;
264 }
265 switch(LOWORD(wParam))
266 {
268 ZeroMemory(&brws, sizeof(brws));
269 brws.hwndOwner = hwndDlg;
270 brws.pidlRoot = NULL;
271 brws.pszDisplayName = szPath;
273 brws.lpfn = NULL;
274 pidllist = SHBrowseForFolderW(&brws);
275 if (!pidllist)
276 break;
277
278 if (SHGetPathFromIDListW(pidllist, szPath))
279 {
283 }
284 /* Free memory, if possible */
285 CoTaskMemFree(pidllist);
286 break;
287 }
288 break;
289 case WM_NOTIFY:
290 lppsn = (LPPSHNOTIFY) lParam;
291 pContext = (PCREATE_LINK_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER);
292 if (lppsn->hdr.code == PSN_SETACTIVE)
293 {
295 }
296 else if (lppsn->hdr.code == PSN_WIZNEXT)
297 {
298 GetDlgItemTextW(hwndDlg, IDC_SHORTCUT_LOCATION, pContext->szTarget, _countof(pContext->szTarget));
299 StrTrimW(pContext->szTarget, L" \t");
300
302 StringCchCopyW(pContext->szTarget, _countof(pContext->szTarget), szPath);
303
304 if (IsInternetLocation(pContext->szTarget))
305 {
306 /* internet */
307 WCHAR szName[128];
310
311 pContext->szWorkingDirectory[0] = 0;
312 }
314 {
315 /* file */
319
320 /* get display name */
321 FileInfo.szDisplayName[0] = 0;
322 if (SHGetFileInfoW(pContext->szTarget, 0, &FileInfo, sizeof(FileInfo), SHGFI_DISPLAYNAME))
323 StringCchCopyW(pContext->szDescription, _countof(pContext->szDescription), FileInfo.szDisplayName);
324
325 /* set working directory */
327 pContext->szTarget);
330 if (pch && *pch)
331 *pch = 0;
333 }
334 else
335 {
336 /* not found */
337 WCHAR szError[MAX_PATH + 100];
338
340
343 StringCchPrintfW(szError, _countof(szError), szPath, pContext->szTarget);
344 MessageBoxW(hwndDlg, szError, szDesc, MB_ICONERROR);
345
346 /* prevent the wizard to go next */
347 SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, -1);
348 return TRUE;
349 }
350 }
351 else if (lppsn->hdr.code == PSN_RESET && !lppsn->lParam)
352 {
353 /* The user has clicked [Cancel] */
354 DeleteFileW(pContext->szOldFile);
356 }
357 break;
358 }
359 return FALSE;
360}
361
365 UINT uMsg,
368{
369 LPPROPSHEETPAGEW ppsp;
370 PCREATE_LINK_CONTEXT pContext;
371 LPPSHNOTIFY lppsn;
372 LPWSTR pch;
373 WCHAR szText[MAX_PATH];
374 WCHAR szMessage[128];
375
376 switch(uMsg)
377 {
378 case WM_INITDIALOG:
379 ppsp = (LPPROPSHEETPAGEW)lParam;
380 pContext = (PCREATE_LINK_CONTEXT) ppsp->lParam;
381 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pContext);
383 break;
384 case WM_COMMAND:
385 switch(HIWORD(wParam))
386 {
387 case EN_CHANGE:
389 {
390 GetDlgItemTextW(hwndDlg, IDC_SHORTCUT_NAME, szText, _countof(szText));
391 StrTrimW(szText, L" \t");
392 if (szText[0])
394 else
396 }
397 else
398 {
400 }
401 break;
402 }
403 break;
404 case WM_NOTIFY:
405 lppsn = (LPPSHNOTIFY) lParam;
406 pContext = (PCREATE_LINK_CONTEXT) GetWindowLongPtr(hwndDlg, DWLP_USER);
407 if (lppsn->hdr.code == PSN_SETACTIVE)
408 {
409 /* TODO: Use shell32!PathCleanupSpec instead of DoConvertNameForFileSystem */
414 }
415 else if (lppsn->hdr.code == PSN_WIZFINISH)
416 {
418 StrTrimW(pContext->szDescription, L" \t");
419
420 if (!DoValidateShortcutName(pContext))
421 {
423
424 LoadStringW(hApplet, IDS_INVALID_NAME, szMessage, _countof(szMessage));
425 MessageBoxW(hwndDlg, szMessage, NULL, MB_ICONERROR);
426
427 /* prevent the wizard to go next */
428 SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, -1);
429 return TRUE;
430 }
431
432 /* if old shortcut file exists, then delete it now */
433 DeleteFileW(pContext->szOldFile);
435
436 if (IsInternetLocation(pContext->szTarget))
437 {
438 /* internet */
439 StringCchCopyW(pContext->szLinkName, _countof(pContext->szLinkName),
440 pContext->szOrigin);
441 PathAppendW(pContext->szLinkName, pContext->szDescription);
442
443 /* change extension if any */
444 pch = PathFindExtensionW(pContext->szLinkName);
445 if (pch && *pch)
446 *pch = 0;
447 StringCchCatW(pContext->szLinkName, _countof(pContext->szLinkName), L".url");
448
449 if (!CreateInternetShortcut(pContext))
450 {
451 LoadStringW(hApplet, IDS_CANTMAKEINETSHORTCUT, szMessage, _countof(szMessage));
452 MessageBoxW(hwndDlg, szMessage, NULL, MB_ICONERROR);
453 }
454 }
455 else
456 {
457 /* file */
458 StringCchCopyW(pContext->szLinkName, _countof(pContext->szLinkName),
459 pContext->szOrigin);
460 PathAppendW(pContext->szLinkName, pContext->szDescription);
461
462 /* change extension if any */
463 pch = PathFindExtensionW(pContext->szLinkName);
464 if (pch && *pch)
465 *pch = 0;
466 StringCchCatW(pContext->szLinkName, _countof(pContext->szLinkName), L".lnk");
467
468 if (!CreateShortcut(pContext))
469 {
470 WCHAR szMessage[128];
471 LoadStringW(hApplet, IDS_CANTMAKESHORTCUT, szMessage, _countof(szMessage));
472 MessageBoxW(hwndDlg, szMessage, NULL, MB_ICONERROR);
473 }
474 }
475 }
476 else if (lppsn->hdr.code == PSN_RESET && !lppsn->lParam)
477 {
478 /* The user has clicked [Cancel] */
479 DeleteFileW(pContext->szOldFile);
481 }
482 break;
483 }
484 return FALSE;
485}
486
487static int CALLBACK
489{
490 // NOTE: This callback is needed to set large icon correctly.
491 HICON hIcon;
492 switch (uMsg)
493 {
494 case PSCB_INITIALIZED:
495 {
497 SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
498 break;
499 }
500 }
501 return 0;
502}
503
506{
508 HPROPSHEETPAGE ahpsp[2];
509 PROPSHEETPAGE psp;
510 UINT nPages = 0;
512 PCREATE_LINK_CONTEXT pContext;
513 WCHAR szMessage[128];
514 LPWSTR pch;
515
516 pContext = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pContext));
517 if (!pContext)
518 {
519 /* no memory */
520 LoadStringW(hApplet, IDS_NO_MEMORY, szMessage, _countof(szMessage));
521 MessageBoxW(hwndCPl, szMessage, NULL, MB_ICONERROR);
522 return FALSE;
523 }
524
526 if (!nLength)
527 {
528 HeapFree(GetProcessHeap(), 0, pContext);
529
530 /* no directory given */
531 LoadStringW(hApplet, IDS_NO_DIRECTORY, szMessage, _countof(szMessage));
532 MessageBoxW(hwndCPl, szMessage, NULL, MB_ICONERROR);
533 return FALSE;
534 }
535
537 {
538 HeapFree(GetProcessHeap(), 0, pContext);
539
540 /* invalid path */
541 LoadStringW(hApplet, IDS_INVALID_PATH, szMessage, _countof(szMessage));
542 MessageBoxW(hwndCPl, szMessage, NULL, MB_ICONERROR);
543 return FALSE;
544 }
545
546 /* build the pContext->szOrigin and pContext->szOldFile */
548 {
549 StringCchCopyW(pContext->szOrigin, _countof(pContext->szOrigin), szPath);
550 pContext->szOldFile[0] = 0;
551 }
552 else
553 {
554 StringCchCopyW(pContext->szOrigin, _countof(pContext->szOrigin), szPath);
555 pch = PathFindFileNameW(pContext->szOrigin);
556 if (pch && *pch)
557 *pch = 0;
558
559 StringCchCopyW(pContext->szOldFile, _countof(pContext->szOldFile), szPath);
560
562 if (pch && *pch)
563 {
564 /* build szDescription */
565 StringCchCopyW(pContext->szDescription, _countof(pContext->szDescription), pch);
566 *pch = 0;
567
569 *pch = 0;
570 }
571 }
572 PathAddBackslashW(pContext->szOrigin);
573
574 /* Create the Welcome page */
575 psp.dwSize = sizeof(PROPSHEETPAGE);
576 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
577 psp.hInstance = hApplet;
578 psp.pfnDlgProc = WelcomeDlgProc;
579 psp.pszTemplate = MAKEINTRESOURCEW(IDD_SHORTCUT_LOCATION);
580 psp.lParam = (LPARAM)pContext;
581 ahpsp[nPages++] = CreatePropertySheetPage(&psp);
582
583 /* Create the Finish page */
584 psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
585 psp.pfnDlgProc = FinishDlgProc;
586 psp.pszTemplate = MAKEINTRESOURCEW(IDD_SHORTCUT_FINISH);
587 ahpsp[nPages++] = CreatePropertySheetPage(&psp);
588
589 /* Create the property sheet */
590 psh.dwSize = sizeof(PROPSHEETHEADER);
591 psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_USEICONID | PSH_USECALLBACK;
592 psh.hInstance = hApplet;
594 psh.hwndParent = NULL;
595 psh.nPages = nPages;
596 psh.nStartPage = 0;
597 psh.phpage = ahpsp;
598 psh.pszbmWatermark = MAKEINTRESOURCEW(IDB_SHORTCUT);
600
601 /* Display the wizard */
602 PropertySheet(&psh);
603 HeapFree(GetProcessHeap(), 0, pContext);
604 return TRUE;
605}
606
607LONG
609NewLinkHereW(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
610{
612 return ShowCreateShortcutWizard(hwndCPl, (LPWSTR)lParam1);
613}
614
615LONG
617NewLinkHereA(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
618{
619 WCHAR szFile[MAX_PATH];
620
621 if (MultiByteToWideChar(CP_ACP, 0, (LPSTR)lParam1, -1, szFile, _countof(szFile)))
622 {
624 return ShowCreateShortcutWizard(hwndCPl, szFile);
625 }
626 return -1;
627}
PRTL_UNICODE_STRING_BUFFER Path
Type
Definition: Type.h:7
struct CREATE_LINK_CONTEXT * PCREATE_LINK_CONTEXT
#define RegCloseKey(hKey)
Definition: registry.h:47
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
Definition: bufpool.h:45
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
#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
HINSTANCE hApplet
Definition: access.c:17
#define IDS_NEW_INTERNET_SHORTCUT
Definition: resource.h:25
#define IDS_INVALID_PATH
Definition: resource.h:30
#define IDS_NO_DIRECTORY
Definition: resource.h:29
#define IDC_SHORTCUT_NAME
Definition: resource.h:41
#define IDB_SHORTCUT
Definition: resource.h:18
#define IDS_CREATE_SHORTCUT
Definition: resource.h:23
#define IDS_ERROR_NOT_FOUND
Definition: resource.h:24
#define IDC_SHORTCUT_LOCATION
Definition: resource.h:39
#define IDD_SHORTCUT_LOCATION
Definition: resource.h:12
#define IDS_CANTMAKESHORTCUT
Definition: resource.h:27
#define IDS_CANTMAKEINETSHORTCUT
Definition: resource.h:26
#define IDD_SHORTCUT_FINISH
Definition: resource.h:13
#define IDC_SHORTCUT_BROWSE
Definition: resource.h:40
#define IDS_NO_MEMORY
Definition: resource.h:28
#define IDS_INVALID_NAME
Definition: resource.h:31
#define IDI_APPINETICO
Definition: resource.h:9
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3353
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4118
#define wcschr
Definition: compat.h:17
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define MultiByteToWideChar
Definition: compat.h:110
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define wcsicmp
Definition: compat.h:15
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brsfolder.c:1406
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:294
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1777
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
Definition: path.c:867
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1723
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
Definition: string.c:1869
BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
Definition: url.c:2432
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
HRESULT Save([in, unique] LPCOLESTR pszFileName, [in] BOOL fRemember)
HRESULT SetPath([in] LPCWSTR pszFile)
HRESULT SetDescription([in] LPCWSTR pszName)
HRESULT SetWorkingDirectory([in] LPCWSTR pszDir)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define REG_SZ
Definition: layer.c:22
#define pch(ap)
Definition: match.c:418
LPCWSTR szPath
Definition: env.c:37
static HICON
Definition: imagelist.c:84
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
HICON hIcon
Definition: msconfig.c:44
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define L(x)
Definition: ntvdm.h:50
#define STGM_READ
Definition: objbase.h:917
const GUID IID_IPersistFile
#define LOWORD(l)
Definition: pedump.c:82
long LONG
Definition: pedump.c:60
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1298
static const WCHAR szName[]
Definition: powrprof.c:45
#define PROPSHEETHEADER
Definition: prsht.h:392
#define PSNRET_INVALID_NOCHANGEPAGE
Definition: prsht.h:131
#define CreatePropertySheetPage
Definition: prsht.h:399
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSN_WIZNEXT
Definition: prsht.h:121
#define PSP_DEFAULT
Definition: prsht.h:22
#define PSWIZB_NEXT
Definition: prsht.h:154
#define PSWIZB_FINISH
Definition: prsht.h:155
#define PSWIZB_BACK
Definition: prsht.h:153
#define PropSheet_SetWizButtons(d, f)
Definition: prsht.h:357
#define PropertySheet
Definition: prsht.h:400
#define PSN_WIZFINISH
Definition: prsht.h:122
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
#define PSH_USEICONID
Definition: prsht.h:42
#define PSCB_INITIALIZED
Definition: prsht.h:75
#define PSN_RESET
Definition: prsht.h:118
struct _PSHNOTIFY * LPPSHNOTIFY
#define PSN_SETACTIVE
Definition: prsht.h:115
#define PROPSHEETPAGE
Definition: prsht.h:389
#define WM_NOTIFY
Definition: richedit.h:61
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:415
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:163
HRESULT hr
Definition: shlfolder.c:183
#define SHCNE_DELETE
Definition: shlobj.h:1744
#define BIF_BROWSEINCLUDEFILES
Definition: shlobj.h:1159
#define SHCNF_PATHW
Definition: shlobj.h:1777
HRESULT WINAPI SHAutoComplete(HWND hwndEdit, DWORD dwFlags)
Definition: autocomp.cpp:191
#define SHACF_DEFAULT
Definition: shlwapi.h:1911
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define _countof(array)
Definition: sndvol32.h:68
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
HINSTANCE hInstance
Definition: prsht.h:296
DWORD dwSize
Definition: prsht.h:293
DWORD dwFlags
Definition: prsht.h:294
LPCWSTR pszIcon
Definition: prsht.h:299
HWND hwndParent
Definition: prsht.h:295
PFNPROPSHEETCALLBACK pfnCallback
Definition: prsht.h:311
HPROPSHEETPAGE * phpage
Definition: prsht.h:309
UINT nStartPage
Definition: prsht.h:304
LPARAM lParam
Definition: prsht.h:227
LPARAM lParam
Definition: prsht.h:331
NMHDR hdr
Definition: prsht.h:330
BFFCALLBACK lpfn
Definition: shlobj.h:1132
PCIDLIST_ABSOLUTE pidlRoot
Definition: shlobj.h:1128
UINT ulFlags
Definition: shlobj.h:1131
LPWSTR pszDisplayName
Definition: shlobj.h:1129
HWND hwndOwner
Definition: shlobj.h:1127
UINT code
Definition: winuser.h:3149
#define ICON_BIG
Definition: tnclass.cpp:51
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
unsigned char * LPBYTE
Definition: typedefs.h:53
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define HIWORD(l)
Definition: typedefs.h:247
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
#define ZeroMemory
Definition: winbase.h:1670
_In_ LPCSTR _In_opt_ LPCSTR lpExtension
Definition: winbase.h:3059
_In_ DWORD nLength
Definition: wincon.h:473
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define RegQueryValueEx
Definition: winreg.h:524
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define WM_GETTEXTLENGTH
Definition: winuser.h:1609
#define DWLP_USER
Definition: winuser.h:866
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define WM_COMMAND
Definition: winuser.h:1730
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define WM_SETFOCUS
Definition: winuser.h:1603
#define WM_INITDIALOG
Definition: winuser.h:1729
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define MB_ICONERROR
Definition: winuser.h:781
HWND WINAPI SetFocus(_In_opt_ HWND)
#define EM_SETSEL
Definition: winuser.h:2008
HWND WINAPI GetParent(_In_ HWND)
#define DWLP_MSGRESULT
Definition: winuser.h:864
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define SendDlgItemMessage
Definition: winuser.h:5832
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2044
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EN_CHANGE
Definition: winuser.h:2012
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185