mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
- popup menu on right click
- fix some bugs when reading from reg - query the active list to get num items svn path=/trunk/; revision=20773
This commit is contained in:
@@ -23,10 +23,40 @@ BEGIN
|
||||
END
|
||||
POPUP "Help"
|
||||
BEGIN
|
||||
MENUITEM "About",ID_HELP_ABOUT
|
||||
MENUITEM "About",ID_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
IDR_POPUP MENU
|
||||
BEGIN
|
||||
POPUP "popup"
|
||||
BEGIN
|
||||
MENUITEM "Start",ID_START
|
||||
MENUITEM "Stop",ID_STOP
|
||||
MENUITEM "Pause",ID_PAUSE
|
||||
MENUITEM "Resume",ID_RESUME
|
||||
MENUITEM "Restart",ID_RESTART
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "All tasks"
|
||||
BEGIN
|
||||
MENUITEM "Start",ID_START
|
||||
MENUITEM "Stop",ID_STOP
|
||||
MENUITEM "Pause",ID_PAUSE
|
||||
MENUITEM "Resume",ID_RESUME
|
||||
MENUITEM "Restart",ID_RESTART
|
||||
MENUITEM "Refresh",ID_REFRESH
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Refresh",ID_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Properties",ID_PROP, "Default"
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "About",ID_HELP
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
IDD_ABOUTBOX DIALOG DISCARDABLE 22,16,190,182
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "About Service Manager"
|
||||
@@ -34,7 +64,7 @@ FONT 8, "Tahoma"
|
||||
BEGIN
|
||||
CONTROL "Service Manager v0.1\nCopyright (C) 2006\nby Ged Murphy ([email protected])",
|
||||
IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,48,7,130,26
|
||||
DEFPUSHBUTTON "Close",IDOK,140,162,44,15,WS_GROUP
|
||||
DEFPUSHBUTTON "Close",IDOK,75,162,44,15,WS_GROUP
|
||||
ICON IDI_SM_ICON,IDC_STATIC,12,7,30,20
|
||||
EDITTEXT IDC_LICENSE_EDIT,8,44,174,107,ES_MULTILINE |
|
||||
ES_READONLY | WS_VSCROLL
|
||||
@@ -80,19 +110,16 @@ END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_SERVICES_STATUS_RUNNING "Started"
|
||||
IDS_SERVICES_STATUS_STOPPED "Stopped"
|
||||
IDS_SERVICES_YES "Yes"
|
||||
IDS_SERVICES_UNKNOWN "Unknown"
|
||||
IDS_SERVICES_AUTO "Automatic"
|
||||
IDS_SERVICES_MAN "Manual"
|
||||
IDS_SERVICES_DIS "Disabled"
|
||||
IDS_SERVICES_STARTED "Started"
|
||||
IDS_SERVICES_AUTO "Automatic"
|
||||
IDS_SERVICES_MAN "Manual"
|
||||
IDS_SERVICES_DIS "Disabled"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_SERVICES_NUM_SERVICES "Num Services: %d"
|
||||
|
||||
IDS_NUM_SERVICES "Num Services: %d"
|
||||
|
||||
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
|
||||
/*"This program is free software; you can redistribute it "
|
||||
"and/or modify it under the terms of the GNU Lesser General "
|
||||
@@ -106,7 +133,7 @@ BEGIN
|
||||
"General Public License along with this program; if not, write "
|
||||
"to the Free Software Foundation, Inc., 59 Temple Place - Suite "
|
||||
"330, Boston, MA 02111-1307, USA." */
|
||||
|
||||
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -2,15 +2,18 @@
|
||||
#include "servman.h"
|
||||
/* temp file for debugging */
|
||||
|
||||
VOID GetError(VOID)
|
||||
VOID GetError(DWORD err)
|
||||
{
|
||||
LPVOID lpMsgBuf;
|
||||
|
||||
if (err == 0)
|
||||
err = GetLastError();
|
||||
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
err,
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
|
||||
(LPTSTR) &lpMsgBuf,
|
||||
0,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* FILE: subsys/system/servman/query.c
|
||||
* PURPOSE: Query service information
|
||||
* COPYRIGHT: Copyright 2005 Ged Murphy <[email protected]>
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include "servman.h"
|
||||
@@ -23,6 +23,29 @@ VOID FreeMemory(VOID)
|
||||
HeapFree(GetProcessHeap(), 0, pServiceStatus);
|
||||
}
|
||||
|
||||
VOID GetData(VOID)
|
||||
{
|
||||
LVITEM item;
|
||||
UINT sel;
|
||||
TCHAR buf[200];
|
||||
|
||||
sel = ListView_GetHotItem(hListView);
|
||||
|
||||
ZeroMemory(&item, sizeof(LV_ITEM));
|
||||
|
||||
item.mask = LVIF_TEXT;
|
||||
item.iItem = sel;
|
||||
item.iSubItem = 0;
|
||||
item.pszText = buf;
|
||||
item.cchTextMax = 200;
|
||||
|
||||
ListView_GetItem(hListView, &item);
|
||||
|
||||
|
||||
//DisplayString(sel);
|
||||
DisplayString(item.pszText);
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
RefreshServiceList(VOID)
|
||||
@@ -40,9 +63,10 @@ RefreshServiceList(VOID)
|
||||
|
||||
if (NumServices)
|
||||
{
|
||||
HICON hiconItem; /* icon for list-view items */
|
||||
HIMAGELIST hSmall; /* image list for other views */
|
||||
TCHAR buf[300];
|
||||
HICON hiconItem; /* icon for list-view items */
|
||||
HIMAGELIST hSmall; /* image list for other views */
|
||||
TCHAR buf[300]; /* buffer to hold key path */
|
||||
INT NumListedServ = 0; /* how many services were listed */
|
||||
|
||||
/* Create the icon image lists */
|
||||
hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
|
||||
@@ -52,13 +76,9 @@ RefreshServiceList(VOID)
|
||||
hiconItem = LoadImage(hInstance, MAKEINTRESOURCE(IDI_SM_ICON), IMAGE_ICON, 16, 16, 0);
|
||||
ImageList_AddIcon(hSmall, hiconItem);
|
||||
|
||||
/* assign the image to the list view */
|
||||
ListView_SetImageList(hListView, hSmall, LVSIL_SMALL);
|
||||
|
||||
/* set the number of services in the status bar */
|
||||
LoadString(hInstance, IDS_SERVICES_NUM_SERVICES, szNumServices, 32);
|
||||
_sntprintf(buf, 300, szNumServices, NumServices);
|
||||
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)buf);
|
||||
|
||||
|
||||
for (Index = 0; Index < NumServices; Index++)
|
||||
{
|
||||
@@ -73,15 +93,11 @@ RefreshServiceList(VOID)
|
||||
_sntprintf(buf, 300, Path,
|
||||
pServiceStatus[Index].lpServiceName);
|
||||
|
||||
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||
buf,
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) != ERROR_SUCCESS)
|
||||
{
|
||||
GetError();
|
||||
return FALSE;
|
||||
}
|
||||
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||
buf,
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey);
|
||||
|
||||
|
||||
/* set the display name */
|
||||
@@ -92,7 +108,7 @@ RefreshServiceList(VOID)
|
||||
item.iItem = ListView_GetItemCount(hListView);
|
||||
item.iItem = ListView_InsertItem(hListView, &item);
|
||||
|
||||
|
||||
|
||||
|
||||
/* set the description */
|
||||
dwValueSize = 0;
|
||||
@@ -102,12 +118,12 @@ RefreshServiceList(VOID)
|
||||
NULL,
|
||||
NULL,
|
||||
&dwValueSize);
|
||||
if (ret != ERROR_SUCCESS && ret != ERROR_FILE_NOT_FOUND)
|
||||
if (ret != ERROR_SUCCESS && ret != ERROR_FILE_NOT_FOUND && ret != ERROR_INVALID_HANDLE)
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (ret != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
Description = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwValueSize);
|
||||
@@ -125,7 +141,7 @@ RefreshServiceList(VOID)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, Description);
|
||||
RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
continue;
|
||||
}
|
||||
|
||||
item.pszText = Description;
|
||||
@@ -134,29 +150,20 @@ RefreshServiceList(VOID)
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, Description);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.pszText = '\0';
|
||||
item.iSubItem = 1;
|
||||
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* set the status */
|
||||
|
||||
if (pServiceStatus[Index].ServiceStatusProcess.dwCurrentState == SERVICE_RUNNING)
|
||||
{
|
||||
LoadString(hInstance, IDS_SERVICES_STATUS_RUNNING, szStatus, 128);
|
||||
LoadString(hInstance, IDS_SERVICES_STARTED, szStatus, 128);
|
||||
item.pszText = szStatus;
|
||||
item.iSubItem = 2;
|
||||
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.pszText = '\0';
|
||||
item.iSubItem = 2;
|
||||
SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* set the startup type */
|
||||
|
||||
@@ -169,7 +176,7 @@ RefreshServiceList(VOID)
|
||||
&dwValueSize))
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (StartUp == 0x02)
|
||||
@@ -207,9 +214,9 @@ RefreshServiceList(VOID)
|
||||
&dwValueSize))
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
LogOnAs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwValueSize);
|
||||
if (LogOnAs == NULL)
|
||||
{
|
||||
@@ -225,7 +232,7 @@ RefreshServiceList(VOID)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, LogOnAs);
|
||||
RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
continue;
|
||||
}
|
||||
|
||||
item.pszText = LogOnAs;
|
||||
@@ -237,7 +244,14 @@ RefreshServiceList(VOID)
|
||||
RegCloseKey(hKey);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
NumListedServ = ListView_GetItemCount(hListView);
|
||||
|
||||
/* set the number of listed services in the status bar */
|
||||
LoadString(hInstance, IDS_NUM_SERVICES, szNumServices, 32);
|
||||
_sntprintf(buf, 300, szNumServices, NumListedServ);
|
||||
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)buf);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -22,8 +22,9 @@
|
||||
#define ID_EXIT 2010
|
||||
|
||||
#define IDR_MAINMENU 102
|
||||
#define IDR_POPUP 103
|
||||
#define ID_VIEW_CUSTOMIZE 4021
|
||||
#define ID_HELP_ABOUT 4031
|
||||
#define ID_ABOUT 4031
|
||||
|
||||
#define IDS_FIRSTCOLUMN 1
|
||||
#define IDS_SECONDCOLUMN 2
|
||||
@@ -42,14 +43,11 @@
|
||||
#define IDS_TOOLTIP_HELP 6008
|
||||
#define IDS_TOOLTIP_EXIT 6009
|
||||
|
||||
#define IDS_SERVICES_STATUS_RUNNING 5000
|
||||
#define IDS_SERVICES_STATUS_STOPPED 5001
|
||||
#define IDS_SERVICES_YES 5002
|
||||
#define IDS_SERVICES_UNKNOWN 5003
|
||||
#define IDS_SERVICES_AUTO 5004
|
||||
#define IDS_SERVICES_MAN 5005
|
||||
#define IDS_SERVICES_DIS 5006
|
||||
#define IDS_SERVICES_NUM_SERVICES 5010
|
||||
#define IDS_SERVICES_STARTED 5000
|
||||
#define IDS_SERVICES_AUTO 5004
|
||||
#define IDS_SERVICES_MAN 5005
|
||||
#define IDS_SERVICES_DIS 5006
|
||||
#define IDS_NUM_SERVICES 5010
|
||||
|
||||
#define IDI_SM_ICON 50
|
||||
#define IDB_BUTTONS 51
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* FILE: subsys/system/servman/servman.c
|
||||
* PURPOSE: Main window message handler
|
||||
* COPYRIGHT: Copyright 2005 Ged Murphy <[email protected]>
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include "servman.h"
|
||||
@@ -16,6 +16,7 @@ HWND hMainWnd;
|
||||
HWND hListView;
|
||||
HWND hStatus;
|
||||
HWND hTool;
|
||||
HMENU hShortcutMenu;
|
||||
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
@@ -33,7 +34,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
LVCOLUMN lvc = { 0 };
|
||||
|
||||
/* Toolbar buttons */
|
||||
TBBUTTON tbb [NUM_BUTTONS] =
|
||||
TBBUTTON tbb [NUM_BUTTONS] =
|
||||
{ /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
|
||||
{TBICON_PROP, ID_PROP, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* properties */
|
||||
{TBICON_REFRESH, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* refresh */
|
||||
@@ -42,9 +43,9 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
/* Note: First item for a seperator is its width in pixels */
|
||||
{25, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, /* separator */
|
||||
|
||||
{TBICON_START, ID_START, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* start */
|
||||
{TBICON_START, ID_START, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* start */
|
||||
{TBICON_STOP, ID_STOP, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* stop */
|
||||
{TBICON_PAUSE, ID_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* pause */
|
||||
{TBICON_PAUSE, ID_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* pause */
|
||||
{TBICON_RESTART, ID_RESTART, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* restart */
|
||||
|
||||
{25, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, /* separator */
|
||||
@@ -105,7 +106,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
hListView = CreateWindow(WC_LISTVIEW,
|
||||
NULL,
|
||||
WS_CHILD | WS_VISIBLE | LVS_REPORT | WS_BORDER |
|
||||
WS_CHILD | WS_VISIBLE | LVS_REPORT | WS_BORDER |
|
||||
LVS_EDITLABELS | LVS_SORTASCENDING,
|
||||
0, 0, 0, 0, /* sized via WM_SIZE */
|
||||
hwnd,
|
||||
@@ -178,10 +179,17 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths);
|
||||
|
||||
|
||||
/* ======================== Create Popup Menu ============================== */
|
||||
|
||||
hShortcutMenu = LoadMenu(hInstance, MAKEINTRESOURCE (IDR_POPUP));
|
||||
hShortcutMenu = GetSubMenu(hShortcutMenu, 0);
|
||||
|
||||
|
||||
|
||||
|
||||
/* ================= populate the list view with all services =================== */
|
||||
|
||||
if (! RefreshServiceList() )
|
||||
GetError();
|
||||
RefreshServiceList();
|
||||
|
||||
}
|
||||
break;
|
||||
@@ -224,16 +232,26 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
LPNMITEMACTIVATE item;
|
||||
|
||||
|
||||
switch (((LPNMHDR) lParam)->code)
|
||||
{
|
||||
case NM_RCLICK:
|
||||
{
|
||||
//item = (LPNMITEMACTIVATE) lParam;
|
||||
//lpnmh = (LPNMHDR) lParam;
|
||||
POINT pt;
|
||||
|
||||
GetCursorPos(&pt);
|
||||
TrackPopupMenuEx(hShortcutMenu, TPM_RIGHTBUTTON, pt.x, pt.y, hwnd, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case NM_DBLCLK:
|
||||
item = (LPNMITEMACTIVATE) lParam;
|
||||
PropSheets(hwnd);
|
||||
|
||||
item = (LPNMITEMACTIVATE) lParam;
|
||||
PropSheets(hwnd);
|
||||
break;
|
||||
|
||||
|
||||
case TTN_GETDISPINFO:
|
||||
{
|
||||
LPTOOLTIPTEXT lpttt;
|
||||
@@ -274,7 +292,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case ID_RESTART:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_RESTART);
|
||||
break;
|
||||
|
||||
|
||||
case ID_NEW:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEW);
|
||||
break;
|
||||
@@ -300,6 +318,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case WM_CLOSE:
|
||||
/* free the service array */
|
||||
FreeMemory();
|
||||
DestroyMenu(hShortcutMenu);
|
||||
DestroyWindow(hwnd);
|
||||
break;
|
||||
|
||||
@@ -313,10 +332,10 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case ID_PROP:
|
||||
PropSheets(hwnd);
|
||||
break;
|
||||
|
||||
|
||||
case ID_REFRESH:
|
||||
if (! RefreshServiceList() )
|
||||
GetError();
|
||||
GetError(0);
|
||||
|
||||
case ID_EXPORT:
|
||||
break;
|
||||
@@ -340,7 +359,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
|
||||
case ID_HELP:
|
||||
MessageBox(NULL, _T("Help is not yet implemented\n"),
|
||||
MessageBox(NULL, _T("Help is not yet implemented\n"),
|
||||
_T("Note!"), MB_OK | MB_ICONINFORMATION);
|
||||
break;
|
||||
|
||||
@@ -351,7 +370,7 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
case ID_VIEW_CUSTOMIZE:
|
||||
break;
|
||||
|
||||
case ID_HELP_ABOUT:
|
||||
case ID_ABOUT:
|
||||
DialogBox(hInstance,
|
||||
MAKEINTRESOURCE(IDD_ABOUTBOX),
|
||||
hwnd,
|
||||
|
||||
@@ -15,10 +15,14 @@ BOOL RefreshServiceList(VOID);
|
||||
|
||||
BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
VOID GetError(VOID);
|
||||
BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount);
|
||||
|
||||
VOID GetError(DWORD);
|
||||
VOID FreeMemory(VOID);
|
||||
VOID DisplayString(PTCHAR);
|
||||
|
||||
VOID GetData(VOID);
|
||||
|
||||
LONG APIENTRY PropSheets(HWND hwnd);
|
||||
|
||||
DWORD GetServiceList(VOID);
|
||||
|
||||
Reference in New Issue
Block a user