ReactOS 0.4.15-dev-5875-g7c755d9
control.c
Go to the documentation of this file.
1/* Control Panel management
2 *
3 * Copyright 2001 Eric Pouech
4 * Copyright 2008 Owen Rudge
5 * Copyright 2022 Raymond Czerny
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include <assert.h>
23
24#define WIN32_NO_STATUS
25#define _INC_WINDOWS
26
27#include <windef.h>
28#include <winbase.h>
29#define NO_SHLWAPI_REG
30#include <shlwapi.h>
31#include <shellapi.h>
32#define COBJMACROS
33#include <shobjidl.h>
34#include <wine/debug.h>
35
36#include <strsafe.h>
37
38#include "cpanel.h"
39#include "wine/unicode.h"
40
42
44{
45 unsigned i;
46
47 for (i = 0; i < applet->count; i++)
48 applet->proc(applet->hWnd, CPL_STOP, i, applet->info[i].data);
49
50 if (applet->proc) applet->proc(applet->hWnd, CPL_EXIT, 0L, 0L);
51 FreeLibrary(applet->hModule);
52#ifndef __REACTOS__
53 list_remove( &applet->entry );
54#endif
55 HeapFree(GetProcessHeap(), 0, applet->cmd);
56 HeapFree(GetProcessHeap(), 0, applet);
57}
58
60{
61#ifdef __REACTOS__
62 ACTCTXW ActCtx = {sizeof(ACTCTX), ACTCTX_FLAG_RESOURCE_NAME_VALID};
64 BOOL bActivated;
65 WCHAR fileBuffer[MAX_PATH];
66#endif
67 CPlApplet* applet;
68 DWORD len;
69 unsigned i;
71 NEWCPLINFOW newinfo;
72
73 if (!(applet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet))))
74 return applet;
75
77 if (len > 0)
78 {
79 if (!(applet->cmd = HeapAlloc(GetProcessHeap(), 0, (len+1) * sizeof(WCHAR))))
80 {
81 WARN("Cannot allocate memory for applet path\n");
82 goto theError;
83 }
85 }
86 else
87 {
88 WARN("Cannot expand applet path\n");
89 goto theError;
90 }
91
92 applet->hWnd = hWnd;
93
94#ifdef __REACTOS__
95 StringCchCopy(fileBuffer, MAX_PATH, applet->cmd);
96 if (PathIsFileSpecW(fileBuffer))
97 SearchPath(NULL, fileBuffer, NULL, MAX_PATH, fileBuffer, NULL);
98 ActCtx.lpSource = fileBuffer;
99 ActCtx.lpResourceName = (LPCWSTR)123;
100 applet->hActCtx = CreateActCtx(&ActCtx);
101 bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE);
102#endif
103
104 if (!(applet->hModule = LoadLibraryW(applet->cmd))) {
105 WARN("Cannot load control panel applet %s\n", debugstr_w(applet->cmd));
106 goto theError;
107 }
108 if (!(applet->proc = (APPLET_PROC)GetProcAddress(applet->hModule, "CPlApplet"))) {
109 WARN("Not a valid control panel applet %s\n", debugstr_w(applet->cmd));
110 goto theError;
111 }
112 if (!applet->proc(hWnd, CPL_INIT, 0L, 0L)) {
113 WARN("Init of applet has failed\n");
114 goto theError;
115 }
116 if ((applet->count = applet->proc(hWnd, CPL_GETCOUNT, 0L, 0L)) == 0) {
117 WARN("No subprogram in applet\n");
118 applet->proc(applet->hWnd, CPL_EXIT, 0, 0);
119 goto theError;
120 }
121
122 applet = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, applet,
123 FIELD_OFFSET( CPlApplet, info[applet->count] ));
124
125 for (i = 0; i < applet->count; i++) {
126 ZeroMemory(&newinfo, sizeof(newinfo));
127 newinfo.dwSize = sizeof(NEWCPLINFOA);
128 applet->info[i].helpfile[0] = 0;
129 /* proc is supposed to return a null value upon success for
130 * CPL_INQUIRE and CPL_NEWINQUIRE
131 * However, real drivers don't seem to behave like this
132 * So, use introspection rather than return value
133 */
134 applet->proc(hWnd, CPL_INQUIRE, i, (LPARAM)&info);
135 applet->info[i].data = info.lData;
136#ifdef __REACTOS__
137 applet->info[i].idIcon = info.idIcon;
138#endif
139
140 if (info.idIcon != CPL_DYNAMIC_RES)
141 applet->info[i].icon = LoadIconW(applet->hModule, MAKEINTRESOURCEW(info.idIcon));
142 if (info.idName != CPL_DYNAMIC_RES)
143 LoadStringW(applet->hModule, info.idName,
144 applet->info[i].name, sizeof(applet->info[i].name) / sizeof(WCHAR));
145 if (info.idInfo != CPL_DYNAMIC_RES)
146 LoadStringW(applet->hModule, info.idInfo,
147 applet->info[i].info, sizeof(applet->info[i].info) / sizeof(WCHAR));
148
149 /* some broken control panels seem to return incorrect values in CPL_INQUIRE,
150 but proper data in CPL_NEWINQUIRE. if we get an empty string or a null
151 icon, see what we can get from CPL_NEWINQUIRE */
152
153 if (!applet->info[i].name[0]) info.idName = CPL_DYNAMIC_RES;
154
155 /* zero-length szInfo may not be a buggy applet, but it doesn't hurt for us
156 to check anyway */
157
158 if (!applet->info[i].info[0]) info.idInfo = CPL_DYNAMIC_RES;
159
160 if (applet->info[i].icon == NULL)
161 info.idIcon = CPL_DYNAMIC_RES;
162
163 if ((info.idIcon == CPL_DYNAMIC_RES) || (info.idName == CPL_DYNAMIC_RES) ||
164 (info.idInfo == CPL_DYNAMIC_RES)) {
165 applet->proc(hWnd, CPL_NEWINQUIRE, i, (LPARAM)&newinfo);
166
167 applet->info[i].data = newinfo.lData;
168 if (info.idIcon == CPL_DYNAMIC_RES) {
169 if (!newinfo.hIcon) WARN("couldn't get icon for applet %u\n", i);
170 applet->info[i].icon = newinfo.hIcon;
171 }
172 if (newinfo.dwSize == sizeof(NEWCPLINFOW)) {
173 if (info.idName == CPL_DYNAMIC_RES)
174 memcpy(applet->info[i].name, newinfo.szName, sizeof(newinfo.szName));
175 if (info.idInfo == CPL_DYNAMIC_RES)
176 memcpy(applet->info[i].info, newinfo.szInfo, sizeof(newinfo.szInfo));
177 memcpy(applet->info[i].helpfile, newinfo.szHelpFile, sizeof(newinfo.szHelpFile));
178 } else {
179 if (info.idName == CPL_DYNAMIC_RES)
181 sizeof(((LPNEWCPLINFOA)&newinfo)->szName) / sizeof(CHAR),
182 applet->info[i].name, sizeof(applet->info[i].name) / sizeof(WCHAR));
183 if (info.idInfo == CPL_DYNAMIC_RES)
184 MultiByteToWideChar(CP_ACP, 0, ((LPNEWCPLINFOA)&newinfo)->szInfo,
185 sizeof(((LPNEWCPLINFOA)&newinfo)->szInfo) / sizeof(CHAR),
186 applet->info[i].info, sizeof(applet->info[i].info) / sizeof(WCHAR));
188 sizeof(((LPNEWCPLINFOA)&newinfo)->szHelpFile) / sizeof(CHAR),
189 applet->info[i].helpfile,
190 sizeof(applet->info[i].helpfile) / sizeof(WCHAR));
191 }
192 }
193 }
194
195#ifdef __REACTOS__
196 if (bActivated)
198#endif
199
200#ifndef __REACTOS__
201 list_add_head( &panel->applets, &applet->entry );
202#endif
203
204 return applet;
205
206 theError:
207 FreeLibrary(applet->hModule);
208 HeapFree(GetProcessHeap(), 0, applet->cmd);
209 HeapFree(GetProcessHeap(), 0, applet);
210 return NULL;
211}
212
213#ifndef __REACTOS__
214
215#define IDC_LISTVIEW 1000
216#define IDC_STATUSBAR 1001
217
218#define NUM_COLUMNS 2
219#define LISTVIEW_DEFSTYLE (WS_CHILD | WS_VISIBLE | WS_TABSTOP |\
220 LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL)
221
223{
224 RECT ws, sb;
225 WCHAR empty_string[] = {0};
227 LVCOLUMNW lvc;
228
229 /* Create list view */
231 GetClientRect(panel->hWnd, &ws);
232
234 empty_string, LISTVIEW_DEFSTYLE | LVS_ICON,
235 0, 0, ws.right - ws.left, ws.bottom - ws.top -
236 (sb.bottom - sb.top), panel->hWnd,
237 (HMENU) IDC_LISTVIEW, panel->hInst, NULL);
238
239 if (!panel->hWndListView)
240 return FALSE;
241
242 /* Create image lists for list view */
247
250
251 /* Create columns for list view */
253 lvc.pszText = buf;
254 lvc.fmt = LVCFMT_LEFT;
255
256 /* Name column */
257 lvc.iSubItem = 0;
258 lvc.cx = (ws.right - ws.left) / 3;
259 LoadStringW(shell32_hInstance, IDS_CPANEL_NAME, buf, sizeof(buf) / sizeof(buf[0]));
260
261 if (ListView_InsertColumnW(panel->hWndListView, 0, &lvc) == -1)
262 return FALSE;
263
264 /* Description column */
265 lvc.iSubItem = 1;
266 lvc.cx = ((ws.right - ws.left) / 3) * 2;
267 LoadStringW(shell32_hInstance, IDS_CPANEL_DESCRIPTION, buf, sizeof(buf) /
268 sizeof(buf[0]));
269
270 if (ListView_InsertColumnW(panel->hWndListView, 1, &lvc) == -1)
271 return FALSE;
272
273 return(TRUE);
274}
275
277{
278 CPanel* panel = cs->lpCreateParams;
279 HMENU hMenu, hSubMenu;
280 CPlApplet* applet;
281 MENUITEMINFOW mii;
282 unsigned int i;
283 int menucount, index;
284 CPlItem *item;
285 LVITEMW lvItem;
287 INT sb_parts;
288 int itemidx;
289
290 SetWindowLongPtrW(hWnd, 0, (LONG_PTR)panel);
291 panel->hWnd = hWnd;
292
293 /* Initialise common control DLL */
294 icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
297
298 /* create the status bar */
300 return;
301
302 sb_parts = -1;
303 SendMessageW(panel->hWndStatusBar, SB_SETPARTS, 1, (LPARAM) &sb_parts);
304
305 /* create the list view */
306 if (!Control_CreateListView(panel))
307 return;
308
309 hMenu = LoadMenuW(shell32_hInstance, MAKEINTRESOURCEW(MENU_CPANEL));
310
311 /* insert menu items for applets */
312 hSubMenu = GetSubMenu(hMenu, 0);
313 menucount = 0;
314
315 LIST_FOR_EACH_ENTRY( applet, &panel->applets, CPlApplet, entry )
316 {
317 for (i = 0; i < applet->count; i++) {
318 /* set up a CPlItem for this particular subprogram */
319 item = HeapAlloc(GetProcessHeap(), 0, sizeof(CPlItem));
320
321 if (!item)
322 continue;
323
324 item->applet = applet;
325 item->id = i;
326
327 mii.cbSize = sizeof(MENUITEMINFOW);
329 mii.dwTypeData = applet->info[i].name;
330 mii.cch = sizeof(applet->info[i].name) / sizeof(WCHAR);
331 mii.wID = IDM_CPANEL_APPLET_BASE + menucount;
333
334 if (InsertMenuItemW(hSubMenu, menucount, TRUE, &mii)) {
335 /* add the list view item */
336 HICON icon = applet->info[i].icon;
337 if (!icon) icon = LoadImageW( 0, (LPCWSTR)IDI_WINLOGO, IMAGE_ICON, 0, 0, LR_SHARED );
340
341 lvItem.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM;
342 lvItem.iItem = menucount;
343 lvItem.iSubItem = 0;
344 lvItem.pszText = applet->info[i].name;
345 lvItem.iImage = index;
346 lvItem.lParam = (LPARAM) item;
347
348 itemidx = ListView_InsertItemW(panel->hWndListView, &lvItem);
349
350 /* add the description */
351 ListView_SetItemTextW(panel->hWndListView, itemidx, 1, applet->info[i].info);
352
353 /* update menu bar, increment count */
355 menucount++;
356 }
357 }
358 }
359
360 panel->total_subprogs = menucount;
361
362 /* check the "large items" icon in the View menu */
363 hSubMenu = GetSubMenu(hMenu, 1);
366
367 SetMenu(hWnd, hMenu);
368}
369
371{
372 HMENU hMenu, hSubMenu;
373 MENUITEMINFOW mii;
374 unsigned int i;
375
376 /* get the File menu */
377 hMenu = GetMenu(hWnd);
378
379 if (!hMenu)
380 return;
381
382 hSubMenu = GetSubMenu(hMenu, 0);
383
384 if (!hSubMenu)
385 return;
386
387 /* loop and free the item data */
388 for (i = IDM_CPANEL_APPLET_BASE; i <= IDM_CPANEL_APPLET_BASE + panel->total_subprogs; i++)
389 {
390 mii.cbSize = sizeof(MENUITEMINFOW);
391 mii.fMask = MIIM_DATA;
392
393 if (!GetMenuItemInfoW(hSubMenu, i, FALSE, &mii))
394 continue;
395
397 }
398}
399
401{
402 HMENU hMenu, hSubMenu;
403
405
406 /* update the menu */
407 hMenu = GetMenu(panel->hWnd);
408 hSubMenu = GetSubMenu(hMenu, 1);
409
411 id, MF_BYCOMMAND);
412}
413
415{
416 HMENU hMenu, hSubMenu;
417 MENUITEMINFOW mii;
418
419 /* retrieve the CPlItem structure from the menu item data */
420 hMenu = GetMenu(hWnd);
421
422 if (!hMenu)
423 return NULL;
424
425 hSubMenu = GetSubMenu(hMenu, 0);
426
427 if (!hSubMenu)
428 return NULL;
429
430 mii.cbSize = sizeof(MENUITEMINFOW);
431 mii.fMask = MIIM_DATA;
432
433 if (!GetMenuItemInfoW(hSubMenu, id, FALSE, &mii))
434 return NULL;
435
436 return (CPlItem *) mii.dwItemData;
437}
438
440{
441 LVITEMW lvItem;
442 int selitem;
443
445 | LVNI_SELECTED);
446
447 if (selitem != -1)
448 {
449 lvItem.iItem = selitem;
450 lvItem.mask = LVIF_PARAM;
451
452 if (SendMessageW(panel->hWndListView, LVM_GETITEMW, 0, (LPARAM) &lvItem))
453 return (CPlItem *) lvItem.lParam;
454 }
455
456 return NULL;
457}
458
460{
461 WCHAR verbOpen[] = {'c','p','l','o','p','e','n',0};
462 WCHAR format[] = {'@','%','d',0};
464
465 /* execute the applet if item is valid */
466 if (item)
467 {
468 wsprintfW(param, format, item->id);
469 ShellExecuteW(hWnd, verbOpen, item->applet->cmd, param, NULL, SW_SHOW);
470 }
471}
472
474 WPARAM lParam1, LPARAM lParam2)
475{
476 CPanel* panel = (CPanel*)GetWindowLongPtrW(hWnd, 0);
477
478 if (panel || wMsg == WM_CREATE) {
479 switch (wMsg) {
480 case WM_CREATE:
482 return 0;
483 case WM_DESTROY:
484 {
485 CPlApplet *applet, *next;
487 Control_UnloadApplet(applet);
488 }
491 break;
492 case WM_COMMAND:
493 switch (LOWORD(lParam1))
494 {
495 case IDM_CPANEL_EXIT:
496 SendMessageW(hWnd, WM_CLOSE, 0, 0);
497 return 0;
498
499 case IDM_CPANEL_ABOUT:
500 {
503 IMAGE_ICON, 48, 48, LR_SHARED);
504
505 LoadStringW(shell32_hInstance, IDS_CPANEL_TITLE, appName,
506 sizeof(appName) / sizeof(appName[0]));
507 ShellAboutW(hWnd, appName, NULL, icon);
508
509 return 0;
510 }
511
514 return 0;
515
518 return 0;
519
522 return 0;
523
526 return 0;
527
528 default:
529 /* check if this is an applet */
530 if ((LOWORD(lParam1) >= IDM_CPANEL_APPLET_BASE) &&
531 (LOWORD(lParam1) <= IDM_CPANEL_APPLET_BASE + panel->total_subprogs))
532 {
534 return 0;
535 }
536
537 break;
538 }
539
540 break;
541
542 case WM_NOTIFY:
543 {
544 LPNMHDR nmh = (LPNMHDR) lParam2;
545
546 switch (nmh->idFrom)
547 {
548 case IDC_LISTVIEW:
549 switch (nmh->code)
550 {
551 case NM_RETURN:
552 case NM_DBLCLK:
553 {
555 return 0;
556 }
557 case LVN_ITEMCHANGED:
558 {
560
561 /* update the status bar if item is valid */
562 if (item)
563 SetWindowTextW(panel->hWndStatusBar, item->applet->info[item->id].info);
564 else
566
567 return 0;
568 }
569 }
570
571 break;
572 }
573
574 break;
575 }
576
577 case WM_MENUSELECT:
578 /* check if this is an applet */
579 if ((LOWORD(lParam1) >= IDM_CPANEL_APPLET_BASE) &&
580 (LOWORD(lParam1) <= IDM_CPANEL_APPLET_BASE + panel->total_subprogs))
581 {
583
584 /* update the status bar if item is valid */
585 if (item)
586 SetWindowTextW(panel->hWndStatusBar, item->applet->info[item->id].info);
587 }
588 else if ((HIWORD(lParam1) == 0xFFFF) && (lParam2 == 0))
589 {
590 /* reset status bar description to that of the selected icon */
592
593 if (item)
594 SetWindowTextW(panel->hWndStatusBar, item->applet->info[item->id].info);
595 else
597
598 return 0;
599 }
600 else
602
603 return 0;
604
605 case WM_SIZE:
606 {
607 HDWP hdwp;
608 RECT sb;
609
610 hdwp = BeginDeferWindowPos(2);
611
612 if (hdwp == NULL)
613 break;
614
616
617 hdwp = DeferWindowPos(hdwp, panel->hWndListView, NULL, 0, 0,
618 LOWORD(lParam2), HIWORD(lParam2) - (sb.bottom - sb.top),
620
621 if (hdwp == NULL)
622 break;
623
624 hdwp = DeferWindowPos(hdwp, panel->hWndStatusBar, NULL, 0, 0,
625 LOWORD(lParam2), LOWORD(lParam1), SWP_NOZORDER | SWP_NOMOVE);
626
627 if (hdwp != NULL)
628 EndDeferWindowPos(hdwp);
629
630 return 0;
631 }
632 }
633 }
634
635 return DefWindowProcW(hWnd, wMsg, lParam1, lParam2);
636}
637
639{
640 WNDCLASSEXW wc;
641 MSG msg;
643 const WCHAR className[] = {'S','h','e','l','l','_','C','o','n','t','r','o',
644 'l','_','W','n','d','C','l','a','s','s',0};
645
646 LoadStringW(shell32_hInstance, IDS_CPANEL_TITLE, appName, sizeof(appName) / sizeof(appName[0]));
647
648 wc.cbSize = sizeof(wc);
651 wc.cbClsExtra = 0;
652 wc.cbWndExtra = sizeof(CPlApplet*);
653 wc.hInstance = panel->hInst = hInst;
657 wc.lpszMenuName = NULL;
658 wc.lpszClassName = className;
661
662 if (!RegisterClassExW(&wc)) return;
663
668 hWnd, NULL, hInst, panel);
669 if (!panel->hWnd) return;
670
671 while (GetMessageW(&msg, panel->hWnd, 0, 0)) {
674 }
675}
676
677static void Control_RegisterRegistryApplets(HWND hWnd, CPanel *panel, HKEY hkey_root, LPCWSTR szRepPath)
678{
681 HKEY hkey;
682
683 if (RegOpenKeyW(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
684 {
685 int idx = 0;
686
687 for(;; ++idx)
688 {
689 DWORD nameLen = MAX_PATH;
690 DWORD valueLen = MAX_PATH;
691
692 if (RegEnumValueW(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)value, &valueLen) != ERROR_SUCCESS)
693 break;
694
696 }
697 RegCloseKey(hkey);
698 }
699}
700
702{
703 static const WCHAR wszRegPath[] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls";
704 HANDLE h;
707 WCHAR *p;
708
709 /* first add .cpl files in the system directory */
711 p = buffer + strlenW(buffer);
712 *p++ = '\\';
713 lstrcpyW(p, L"*.cpl");
714
716 do {
717 lstrcpyW(p, fd.cFileName);
719 } while (FindNextFileW(h, &fd));
720 FindClose(h);
721 }
722
723 /* now check for cpls in the registry */
726
728}
729
730#else
731static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst)
732{
734 L"open",
735 L"explorer.exe",
736 L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}",
737 NULL,
739}
740#endif
741
742#ifdef __REACTOS__
743
747typedef struct tagAppDlgFindData
748{
749 PCWSTR szAppFile;
750 UINT_PTR sAppletNo;
751 ATOM aCPLName;
752 ATOM aCPLFlags;
753 HWND hRunDLL;
754 HWND hDlgResult;
755} AppDlgFindData;
756
763static BOOL CALLBACK
764Control_EnumWinProc(
765 _In_ HWND hwnd,
767{
768 AppDlgFindData* pData = (AppDlgFindData*)lParam;
769 WCHAR szClassName[256] = L"";
770
771 if (pData->hRunDLL == hwnd)
772 {
773 // Skip self instance
774 return TRUE;
775 }
776
778 {
779 // Note: A comparison on identical is not possible, the class names are different.
780 // ReactOS: 'rundll32_window'
781 // WinXP: 'RunDLL'
782 // other OS: not checked
783 if (StrStrIW(szClassName, L"rundll32") != NULL)
784 {
785 UINT_PTR sAppletNo;
786
787 sAppletNo = (UINT_PTR)GetPropW(hwnd, (LPTSTR)MAKEINTATOM(pData->aCPLFlags));
788 if (sAppletNo == pData->sAppletNo)
789 {
790 HANDLE hRes;
791 WCHAR szAppFile[MAX_PATH];
792
793 hRes = GetPropW(hwnd, (LPTSTR)MAKEINTATOM(pData->aCPLName));
794 GlobalGetAtomNameW((ATOM)HandleToUlong(hRes), szAppFile, _countof(szAppFile));
795 if (wcscmp(szAppFile, pData->szAppFile) == 0)
796 {
797 HWND hDialog = GetLastActivePopup(hwnd);
798 if (IsWindow(hDialog))
799 {
800 pData->hDlgResult = hDialog;
801 return FALSE; // stop enumeration
802 }
803 }
804 }
805 }
806 }
807 return TRUE; // continue enumeration
808}
809
819static void
820Control_ShowAppletInTaskbar(CPlApplet* applet, UINT index)
821{
822 HICON hSmallIcon;
823 ITaskbarList* pTaskbar = NULL;
824
825 /* Try to add a taskbar button only if the applet's parent window is the desktop */
826 if (GetParent(applet->hWnd) != NULL)
827 {
828 return;
829 }
830
831 SetWindowTextW(applet->hWnd, applet->info[index].name);
832
833 /* Try loading the small icon for the taskbar button */
834 hSmallIcon = (HICON)LoadImageW(applet->hModule,
835 MAKEINTRESOURCEW(applet->info[index].idIcon),
839 0);
840 if (hSmallIcon)
841 {
842 SendMessageW(applet->hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hSmallIcon);
843 }
844 else
845 {
846 if (applet->info[index].icon)
847 {
848 SendMessageW(applet->hWnd, WM_SETICON, ICON_SMALL, (LPARAM)applet->info[index].icon);
849 }
850 }
851
852 /* Add button to the taskbar */
854
855 /* Activate the corresponding button in the taskbar */
857 if (CoCreateInstance(&CLSID_TaskbarList,
858 NULL, CLSCTX_INPROC_SERVER,
859 &IID_ITaskbarList,
860 (LPVOID*)&pTaskbar) == S_OK)
861 {
862 if (ITaskbarList_HrInit(pTaskbar) == S_OK)
863 {
864 ITaskbarList_ActivateTab(pTaskbar, applet->hWnd);
865 }
866 ITaskbarList_Release(pTaskbar);
867 }
869}
870
871#endif /* __REACTOS__ */
872
873static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
874 /* forms to parse:
875 * foo.cpl,@sp,str
876 * foo.cpl,@sp
877 * foo.cpl,,str
878 * foo.cpl @sp
879 * foo.cpl str
880 * "a path\foo.cpl"
881 */
882{
884 LPWSTR beg = NULL;
885 LPWSTR end;
886 WCHAR ch;
887 LPWSTR ptr;
888 signed sp = -1;
889 LPWSTR extraPmtsBuf = NULL;
890 LPWSTR extraPmts = NULL;
891 BOOL quoted = FALSE;
892 CPlApplet *applet;
893
894 buffer = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(wszCmd) + 1) * sizeof(*wszCmd));
895 if (!buffer) return;
896
897 end = lstrcpyW(buffer, wszCmd);
898
899 for (;;) {
900 ch = *end;
901 if (ch == '"') quoted = !quoted;
902 if (!quoted && (ch == ' ' || ch == ',' || ch == '\0')) {
903 *end = '\0';
904 if (beg) {
905 if (*beg == '@') {
906 sp = atoiW(beg + 1);
907 } else if (*beg == '\0') {
908 sp = -1;
909 } else {
910 extraPmtsBuf = beg;
911 }
912 }
913 if (ch == '\0') break;
914 beg = end + 1;
915 if (ch == ' ') while (end[1] == ' ') end++;
916 }
917 end++;
918 }
919 while ((ptr = StrChrW(buffer, '"')))
920 memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
921
922 /* now check for any quotes in extraPmtsBuf and remove */
923 if (extraPmtsBuf != NULL)
924 {
925 beg = end = extraPmtsBuf;
926 quoted = FALSE;
927
928 for (;;) {
929 ch = *end;
930 if (ch == '"') quoted = !quoted;
931 if (!quoted && (ch == ' ' || ch == ',' || ch == '\0')) {
932 *end = '\0';
933 if (beg) {
934 if (*beg != '\0') {
935 extraPmts = beg;
936 }
937 }
938 if (ch == '\0') break;
939 beg = end + 1;
940 if (ch == ' ') while (end[1] == ' ') end++;
941 }
942 end++;
943 }
944
945 while ((ptr = StrChrW(extraPmts, '"')))
946 memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
947
948 if (extraPmts == NULL)
949 extraPmts = extraPmtsBuf;
950 }
951
952 /* Now check if there had been a numerical value in the extra params */
953 if ((extraPmts) && (*extraPmts == '@') && (sp == -1)) {
954 sp = atoiW(extraPmts + 1);
955 }
956
957 TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp);
958
959 applet = Control_LoadApplet(hWnd, buffer, panel);
960 if (applet)
961 {
962#ifdef __REACTOS__
964 BOOL bActivated;
965 ATOM aCPLName;
966 ATOM aCPLFlags;
967 ATOM aCPLPath;
968 AppDlgFindData findData;
969#endif
970 /* we've been given a textual parameter (or none at all) */
971 if (sp == -1) {
972 while ((++sp) != applet->count) {
973 TRACE("sp %d, name %s\n", sp, debugstr_w(applet->info[sp].name));
974
975 if (StrCmpIW(extraPmts, applet->info[sp].name) == 0)
976 break;
977 }
978 }
979
980 if (sp >= applet->count) {
981 WARN("Out of bounds (%u >= %u), setting to 0\n", sp, applet->count);
982 sp = 0;
983 }
984
985#ifdef __REACTOS__
986 bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE);
987
988 aCPLPath = GlobalFindAtomW(applet->cmd);
989 if (!aCPLPath)
990 {
991 aCPLPath = GlobalAddAtomW(applet->cmd);
992 }
993
994 aCPLName = GlobalFindAtomW(L"CPLName");
995 if (!aCPLName)
996 {
997 aCPLName = GlobalAddAtomW(L"CPLName");
998 }
999
1000 aCPLFlags = GlobalFindAtomW(L"CPLFlags");
1001 if (!aCPLFlags)
1002 {
1003 aCPLFlags = GlobalAddAtomW(L"CPLFlags");
1004 }
1005
1006 findData.szAppFile = applet->cmd;
1007 findData.sAppletNo = (UINT_PTR)(sp + 1);
1008 findData.aCPLName = aCPLName;
1009 findData.aCPLFlags = aCPLFlags;
1010 findData.hRunDLL = applet->hWnd;
1011 findData.hDlgResult = NULL;
1012 // Find the dialog of this applet in the first instance.
1013 // Note: The simpler functions "FindWindow" or "FindWindowEx" does not find this type of dialogs.
1014 EnumWindows(Control_EnumWinProc, (LPARAM)&findData);
1015 if (findData.hDlgResult)
1016 {
1017 BringWindowToTop(findData.hDlgResult);
1018 }
1019 else
1020 {
1021 SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLName), (HANDLE)MAKEINTATOM(aCPLPath));
1022 SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLFlags), UlongToHandle(sp + 1));
1023 Control_ShowAppletInTaskbar(applet, sp);
1024#endif
1025
1026 if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts))
1027 applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data);
1028#ifdef __REACTOS__
1029 RemovePropW(applet->hWnd, applet->cmd);
1030 GlobalDeleteAtom(aCPLPath);
1031 }
1032#endif
1033
1034 Control_UnloadApplet(applet);
1035
1036#ifdef __REACTOS__
1037 if (bActivated)
1039#endif
1040
1041 }
1042
1044}
1045
1046/*************************************************************************
1047 * Control_RunDLLW [SHELL32.@]
1048 *
1049 */
1051{
1052 CPanel panel;
1053
1054 TRACE("(%p, %p, %s, 0x%08x)\n",
1055 hWnd, hInst, debugstr_w(cmd), nCmdShow);
1056
1057#ifndef __REACTOS__
1058 memset(&panel, 0, sizeof(panel));
1059 list_init( &panel.applets );
1060#endif
1061
1062 if (!cmd || !*cmd) {
1063 Control_DoWindow(&panel, hWnd, hInst);
1064 } else {
1065 Control_DoLaunch(&panel, hWnd, cmd);
1066 }
1067}
1068
1069/*************************************************************************
1070 * Control_RunDLLA [SHELL32.@]
1071 *
1072 */
1074{
1075 DWORD len = MultiByteToWideChar(CP_ACP, 0, cmd, -1, NULL, 0 );
1076 LPWSTR wszCmd = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1077 if (wszCmd && MultiByteToWideChar(CP_ACP, 0, cmd, -1, wszCmd, len ))
1078 {
1079 Control_RunDLLW(hWnd, hInst, wszCmd, nCmdShow);
1080 }
1081 HeapFree(GetProcessHeap(), 0, wszCmd);
1082}
1083
1084/*************************************************************************
1085 * Control_FillCache_RunDLLW [SHELL32.@]
1086 *
1087 */
1089{
1090 FIXME("%p %p 0x%08x 0x%08x stub\n", hWnd, hModule, w, x);
1091 return S_OK;
1092}
1093
1094/*************************************************************************
1095 * Control_FillCache_RunDLLA [SHELL32.@]
1096 *
1097 */
1099{
1101}
1102
1103
1104#ifdef __REACTOS__
1105/*************************************************************************
1106 * RunDll_CallEntry16 [SHELL32.122]
1107 * the name is OK (when written with Dll, and not DLL as in Wine!)
1108 */
1109void WINAPI RunDll_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst,
1110 LPCSTR cmdline, INT cmdshow )
1111{
1112 FIXME( "proc %lx hwnd %p inst %p cmdline %s cmdshow %d\n",
1113 proc, hwnd, inst, debugstr_a(cmdline), cmdshow );
1114}
1115#endif
1116
1117/*************************************************************************
1118 * CallCPLEntry16 [SHELL32.166]
1119 *
1120 * called by desk.cpl on "Advanced" with:
1121 * hMod("DeskCp16.Dll"), pFunc("CplApplet"), 0, 1, 0xc, 0
1122 *
1123 */
1124#ifndef __REACTOS__
1126#else
1128LRESULT WINAPI CallCPLEntry16(HINSTANCE hMod, FARPROC16 pFunc, HWND dw3, UINT dw4, LPARAM dw5, LPARAM dw6)
1129#endif
1130{
1131 FIXME("(%p, %p, %08x, %08x, %08x, %08x): stub.\n", hMod, pFunc, dw3, dw4, dw5, dw6);
1132 return 0x0deadbee;
1133}
#define shell32_hInstance
Arabic default style
Definition: afstyles.h:94
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define MAX_STRING_LEN
Definition: precomp.h:36
VOID WINAPI Control_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow)
Definition: control.c:1050
#define index(s, c)
Definition: various.h:29
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static void list_init(struct list_entry *head)
Definition: list.h:51
#define UlongToHandle(ul)
Definition: basetsd.h:97
#define HandleToUlong(h)
Definition: basetsd.h:79
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define RegCloseKey(hKey)
Definition: registry.h:47
static const WCHAR szClassName[]
Definition: clipbrd.c:11
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
HWND WINAPI CreateStatusWindowW(LONG style, LPCWSTR text, HWND parent, UINT wid)
Definition: commctrl.c:795
#define CPL_INQUIRE
Definition: cpl.h:14
#define CPL_DYNAMIC_RES
Definition: cpl.h:11
LONG(APIENTRY * APPLET_PROC)(HWND, UINT, LPARAM, LPARAM)
Definition: cpl.h:23
struct tagNEWCPLINFOA NEWCPLINFOA
#define CPL_DBLCLK
Definition: cpl.h:16
#define CPL_STARTWPARMSW
Definition: cpl.h:21
#define CPL_INIT
Definition: cpl.h:12
#define CPL_EXIT
Definition: cpl.h:18
#define CPL_GETCOUNT
Definition: cpl.h:13
#define CPL_NEWINQUIRE
Definition: cpl.h:19
#define CPL_STOP
Definition: cpl.h:17
#define ERROR_SUCCESS
Definition: deptool.c:10
WORD ATOM
Definition: dimm.idl:113
#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
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3291
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
Definition: reg.c:2853
HMODULE hModule
Definition: animate.c:44
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:468
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
Definition: string.c:384
#define GetProcessHeap()
Definition: compat.h:736
int(* FARPROC)()
Definition: compat.h:36
#define CP_ACP
Definition: compat.h:109
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
#define MultiByteToWideChar
Definition: compat.h:110
#define LoadLibraryW(x)
Definition: compat.h:747
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI DeactivateActCtx(IN DWORD dwFlags, IN ULONG_PTR ulCookie)
Definition: actctx.c:268
BOOL WINAPI ActivateActCtx(IN HANDLE hActCtx, OUT PULONG_PTR ulCookie)
Definition: actctx.c:237
ATOM WINAPI GlobalFindAtomW(LPCWSTR lpString)
Definition: atom.c:474
UINT WINAPI GlobalGetAtomNameW(ATOM nAtom, LPWSTR lpBuffer, int nSize)
Definition: atom.c:496
ATOM WINAPI GlobalDeleteAtom(ATOM nAtom)
Definition: atom.c:454
ATOM WINAPI GlobalAddAtomW(LPCWSTR lpString)
Definition: atom.c:444
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
CPlApplet * Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel *panel)
Definition: control.c:59
DWORD WINAPI CallCPLEntry16(HMODULE hMod, FARPROC pFunc, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6)
Definition: control.c:1125
HRESULT WINAPI Control_FillCache_RunDLLA(HWND hWnd, HANDLE hModule, DWORD w, DWORD x)
Definition: control.c:1098
void Control_UnloadApplet(CPlApplet *applet)
Definition: control.c:43
#define IDC_STATUSBAR
Definition: control.c:216
#define IDC_LISTVIEW
Definition: control.c:215
static CPlItem * Control_GetCPlItem_From_ListView(CPanel *panel)
Definition: control.c:439
static void Control_DoInterface(CPanel *panel, HWND hWnd, HINSTANCE hInst)
Definition: control.c:638
static BOOL Control_CreateListView(CPanel *panel)
Definition: control.c:222
static void Control_StartApplet(HWND hWnd, CPlItem *item)
Definition: control.c:459
static void Control_RegisterRegistryApplets(HWND hWnd, CPanel *panel, HKEY hkey_root, LPCWSTR szRepPath)
Definition: control.c:677
static CPlItem * Control_GetCPlItem_From_MenuID(HWND hWnd, UINT id)
Definition: control.c:414
void WINAPI Control_RunDLLA(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow)
Definition: control.c:1073
static void Control_DoWindow(CPanel *panel, HWND hWnd, HINSTANCE hInst)
Definition: control.c:701
#define LISTVIEW_DEFSTYLE
Definition: control.c:219
static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg, WPARAM lParam1, LPARAM lParam2)
Definition: control.c:473
static void Control_WndProc_Create(HWND hWnd, const CREATESTRUCTW *cs)
Definition: control.c:276
HRESULT WINAPI Control_FillCache_RunDLLW(HWND hWnd, HANDLE hModule, DWORD w, DWORD x)
Definition: control.c:1088
static void Control_FreeCPlItems(HWND hWnd, CPanel *panel)
Definition: control.c:370
static void Control_DoLaunch(CPanel *panel, HWND hWnd, LPCWSTR wszCmd)
Definition: control.c:873
static void Control_UpdateListViewStyle(CPanel *panel, UINT style, UINT id)
Definition: control.c:400
BOOL WINAPI PathIsFileSpecW(LPCWSTR lpszPath)
Definition: path.c:2133
int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp)
Definition: string.c:353
superblock * sb
Definition: btrfs.c:4261
#define ULONG_PTR
Definition: config.h:101
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint end
Definition: gl.h:1545
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLuint buffer
Definition: glext.h:5915
GLuint index
Definition: glext.h:6031
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
GLfloat param
Definition: glext.h:5796
GLenum GLsizei len
Definition: glext.h:6722
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
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
#define cs
Definition: i386-dis.c:443
#define S_OK
Definition: intsafe.h:52
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
_In_ PCWSTR _Out_ PVOID * ActCtx
Definition: ldrtypes.h:247
const char * appName(const char *argv0)
Definition: loadlib.c:89
#define DECLARE_HANDLE(name)
Definition: mimeole.idl:23
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static PVOID ptr
Definition: dispmode.c:27
static HICON
Definition: imagelist.c:84
static const WCHAR sp[]
Definition: suminfo.c:287
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static ATOM item
Definition: dde.c:856
#define _In_
Definition: ms_sal.h:308
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
static HANDLE proc()
Definition: pdb.c:34
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_VISIBLE
Definition: pedump.c:620
static const WCHAR szName[]
Definition: powrprof.c:45
#define LVSIL_SMALL
Definition: commctrl.h:2299
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
#define LVS_ICON
Definition: commctrl.h:2261
#define NM_DBLCLK
Definition: commctrl.h:131
#define WC_LISTVIEWW
Definition: commctrl.h:2257
#define LVNI_SELECTED
Definition: commctrl.h:2424
#define CCS_BOTTOM
Definition: commctrl.h:2244
#define LVS_REPORT
Definition: commctrl.h:2262
#define LVS_SMALLICON
Definition: commctrl.h:2263
#define LVCF_WIDTH
Definition: commctrl.h:2587
#define LVNI_FOCUSED
Definition: commctrl.h:2423
#define LVM_SETIMAGELIST
Definition: commctrl.h:2303
#define ILC_COLOR32
Definition: commctrl.h:358
#define LVM_GETNEXTITEM
Definition: commctrl.h:2433
#define NM_RETURN
Definition: commctrl.h:132
#define LVIF_PARAM
Definition: commctrl.h:2311
#define LVIF_TEXT
Definition: commctrl.h:2309
#define LVCF_FMT
Definition: commctrl.h:2586
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define LVCF_SUBITEM
Definition: commctrl.h:2589
#define LVCFMT_LEFT
Definition: commctrl.h:2598
#define ILC_MASK
Definition: commctrl.h:351
#define SB_SETPARTS
Definition: commctrl.h:1954
#define SBARS_SIZEGRIP
Definition: commctrl.h:1923
#define LVIF_IMAGE
Definition: commctrl.h:2310
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define LVN_ITEMCHANGED
Definition: commctrl.h:3131
#define LVCF_TEXT
Definition: commctrl.h:2588
#define LVM_GETITEMW
Definition: commctrl.h:2390
#define LVS_LIST
Definition: commctrl.h:2264
#define ICC_LISTVIEW_CLASSES
Definition: commctrl.h:58
#define LVSIL_NORMAL
Definition: commctrl.h:2298
static unsigned __int64 next
Definition: rand_nt.c:6
#define ListView_InsertItemW(hwnd, pitem)
Definition: commctrl.h:33
#define atoiW(s)
Definition: unicode.h:54
#define strlenW(s)
Definition: unicode.h:28
#define WM_NOTIFY
Definition: richedit.h:61
TCHAR szHelpFile[]
Definition: scrnsave.c:31
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
static int fd
Definition: io.c:51
#define memset(x, y, z)
Definition: compat.h:39
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2346
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:815
#define FCIDM_SHVIEW_BIGICON
Definition: shresdef.h:813
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:814
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:816
#define IDI_SHELL_CONTROL_PANEL
Definition: shresdef.h:553
const char * ws
Definition: skip_ws.cpp:7
#define _countof(array)
Definition: sndvol32.h:68
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
#define StringCchCopy
Definition: strsafe.h:139
Definition: cpanel.h:56
HIMAGELIST hImageListLarge
Definition: cpanel.h:62
struct list applets
Definition: cpanel.h:57
HIMAGELIST hImageListSmall
Definition: cpanel.h:63
unsigned total_subprogs
Definition: cpanel.h:60
HINSTANCE hInst
Definition: cpanel.h:59
HWND hWndStatusBar
Definition: cpanel.h:64
HWND hWndListView
Definition: cpanel.h:61
HWND hWnd
Definition: cpanel.h:58
HMODULE hModule
Definition: cpanel.h:50
struct applet_info info[1]
Definition: cpanel.h:52
LPWSTR cmd
Definition: cpanel.h:48
APPLET_PROC proc
Definition: cpanel.h:51
HWND hWnd
Definition: cpanel.h:47
struct list entry
Definition: cpanel.h:43
unsigned count
Definition: cpanel.h:49
Definition: cpanel.h:68
LPCWSTR lpszClassName
Definition: winuser.h:3216
LPCWSTR lpszMenuName
Definition: winuser.h:3215
HBRUSH hbrBackground
Definition: winuser.h:3214
WNDPROC lpfnWndProc
Definition: winuser.h:3208
UINT cbSize
Definition: winuser.h:3206
int cbWndExtra
Definition: winuser.h:3210
HCURSOR hCursor
Definition: winuser.h:3213
HICON hIconSm
Definition: winuser.h:3217
HINSTANCE hInstance
Definition: winuser.h:3211
UINT style
Definition: winuser.h:3207
int cbClsExtra
Definition: winuser.h:3209
HICON hIcon
Definition: winuser.h:3212
Definition: ftp_var.h:139
Definition: cookie.c:34
Definition: name.c:39
Definition: cpl.h:24
LPWSTR pszText
Definition: commctrl.h:2567
LPWSTR pszText
Definition: commctrl.h:2365
int iSubItem
Definition: commctrl.h:2362
UINT mask
Definition: commctrl.h:2360
LPARAM lParam
Definition: commctrl.h:2368
int iImage
Definition: commctrl.h:2367
ULONG_PTR dwItemData
Definition: winuser.h:3258
LPWSTR dwTypeData
Definition: winuser.h:3259
DWORD dwSize
Definition: cpl.h:41
UINT_PTR idFrom
Definition: winuser.h:3148
UINT code
Definition: winuser.h:3149
#define ICON_SMALL
Definition: tnclass.cpp:48
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define HIWORD(l)
Definition: typedefs.h:247
Definition: pdh_main.c:94
#define ZeroMemory
Definition: winbase.h:1670
#define MAKEINTATOM(i)
Definition: winbase.h:1451
#define SearchPath
Definition: winbase.h:3771
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LRESULT(CALLBACK * FARPROC16)()
Definition: windef16.h:156
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define WHITE_BRUSH
Definition: wingdi.h:902
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define CS_VREDRAW
Definition: winuser.h:653
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_CLOSE
Definition: winuser.h:1611
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
#define MF_BYCOMMAND
Definition: winuser.h:202
#define MIIM_STRING
Definition: winuser.h:722
#define GetWindowLongPtrW
Definition: winuser.h:4819
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2172
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define MIIM_ID
Definition: winuser.h:717
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HANDLE WINAPI RemovePropW(_In_ HWND, _In_ LPCWSTR)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define IMAGE_ICON
Definition: winuser.h:212
HWND WINAPI GetLastActivePopup(_In_ HWND)
#define WM_CREATE
Definition: winuser.h:1598
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1601
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
#define SWP_NOMOVE
Definition: winuser.h:1234
#define WM_COMMAND
Definition: winuser.h:1730
#define CS_HREDRAW
Definition: winuser.h:648
#define IDC_ARROW
Definition: winuser.h:682
#define SM_CYSMICON
Definition: winuser.h:1007
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define IDI_WINLOGO
Definition: winuser.h:704
#define SW_SHOWDEFAULT
Definition: winuser.h:774
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define SM_CXSMICON
Definition: winuser.h:1006
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define SM_CYICON
Definition: winuser.h:967
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI DrawMenuBar(_In_ HWND)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
struct tagNMHDR * LPNMHDR
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define LR_SHARED
Definition: winuser.h:1094
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)
HWND WINAPI GetParent(_In_ HWND)
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SW_SHOW
Definition: winuser.h:769
#define WM_DESTROY
Definition: winuser.h:1599
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define SWP_NOZORDER
Definition: winuser.h:1237
#define SetWindowLongPtrW
Definition: winuser.h:5336
#define GWL_STYLE
Definition: winuser.h:846
#define SM_CXICON
Definition: winuser.h:966
#define WM_MENUSELECT
Definition: winuser.h:1737
int WINAPI GetSystemMetrics(_In_ int)
#define MIIM_DATA
Definition: winuser.h:721
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:771
BOOL WINAPI BringWindowToTop(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HMENU WINAPI GetMenu(_In_ HWND)
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
struct tagMENUITEMINFOW MENUITEMINFOW
HDWP WINAPI BeginDeferWindowPos(_In_ int)
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
CHAR * LPTSTR
Definition: xmlstorage.h:192
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175