[HEADERS]
[reactos.git] / reactos / base / applications / msconfig / toolspage.c
1 /*
2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/toolspage.c
5 * PURPOSE: Tools page message handler
6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
7 *
8 */
9
10 #include <precomp.h>
11
12 HWND hToolsPage;
13 HWND hToolsListCtrl;
14 HWND hToolsDialog;
15
16 void AddItem ( DWORD, DWORD, DWORD, DWORD, int );
17 void FillListView ( void );
18
19 DWORD ListItems_Cmds[20];
20 DWORD ListItems_Params[20];
21 DWORD ListItems_Locations[20];
22
23 void AddItem ( DWORD name_id, DWORD descr_id, DWORD cmd_id , DWORD param_id, int csidl ) {
24 TCHAR szTemp[256];
25 LV_ITEM item;
26
27 LoadString(hInst, name_id, szTemp, 256);
28 memset(&item, 0, sizeof(LV_ITEM));
29 item.mask = LVIF_TEXT;
30 item.iImage = 0;
31 item.pszText = szTemp;
32 item.iItem = ListView_GetItemCount(hToolsListCtrl);
33 item.lParam = 0;
34 (void)ListView_InsertItem(hToolsListCtrl, &item);
35
36 ListItems_Cmds[item.iItem] = cmd_id;
37 ListItems_Params[item.iItem] = param_id;
38 ListItems_Locations[item.iItem] = csidl;
39
40 LoadString(hInst, descr_id, szTemp, 256);
41 item.pszText = szTemp;
42 item.iSubItem = 1;
43 SendMessage(hToolsListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
44 }
45
46 void FillListView ( void ) {
47 AddItem(IDS_TOOLS_CMD_NAME, IDS_TOOLS_CMD_DESCR, IDS_TOOLS_CMD_CMD, IDS_TOOLS_CMD_PARAM, CSIDL_SYSTEM);
48 AddItem(IDS_TOOLS_REGEDIT_NAME, IDS_TOOLS_REGEDIT_DESCR, IDS_TOOLS_REGEDIT_CMD,IDS_TOOLS_REGEDIT_PARAM, CSIDL_WINDOWS);
49 AddItem(IDS_TOOLS_SYSDM_NAME, IDS_TOOLS_SYSDM_DESCR, IDS_TOOLS_SYSDM_CMD, IDS_TOOLS_SYSDM_PARAM, CSIDL_SYSTEM);
50 AddItem(IDS_TOOLS_INFO_NAME, IDS_TOOLS_INFO_DESCR, IDS_TOOLS_INFO_CMD, IDS_TOOLS_INFO_PARAM, CSIDL_SYSTEM);
51 }
52
53 INT_PTR CALLBACK
54 ToolsPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
55 {
56 LV_COLUMN column;
57 TCHAR szTemp[MAX_PATH*2];
58 TCHAR szTemp2[256];
59 TCHAR * Ptr = NULL;
60 LPNMITEMACTIVATE lpnmitem;
61 LPNMHDR nmh;
62 DWORD dwStyle;
63 PROCESS_INFORMATION pi;
64 STARTUPINFO si;
65
66 switch (message)
67 {
68 case WM_INITDIALOG:
69 {
70 hToolsListCtrl = GetDlgItem(hDlg, IDC_TOOLS_LIST);
71 hToolsDialog = hDlg;
72
73 dwStyle = (DWORD) SendMessage(hToolsListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
74 dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
75 SendMessage(hToolsListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
76
77 SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
78
79 // Initialize the application page's controls
80 column.mask = LVCF_TEXT | LVCF_WIDTH;
81
82 LoadString(hInst, IDS_TOOLS_COLUMN_NAME, szTemp, 256);
83 column.pszText = szTemp;
84 column.cx = 150;
85 (void)ListView_InsertColumn(hToolsListCtrl, 0, &column);
86
87 column.mask = LVCF_TEXT | LVCF_WIDTH;
88 LoadString(hInst, IDS_TOOLS_COLUMN_DESCR, szTemp, 256);
89 column.pszText = szTemp;
90 column.cx = 500;
91 (void)ListView_InsertColumn(hToolsListCtrl, 1, &column);
92
93 FillListView();
94 return TRUE;
95 }
96 case WM_COMMAND:
97 {
98 switch (LOWORD(wParam))
99 {
100 case IDC_BTN_RUN:
101 {
102 if (ListView_GetSelectionMark(hToolsListCtrl) != -1)
103 {
104 if (SHGetSpecialFolderPath(NULL, szTemp, ListItems_Locations[ListView_GetSelectionMark(hToolsListCtrl)], FALSE))
105 Ptr = PathAddBackslash(szTemp);
106
107 if (!Ptr)
108 Ptr = szTemp;
109
110 szTemp2[0] = _T('\0');
111 LoadString(hInst, ListItems_Cmds[ListView_GetSelectionMark(hToolsListCtrl)], Ptr, 256);
112 LoadString(hInst, ListItems_Params[ListView_GetSelectionMark(hToolsListCtrl)], szTemp2, 256);
113 if (_tcslen(szTemp2))
114 {
115 _tcscat(szTemp, _T(" "));
116 _tcscat(Ptr, szTemp2);
117 }
118 ZeroMemory(&si, sizeof(STARTUPINFO));
119 si.cb = sizeof(STARTUPINFO);
120 if (CreateProcess(NULL, szTemp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
121 {
122 CloseHandle(pi.hThread);
123 CloseHandle(pi.hProcess);
124 }
125 }
126 }
127 }
128 break;
129 }
130 case WM_NOTIFY:
131 {
132 nmh = (LPNMHDR) lParam;
133 if (nmh->hwndFrom == hToolsListCtrl)
134 {
135 switch (nmh->code)
136 {
137 case NM_CLICK:
138 {
139 lpnmitem = (LPNMITEMACTIVATE) lParam;
140 if (lpnmitem->iItem > -1)
141 {
142 LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], szTemp, 256);
143 szTemp2[0] = _T('\0');
144 LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
145 _tcscat(szTemp, _T(" "));
146 _tcscat(szTemp, szTemp2);
147 SendDlgItemMessage(hToolsDialog, IDC_TOOLS_CMDLINE, WM_SETTEXT, 0, (LPARAM) szTemp);
148 }
149 break;
150 }
151 case NM_DBLCLK:
152 {
153 lpnmitem = (LPNMITEMACTIVATE) lParam;
154 if (lpnmitem->iItem > -1)
155 {
156 if (SHGetSpecialFolderPath(NULL, szTemp, ListItems_Locations[ListView_GetSelectionMark(hToolsListCtrl)], FALSE))
157 Ptr = PathAddBackslash(szTemp);
158
159 if (!Ptr)
160 Ptr = szTemp;
161
162 szTemp2[0] = _T('\0');
163 LoadString(hInst, ListItems_Cmds[lpnmitem->iItem], Ptr, 256);
164 LoadString(hInst, ListItems_Params[lpnmitem->iItem], szTemp2, 256);
165 if (_tcslen(szTemp2))
166 {
167 _tcscat(szTemp, _T(" "));
168 _tcscat(Ptr, szTemp2);
169 }
170 ZeroMemory(&si, sizeof(STARTUPINFO));
171 si.cb = sizeof(STARTUPINFO);
172 if (CreateProcess(NULL, szTemp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
173 {
174 CloseHandle(pi.hThread);
175 CloseHandle(pi.hProcess);
176 }
177 }
178 break;
179 }
180 }
181 }
182 }
183 break;
184 }
185 return 0;
186 }
187