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>
18 void AddItem ( DWORD
, DWORD
, DWORD
, DWORD
, int );
19 void FillListView ( void );
21 DWORD ListItems_Cmds
[20];
22 DWORD ListItems_Params
[20];
23 DWORD ListItems_Locations
[20];
25 void AddItem ( DWORD name_id
, DWORD descr_id
, DWORD cmd_id
, DWORD param_id
, int csidl
) {
29 LoadString(hInst
, name_id
, szTemp
, 256);
30 memset(&item
, 0, sizeof(LV_ITEM
));
31 item
.mask
= LVIF_TEXT
;
33 item
.pszText
= szTemp
;
34 item
.iItem
= ListView_GetItemCount(hToolsListCtrl
);
36 (void)ListView_InsertItem(hToolsListCtrl
, &item
);
38 ListItems_Cmds
[item
.iItem
] = cmd_id
;
39 ListItems_Params
[item
.iItem
] = param_id
;
40 ListItems_Locations
[item
.iItem
] = csidl
;
42 LoadString(hInst
, descr_id
, szTemp
, 256);
43 item
.pszText
= szTemp
;
45 SendMessage(hToolsListCtrl
, LVM_SETITEMTEXT
, item
.iItem
, (LPARAM
) &item
);
48 void FillListView ( void ) {
49 AddItem(IDS_TOOLS_CMD_NAME
, IDS_TOOLS_CMD_DESCR
, IDS_TOOLS_CMD_CMD
, IDS_TOOLS_CMD_PARAM
, CSIDL_SYSTEM
);
50 AddItem(IDS_TOOLS_REGEDIT_NAME
, IDS_TOOLS_REGEDIT_DESCR
, IDS_TOOLS_REGEDIT_CMD
,IDS_TOOLS_REGEDIT_PARAM
, CSIDL_WINDOWS
);
51 AddItem(IDS_TOOLS_SYSDM_NAME
, IDS_TOOLS_SYSDM_DESCR
, IDS_TOOLS_SYSDM_CMD
, IDS_TOOLS_SYSDM_PARAM
, CSIDL_SYSTEM
);
52 AddItem(IDS_TOOLS_INFO_NAME
, IDS_TOOLS_INFO_DESCR
, IDS_TOOLS_INFO_CMD
, IDS_TOOLS_INFO_PARAM
, CSIDL_SYSTEM
);
56 ToolsPageWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
59 TCHAR szTemp
[MAX_PATH
*2];
62 LPNMITEMACTIVATE lpnmitem
;
65 PROCESS_INFORMATION pi
;
72 hToolsListCtrl
= GetDlgItem(hDlg
, IDC_TOOLS_LIST
);
75 dwStyle
= (DWORD
) SendMessage(hToolsListCtrl
, LVM_GETEXTENDEDLISTVIEWSTYLE
, 0, 0);
76 dwStyle
= dwStyle
| LVS_EX_FULLROWSELECT
;
77 SendMessage(hToolsListCtrl
, LVM_SETEXTENDEDLISTVIEWSTYLE
, 0, dwStyle
);
79 SetWindowPos(hDlg
, NULL
, 10, 32, 0, 0, SWP_NOACTIVATE
| SWP_NOOWNERZORDER
| SWP_NOSIZE
| SWP_NOZORDER
);
81 // Initialize the application page's controls
82 column
.mask
= LVCF_TEXT
| LVCF_WIDTH
;
84 LoadString(hInst
, IDS_TOOLS_COLUMN_NAME
, szTemp
, 256);
85 column
.pszText
= szTemp
;
87 (void)ListView_InsertColumn(hToolsListCtrl
, 0, &column
);
89 column
.mask
= LVCF_TEXT
| LVCF_WIDTH
;
90 LoadString(hInst
, IDS_TOOLS_COLUMN_DESCR
, szTemp
, 256);
91 column
.pszText
= szTemp
;
93 (void)ListView_InsertColumn(hToolsListCtrl
, 1, &column
);
100 switch (LOWORD(wParam
))
104 if (ListView_GetSelectionMark(hToolsListCtrl
) != -1)
106 if (SHGetSpecialFolderPath(NULL
, szTemp
, ListItems_Locations
[ListView_GetSelectionMark(hToolsListCtrl
)], FALSE
))
107 Ptr
= PathAddBackslash(szTemp
);
112 szTemp2
[0] = _T('\0');
113 LoadString(hInst
, ListItems_Cmds
[ListView_GetSelectionMark(hToolsListCtrl
)], Ptr
, 256);
114 LoadString(hInst
, ListItems_Params
[ListView_GetSelectionMark(hToolsListCtrl
)], szTemp2
, 256);
115 if (_tcslen(szTemp2
))
117 _tcscat(szTemp
, _T(" "));
118 _tcscat(Ptr
, szTemp2
);
120 ZeroMemory(&si
, sizeof(STARTUPINFO
));
121 si
.cb
= sizeof(STARTUPINFO
);
122 if (CreateProcess(NULL
, szTemp
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
))
124 CloseHandle(pi
.hThread
);
125 CloseHandle(pi
.hProcess
);
134 nmh
= (LPNMHDR
) lParam
;
135 if (nmh
->hwndFrom
== hToolsListCtrl
)
139 case LVN_ITEMCHANGED
:
141 lpnmitem
= (LPNMITEMACTIVATE
) lParam
;
142 if (lpnmitem
->iItem
> -1)
144 LoadString(hInst
, ListItems_Cmds
[lpnmitem
->iItem
], szTemp
, 256);
145 szTemp2
[0] = _T('\0');
146 LoadString(hInst
, ListItems_Params
[lpnmitem
->iItem
], szTemp2
, 256);
147 _tcscat(szTemp
, _T(" "));
148 _tcscat(szTemp
, szTemp2
);
149 SendDlgItemMessage(hToolsDialog
, IDC_TOOLS_CMDLINE
, WM_SETTEXT
, 0, (LPARAM
) szTemp
);
155 lpnmitem
= (LPNMITEMACTIVATE
) lParam
;
156 if (lpnmitem
->iItem
> -1)
158 if (SHGetSpecialFolderPath(NULL
, szTemp
, ListItems_Locations
[ListView_GetSelectionMark(hToolsListCtrl
)], FALSE
))
159 Ptr
= PathAddBackslash(szTemp
);
164 szTemp2
[0] = _T('\0');
165 LoadString(hInst
, ListItems_Cmds
[lpnmitem
->iItem
], Ptr
, 256);
166 LoadString(hInst
, ListItems_Params
[lpnmitem
->iItem
], szTemp2
, 256);
167 if (_tcslen(szTemp2
))
169 _tcscat(szTemp
, _T(" "));
170 _tcscat(Ptr
, szTemp2
);
172 ZeroMemory(&si
, sizeof(STARTUPINFO
));
173 si
.cb
= sizeof(STARTUPINFO
);
174 if (CreateProcess(NULL
, szTemp
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
))
176 CloseHandle(pi
.hThread
);
177 CloseHandle(pi
.hProcess
);